
forward 前のリクエストURI取得
HttpServletRequest.getAttribute() から取得できる。
HttpServletRequest request = //... String uri = (String) request.getAttribute("javax.servlet.forward.request_uri");
なお、forward されていない場合は null が返るため、概ね以下のようになる。
String uri = (String) request.getAttribute("javax.servlet.forward.request_uri");
uri = Objects.isNull(uri) ? request.getRequestURI() : uri;
Forwarded Request Parameters
サーブレット仕様は以下。

RequestDispatcher.forward() により、他のサーブレットから呼び出された後で、元のリクエストパスにアクセスできます(getNamedDispatcher() メソッドを使用して取得したサーブレットを除く)。
jakarta.servlet.forward.mapping jakarta.servlet.forward.request_uri jakarta.servlet.forward.context_path jakarta.servlet.forward.servlet_path jakarta.servlet.forward.path_info jakarta.servlet.forward.query_string
これらの属性値は、最初のサーブレットに渡された HttpServletRequest の メソッド getRequestURI, getContextPath, getServletPath,
getPathInfo, getQueryString と等しくなる必要がる。
これらの属性には、転送されたサーブレットからリクエストオブジェクトの getAttribute() を介してアクセス可能できる。
複数のフォワードとそれに続くインクルードが呼び出される状況下でも、常に元のリクエストの情報を反映しなければならない。
転送されたサーブレットが getNamedDispatcher() メソッドによって取得された場合、これらの属性は設定されてはならない。
インクルードされた場合も同様に HttpServletRequest.getAttribute() で以下を指定することで、インクルード前の元のリクエストの内容にアクセスできる。
jakarta.servlet.include.mapping jakarta.servlet.include.request_uri jakarta.servlet.include.context_path jakarta.servlet.include.servlet_path jakarta.servlet.include.path_info jakarta.servlet.include.query_string
パスの取得
HttpServletRequest メソッド |
Forwarded Request Parameters | 説明 |
|---|---|---|
getRequestURI() |
jakarta.servlet.forward.request_uri |
URL のプロトコル名からクエリ文字列まで |
getContextPath() |
jakarta.servlet.forward.context_path |
リクエスト URI のコンテキスト |
getServletPath() |
jakarta.servlet.forward.servlet_path |
サーブレットへのパス (CGI 変数 SCRIPT_NAME) |
getPathInfo() |
jakarta.servlet.forward.path_info |
URL に関連付けられた追加のパス情報(CGI 変数 PATH_INFO) |
getQueryString() |
jakarta.servlet.forward.query_string |
URL のパスの後に含まれるクエリ文字列(CGI 変数 QUERY_STRING) |
具体例で見た場合、以下となる。
https://server/contextroot/faces/foo/bar.xhtml?key=val
getRequestURI():/contextroot/faces/foo/bar.xhtmlgetContextPath():/contextrootgetServletPath():/faces(url-patternに一致した部分)getPathInfo():/foo/bar.xhtmlgetQueryString():key=val