2012-01-27 14 views
0

私は/ {servlet}/historyをサポートする必要があり、これをサポートする必要のある多くのサーブレットがあります。私はTomcat、FWIWを使用しています。サーブレットマッピングでこれらのURLパターンを組み合わせることはできますか?

次のように動作しますが、すべてのパターンを1つの行にまとめ、履歴パターンをサポートする必要のあるすべてのサーブレットにurl-patternを追加しないでください。私はいくつかのオプションを試して失敗しました。

<servlet> 
    <servlet-name>History</servlet-name> 
    <servlet-class>com.foo.HistoryServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>History</servlet-name> 
    <url-pattern>/aDifferentServlet/history/*</url-pattern> 
    <url-pattern>/someOtherOne/history/*</url-pattern> 
    <url-pattern>/anotherExample/history/*</url-pattern> 
</servlet-mapping> 
... 
<servlet> 
    <servlet-name>aDifferentServlet</servlet-name> 
    <servlet-class>com.foo.aDifferentServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>aDifferentServlet</servlet-name> 
    <url-pattern>/aDifferentServlet/*</url-pattern> 
</servlet-mapping> 
... 

ありがとうございます。

+0

"すべてのサーブレット"とはどういう意味ですか?単一のサーブレットを複数のパスにマッピングしています。 –

+0

申し訳ありませんが、私はサーブレット*をURLパターンで参照しています。これらのパスのそれぞれは、実際にはサーブレットを表します。 servletAのために、私はservletA、B、Cなどを通過したすべての履歴を取得するのをサポートする必要があります。 –

答えて

3

、あなたは/history/*のような共通のプレフィックス(フォルダ)パターンまたはサフィックス(拡張子)を指定する必要があるだろうパターンは*.historyです。両方のワイルドカードが一致するURLパターンを*/history/*のように使用することはできません。最善の方法は、履歴サーブレットを/history/*にマップし、それに応じてURLを例えば/history/aDifferentServletに変更することです(この部分は履歴サーブレットのrequest.getPathInfo()で利用可能です)。

URLを変更することが望ましくない場合は、Filterを作成するか、要求URIが*/history/*パターンと一致するたびに履歴サーブレットに転送するサーブレットを書き直す必要があります。

0

パターンは、アスタリスクで終了するか、1つで始まる(ファイル拡張子マッピングを示すために)ことができます。で

詳細:唯一のURLパターンを持つために

http://javapapers.com/servlet/what-is-servlet-mapping/#&slider1=1

The url-pattern specification: 

     *A string beginning with a ‘/’ character and ending with a ‘/*’ 
     suffix is used for path mapping. 
     *A string beginning with a ‘*.’ prefix is used as an extension mapping. 
     *A string containing only the ’/’ character indicates the "default" 
     servlet of the application. In this case the 
     servlet path is the request URI minus the context path and the path 
     info is null. 
     *All other strings are used for exact matches only. 
+0

申し訳ありませんが、私ははっきりしていたはずです。実際のサーブレット名はサーブレット*ではなく、実際の名前を隠すだけでした。/doStuff、/ aDifferentServlet、/ loginなどのように考えてください。 –

+0

どのように上記のように?マッピングを編集しました。あなたはいつも共通の部分の歴史の歴史ですか? – fmucar

+0

助けてくれてありがとうございますが、それはうまくいかないようです。 –

関連する問題