3

Struts2アプリ(バージョン2.2.1.1)をSpring MVCに移行しようとしていますが、struts.xmlマッピングをSpringMVCサーブレットマッピングに変換するのに苦労しています。

私の最初の質問は、Struts2除外パターンがどのように正確に機能するかです。私のweb.xmlで、struts2のフィルター/マッピングを次のように設定しているとしましょう。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

私のstruts.xmlには、すでに機能している一連のアクションが定義されています。struts2のドキュメントに基づいて、私の理解から-

(Struts 2.1.7以降、リクエストURLと照合するときにフィルターが通過するパターンのコンマ区切りリストを提供できます。これは、構成オプションstruts.action.excludePatternを介して実行されます。 struts.xml)-

次のような除外パターンを追加した場合:

<constant name="struts.action.excludePattern" value="/*"/>

次に、フィルターをバイパスする必要があり、上記のアクションは解決されないはずです、正しいですか?

何らかの理由でこれは発生しておらず、私のすべてのアクションはまだ適切にルーティングされています。

何が得られますか?

4

3 に答える 3

6

struts値は、java.util.regex.Patternクラス標準を尊重する必要があります。 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

したがって、たとえば、すべての/ rest /*URLを避けたい場合は次のようになります。

/rest/[a-zA-Z_0-9]*

の場合、複数のパラメーターを使用してRESTWebサービスを処理する必要があります。

/rest/[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*

パターンをテストするには、次のコードを使用できます。

Pattern pattern = Pattern.compile("/rest/[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*/?[a-zA-Z_0-9]*");
String uri = "/rest/users/1/1";
System.out.println(pattern.matcher(uri).matches());
于 2013-11-13T11:04:39.250 に答える
5

除外パターンは正規表現です。

すべてを除外したい場合は、.*

http://struts.apache.org/2.x/docs/webxml.html#web.xml-SimpleExample

S2フィルターを取り外せばいいので、なぜそれが必要なのか正確にはわかりません。

于 2012-11-21T19:30:15.397 に答える
0

私は前の答えに追加を得ました。ここに記載されているように除外を定義できます。

しかし、ドキュメントに誤りがあるようです。ドットをエスケープする必要がある場合'。' 単一の円記号のみを使用する必要があります。

<struts>
<constant name="struts.action.excludePattern" value=".*unfiltered.*,.*\.nofilter"/>
...
</struts>
于 2013-05-22T11:29:10.193 に答える