1. ホーム
  2. java

[解決済み] コンテキストパスなしでリクエストURIを取得するには?

2022-05-25 12:53:22

質問

方法 request.getRequestURI() は、コンテキストパスを持つURIを返します。

例えば、あるアプリケーションのベース URL が http://localhost:8080/myapp/ (すなわち、コンテキストパスが myapp である)、そして私は request.getRequestURI() に対して http://localhost:8080/myapp/secure/users の場合は /myapp/secure/users .

この部分のみを取得する方法はありますか? /secure/users の部分だけ、つまりコンテキストパスなしのURIを取得する方法はありますか?

どのように解決するのですか?

フロントコントーラーサーブレットの内部で、次のようなプレフィックスパターンに マップされている場合 /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());
// ...