デフォルトのサーブレット・マッピングには、/ 文字のみのマッピングがあります。競合のアプリケーション・サーバーでは、
デフォルトのサーブレット・マッピングの javax.servlet.http.HttpServletRequest.getServletPath メソッドへの呼び出しは
リクエスト URI からコンテキスト・パスを引いた値を返し、
javax.servlet.http.HttpServletRequest.getPathInfo メソッドへの呼び出しはヌルを返します。
WebSphere traditional では、デフォルトのサーブレット・マッピングの getServletPath への呼び出しは空ストリングを返し、
getPathInfo メソッドへの呼び出しは、/ 文字を返します。
同様に、Liberty にマイグレーション時に Servlet 3.0 または 3.1 のフィーチャー実装環境を使用している場合は、デフォルトのサーブレット・マッピングの
getServletPath への呼び出しは空ストリングを返し、getPathInfo メソッドへの呼び出しは / 文字を返します。
例えば、次のコードについて考えてみます。
|
@WebServlet("/") public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { System.out.println("getServletPath: " + req.getServletPath()); System.out.println("getPathInfo: " + req.getPathInfo()); } } |
競合のアプリケーション・サーバーでは、このコードは以下の出力となります。
|
getServletPath: /some/path/to/servlet getPathInfo: null |
ただし、WebSphere traditional と Servlet 3.0 または 3.1 のある Liberty では、コーディングは以下のような出力になります。
|
getServletPath: getPathInfo: / |
WebSphere Liberty にマイグレーションしていて、Servlet 3.0 または 3.1 実装環境を使用している場合は、<webContainer servletPathForDefaultMapping="true"/>
エレメントを server.xml 構成ファイルに追加します。このエレメントを追加すると、getServletPath メソッドおよび
getPathInfo メソッドは競合のアプリケーション・サーバーでの振る舞いと同様の振る舞いをします。
Servlet 4.0 実装環境を使用している場合は、変更は不要です。Servlet 4.0 実装環境の getServletPath および
getPathInfo は、競合のアプリケーション・サーバーと同様の振る舞いとなります。
WebSphere traditional にマイグレーションしている場合は、WebContainer com.ibm.ws.webcontainer.EnableDefaultServletRequestPathElements プロパティーを true に設定します。
このプロパティーを設定すると、getServletPath メソッドおよび getPathInfo メソッド
は競合のアプリケーション・サーバーでの振る舞いと同様の振る舞いをします。
追加情報については、以下を参照してください。