getServletPath および getPathInfo メソッドでの振る舞いの変更を確認する

デフォルトのサーブレット・マッピングには、/ 文字のみのマッピングがあります。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 を返します。

例えば、次のコードについて考えてみます。

< span class="Code"> @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 で、このコードの出力は以下のようになります。

< span class="Code"> getServletパス:
getPathInfo: null

Servlet 3.0 または 3.1 を使用する WebSphere traditional および Liberty では、コードの出力は以下のようになります。

< span class="Code"> getServletパス:
getPathInfo: /

Servlet 4.0 を使用する Liberty では、コードの出力は以下のようになります。

< span class="Code"> getServletパス:/
getPathInfo: null

Servlet 3.0 または 3.1 実装を使用する WebSphere traditional または Liberty にマイグレーションする場合は、getPathInfonull ではなく / 文字を返すことをコードで考慮するようにしてください。

Servlet 4.0 実装を使用する Liberty にマイグレーションする場合は、getServletPath が空のストリングではなく / 文字を返すことをコードで考慮するようにしてください。

追加情報については、以下を参照してください。