2016-04-10 10 views
-1

私はTomcat 7でStruts 2.3を使用しています。要求をフィルタリングするときにTomcatはstruts2とどのように連携しますか?拡張機能で指定されたアクションへのStrutsマッピングが機能しない

Strutsのアクション名を拡張子付きのものに設定すると、動作しません。

<action name="login.html"> 
    <result>/WEB-INF/content/login.jsp</result> 
</action> 

は、Tomcatは、Strutsのリクエストを処理できないだろう、なぜ、login.htmlのような静的なファイルはありません。

URL login.htmlにアクセスすると、tomcatは404ページを返します。

アクション名をloginなどの拡張子なしに変更すると、tomcatは結果ページを返します。

web.xmlは、このようなものです:

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

私は一定のstruts.action.excludePatternを設定しませんでした。 私はtomcatとStrutsがこのurlマッピングを行う方法を理解できません。

マップされていないURLを処理するには、これをstruts.xmlの末尾に設定します。

<action name="**"> 
    <result>/index.html</result> 
</action> 

静的ファイルが存在する場合は、Tomcatは、応答として静的ファイルを使用するのではなくStrutsのは、このダミーワイルドカードアクションにリクエストをマッピングしてみましょう。

私は静的ファイルが存在するときにTomcatがStrutsフィルタを使用しないと仮定します。

しかし、URLの下に静的ファイルがない場合、Strutsが拡張子を持つURLを処理しない理由は私にはまだ混乱しています。

答えて

0

Strutsは、アクション拡張を持つURLを処理します。ただし、拡張はコンフィグレーション定数で定義されています

<constant name="struts.action.extension" value=",,action"/> 

独自のアクション拡張を追加できます。 のアクション名はの拡張子を使用せずに使用する必要があります。混乱することはありません。

デフォルトのアクションマッパーはURLを解析するために使用され、の後ろのすべてはの拡張子です。上記の設定で指定された拡張子と一致する場合、アクション名を抽出します。アクション名は、ではなく、の拡張子が付いています。

関連する問題