私の場合、web.xml
次のようなサーブレットの URL パターンがあります。
<url-pattern>/*/myservice</url-pattern>
blablabla/myservice
だから私はそれをas も使って呼びたいanyWord/myservice
。
しかし、うまくいきません。この URL を使用して呼び出す場合にのみ機能します: /*/myservice
(URL にアスタリスクを使用)。
そんなことはできません。サーブレット 2.5 仕様 (仕様の他のレベルでもそれほど違いはありません) によると、SRV.11.2 の章:
/
で終わる文字列が使用されます。/*
*.
は、拡張マッピングとして使用されます。/
は、アプリケーションの「デフォルト」サーブレットを示します。この場合、サーブレット パスはリクエスト URI からコンテキスト パスを引いたものであり、パス情報は null です。あなたのケースは 4 番目の箇条書きに該当するため、正確なマッピングが使用されます。
これを回避するには、/
(3 番目のケース) のマッピングを使用します。すべてのリクエストを特定のサーブレットにマップし、そのサーブレットがリクエストを何らかのハンドラー (他のサーブレットまたはカスタム クラス) に再ルーティングするようにします。
例えば:
<url-pattern>/</url-pattern>
<servlet-name>MyServlet</servlet-name>
次に、MyServlet
のコード内で、リクエストで受け取った URL を ( を使用してrequest.getPathInfo()
) 検査し、値を使用してリクエストを他のハンドラーに転送します。
URL パターンが /* のときにフィルターを使用でき、フィルター内で必要なリダイレクトを決定できます。
<filter>
<display-name>MyFilter</display-name>
<filter-name>MyFilter</filter-name>
<filter-class>com.MyfilterClass</filter-class>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
2 つの ULR マッピング セクションについてはどうでしょうか。
<servlet-mapping>
<servlet-name>ModifyMemberSVL</servlet-name>
<url-pattern>/ModifyMember</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ModifyMemberSVL</servlet-name>
<url-pattern>/Administration/Add_Member/ModifyMember</url-pattern>
</servlet-mapping>