俺の雑記帳

My random memorandumです。(つまり、個人的な備忘録であり、その点ご容赦を。)

Javaサーブレットで、PHPの$_SERVER['XXXX']をしたい。(リクエストヘッダ情報の取得)

PHPの$_SERVER['XXXXX']の様にJavaでも値を取得したいが、値によって取り方が異なり、面倒。
また、ServletからJSPフォワードすると(通常はそう)、さらに値が取りにくくなる。(「フォワードしない」というのは、Servletを介さず直接JSPを呼ぶこと。)

Accessing the Standard CGI Variables
名前の通り基本ね。「値によって取り方が異なり、面倒」ってこと。phpinfo()代わりにそのまま使えそうなサンプルコード有。
JSP CGI - A JSP that prints the equivalent of CGI variables
上記のJSP版。こっちのほうが見やすい?

haeder、headerValues(リクエストヘッダ)
日本語。サンプルコードは下記のほうが良い。
Example - Get Request Header Values from Map
This example shows how to get request headers using the JSP expression language (EL) implicit object headerValues.
●(追記)サーブレットの様々なサンプル ― (3)リクエストのHTTPヘッダ情報の取得
サーブレットで、Enumulation型を使って取得。

HTTPヘッダ情報の種類
参考。

で、本題の、ServletからJSPフォワードした場合(通常はそう)のヘッダ情報取得について。
フォワードを意識しないと、
  <%= request.getRequestURI() %><br />
などとJSPに書いて、
  /WEB-INF/addtestbdatas.jsp
などと内部のパスが見えてしまう。
したがって、サーブレットで値を取得してJSPに渡せば可能に。つまり、
  req.setAttribute("RequestURI", req.getRequestURI());
サーブレットで書き、JSPでは、
  ${RequestURI}<br />
などと値を取得できる。
サーブレットで書かずに直接JSPで取得するには、以下。
HttpServletRequest#getRequestURL()とforward
ちょっとこの頁は分かりにくいが、例えば以下JSPコード例。
  <%= request.getAttribute("javax.servlet.forward.request_uri") %><br />