方法リクエスト.getRequestURI()コンテキスト パスを含む URI を返します。
たとえば、アプリケーションのベースURLがhttp://localhost:8080/myapp/
(つまりコンテキストパスが)マイアプリ)を呼び出して、 を呼び出すとrequest.getRequestURI()
、http://localhost:8080/myapp/secure/users
が返されます/myapp/secure/users
。
/secure/users
この部分、つまりコンテキスト パスのない URI のみを取得する方法はありますか?
ベストアンサー1
のようなプレフィックスパターンにマッピングされたフロントコントローラサーブレット内にいる場合は、次の/foo/*
ように使用できます。HttpServletRequest#getPathInfo()
。
String pathInfo = request.getPathInfo();
// ...
例のサーブレットが にマップされていると仮定すると、これは、典型的なフロント コントローラ サーブレット内で唯一関心のある情報である を/secure/*
返します。/users
ただし、サーブレットが などのサフィックス パターンにマップされている場合*.foo
(ただし、URL の例はこれに該当しません)、または実際にフィルター内にある場合 (呼び出されるサーブレットがまだ決定されていないため、getPathInfo()
を返す可能性がある場合null
)、通常の方法を使用して、コンテキスト パスの長さに基づいてリクエスト URI を自分でサブストリング化するのが最善策ですString
。
HttpServletRequest request = (HttpServletRequest) req;
String path = request.getRequestURI().substring(request.getContextPath().length());
// ...