2013-05-28 41 views
3

使用Websphere Application Server + Wicket 1.6 我在装载URL时遇到了一些问题。Wicket + WAS:调用url会导致重定向到一个错误的URL,导致404

当我调用类似于一个网址:localhost:9080/danesCooking/pies/meat我看到在Chrome网络选项卡中的以下内容:

localhost:9080/danesCooking/pies/meat status code 302 
localhost:9080/danesCooking/meat?2 status code 404 

所以似乎/馅饼/部分丢失。当我将我的应用程序部署到Tomcat\JBoss\ ...时,不会发生此行为。

可能相关,馅饼本身不是一个挂载页面。

我已经浏览了一些检票问题\论坛,似乎大多数问题似乎是解决\冲突的答案\与相关网址(固定在1.5.x)。

有没有人遇到过这个问题,还记得如何解决这个问题?

使用WAS * 版本:7和8.5 *自由。

回答

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); 
     } 
    } 

    /* *********************************************** */ 
} 
0

您也可以解决,使用匿名类作为Configuring and Deploying Open Source with WebSphere Application Server Liberty Profile章5.2.4节。 (测试用WLP 8.5.5.3和检票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)); 
      } 
     }; 
    } 

UPDATE
其他的解决方案,而不是代码的变化,是设置遵循webcontainer中的财产(在8.5.5.3中有效):

<webContainer com.ibm.ws.webcontainer.redirectwithpathinfo="true" />