2

struts2では、末尾にスラッシュがあるかどうかに関係なく、URLリダイレクトが同じように機能することを確認する必要があるアプリを作成しています。

たとえばexample.com/app、ユーザーがを入力した場合と同じように動作する必要がありますexample.com/app/。現在、マッピングをstruts.xmlそのように変更しました-

<struts>
    <package name="default" namespace="/" extends="secure">
        <interceptors> ... <interceptors>

        <action name="app">
            <result type="redirectAction">/app/</result>
        </action>
    </package>
</struts>

<struts>
    <package name="app" namespace="/app" extends="secure">
        <interceptors> ... <interceptors>

        <action name="" class="com.example.action.app.LoginAction" method="display">
        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>
        <interceptor-ref name="basic" />

        <result type="redirectAction">home</result>
        <result name="display">/jsp/base/content/login/loginForm.jsp</result>
    </action> 
</package>
</struts>

しかし、これに行くとURLexample.com/appに表示されるので、これはハックのようです。example.com//app/.html

助けていただければ幸いです。

4

1 に答える 1

0

回答は、回答の下のコメントから導き出されました。

クォータニオン:

個人的には、末尾のスラッシュなしですべてのURLを書き込みます...次に、アプリケーションの外部でURLを適宜書き換えるために、iptablesが末尾のスラッシュがあるかどうかを判断し、その場合は常にそれを削除します。

モハナラオSV:

上で提案したように、テールスラッシュなしで続きます。そして、StrutsPrepareAndExecuteFilterをオーバーライドします。フィルタージョブの1つは、名前空間とアクション名を識別し、それぞれのアクションを呼び出す必要があるURLからのものです。したがって、ここでURLから末尾のスラッシュを削除します。

クォータニオン:

名前空間「/」には、appというアクションがあります。CONTEXT_ROOT / app(struts2が期待するもの)を呼び出すのはこれですべてです。URLの末尾に「/」が表示されることはないので、URLを解析するメソッドを見つけたいと思います。 struts2がマッピングを解決する前。あなたが説明したことは、それが存在する場合、末尾の「/」を削除するために何かを必要とするだけです。以前に使用したことがあるのでiptablesを探すか、他のURLリライターを使用します... MahanaはそれをすべてWebアプリの一部として保持し、フィルターを使用します。方法は異なりますが、効果は同じです。

于 2012-04-03T17:51:53.860 に答える