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\アプリケーションを...にデプロイすると、この動作は発生しません。

関連する可能性がありますが、パイ自体はマウントされたページではありません。

私はすでにウィケットの問題\フォーラムのいくつかを調べましたが、ほとんどの問題は解決済み\競合する回答\相対URLに関係しているようです(1.5.x で修正)。

誰かがこの問題を経験し、これを解決する方法を覚えていますか?

使用されたWAS *バージョン: 7 および 8.5 * liberty。

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

更新
コードを変更する代わりに、他の解決策は、webcontainer で次のプロパティを設定することです (8.5.5.3 で機能します)。

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