コンテキストパスなしでリクエストURIを取得するにはどうすればいいですか? 質問する

コンテキストパスなしでリクエストURIを取得するにはどうすればいいですか? 質問する

方法リクエスト.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());
// ...

おすすめ記事