使用 Websphere Application Server + Wicket 1.6 我的装载网址存在一些问题。
当我调用类似于localhost:9080/danesCooking/pies/meat
的网址时,我在Chrome网络标签中看到以下内容:
localhost:9080/danesCooking/pies/meat status code 302
localhost:9080/danesCooking/meat?2 status code 404
所以似乎/馅饼/部分会丢失。将应用程序部署到Tomcat\JBoss\
时,不会发生此问题....
可能相关,馅饼本身不是一个已装载的页面。
我已经查看了一些wicket问题\论坛,似乎大多数问题似乎都已解决\冲突的答案\与相对网址有关(已在1.5.x中修复)
有没有人遇到过这个问题,还记得如何解决这个问题?
使用 WAS * 版本:7和8.5 * 自由。
答案 0 :(得分:6)
此问题实际上已在此处列出; https://issues.apache.org/jira/browse/WICKET-3258
我对Wicket 6.9.1中的问题的解决方案是;
public class MyApplication extends WebApplication {
@Override
public Class<? extends WebPage> getHomePage() {
return MyHomePage.class;
}
/* *********************************************** */
// Resolve Websphere Relative URL "sendRedirect" Bug
@Override
protected WebResponse newWebResponse(WebRequest webRequest, HttpServletResponse httpServletResponse) {
return new FixedServletWebResponse((ServletWebRequest) webRequest, httpServletResponse);
}
/**
* Websphere incorrectly handles relative redirect pages when "HttpServletResponse.sendRedirect(url)" is called.
*
* This small fix ensures that Websphere is only ever provided with absolute URLs so that this issue never occurs.
*/
private static class FixedServletWebResponse extends ServletWebResponse {
private final ServletWebRequest webRequest;
protected FixedServletWebResponse(ServletWebRequest webRequest, HttpServletResponse httpServletResponse) {
super(webRequest, httpServletResponse);
this.webRequest = webRequest;
}
@Override
public String encodeRedirectURL(CharSequence url) {
Url relativeUrl = Url.parse(url);
return new UrlRenderer(webRequest).renderFullUrl(relativeUrl);
}
}
/* *********************************************** */
}
答案 1 :(得分:0)
您也可以使用匿名类来解决这个问题,如Configuring and Deploying Open Source with WebSphere Application Server Liberty Profile章5.2.4中所述。 (使用WLP 8.5.5.3和Wicket 6.8.0测试)
在WebApplication
课程中覆盖以下方法:
@Override
protected WebResponse newWebResponse(final WebRequest webRequest, final
HttpServletResponse httpServletResponse)
{
return new ServletWebResponse((ServletWebRequest) webRequest,
httpServletResponse)
{
@Override
public String encodeRedirectURL(final CharSequence relativeURL)
{
return new UrlRenderer(webRequest).renderFullUrl(Url.parse(relativeURL));
}
};
}
<强>更新强>
其他解决方案,而不是代码更改,是在webcontainer中设置以下属性(适用于8.5.5.3):
<webContainer com.ibm.ws.webcontainer.redirectwithpathinfo="true" />