デフォルトのサーブレット・マッピングには、/ 文字のみのマッピングがあります。WebLogic では、デフォルト・サーブレット・マッピングに対する javax.servlet.http.HttpServletRequest.getServletPath メソッドの呼び出しは空のストリングを返し、javax.servlet.http.HttpServletRequest.getPathInfo メソッドの呼び出しは null を返します。
WebSphere traditional では、デフォルト・サーブレット・マッピングに対する getServletPath の呼び出しは空のストリングを返しますが、getPathInfo メソッドの呼び出しは / 文字を返します。
同様に、Liberty にマイグレーションして Servlet 3.0 または 3.1 フィーチャー実装を使用している場合、デフォルト・サーブレット・マッピングに対する getServletPath の呼び出しは空のストリングを返しますが、getPathInfo メソッドの呼び出しは / 文字を返します。ただし、Servlet 4.0 フィーチャーを使用している場合、getServletPath の呼び出しは / 文字を返し、getPathInfo への呼び出しは null を返します。
例えば、次のコードについて考えてみます。
|
@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()); } } |
WebLogic で、このコードの出力は以下のようになります。
|
getServletPath: getPathInfo: null |
Servlet 3.0 または 3.1 を使用する WebSphere traditional および Liberty では、コードの出力は以下のようになります。
|
getServletPath: getPathInfo: / |
Servlet 4.0 を使用する Liberty では、コードの出力は以下のようになります。
|
getServletPath: / getPathInfo: null |
Servlet 3.0 または 3.1 実装を使用する WebSphere traditional または Liberty にマイグレーションする場合は、getPathInfo が null ではなく / 文字を返すことをコードで考慮するようにしてください。
Servlet 4.0 実装を使用する Liberty にマイグレーションする場合は、getServletPath が空のストリングではなく / 文字を返すことをコードで考慮するようにしてください。
追加情報については、以下を参照してください。