3

使用Websphere Application Server + Wicket 1.6 我安装的 URL 有一些问题。

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

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

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

可能相关的是,pies 本身不是已安装的页面。

我已经浏览了一些检票口问题\论坛,似乎大多数问题似乎要么已解决\冲突答案\与相对网址有关(在 1.5.x 中修复)。

有没有人遇到过这个问题并且仍然记得如何解决这个问题?

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

4

2 回答 2

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

    /* *********************************************** */
}
于 2013-07-29T08:37:09.887 回答
0

您还可以使用匿名类来解决这个问题,如使用 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));
            }
        };
    }

更新
其他解决方案,而不是代码更改,是在 web 容器中设置以下属性(适用于 8.5.5.3):

<webContainer com.ibm.ws.webcontainer.redirectwithpathinfo="true" />
于 2014-12-02T13:17:12.323 回答