HTTPリクエストのヘッダ・ボディ部分を読込む
こんばんちょ
シルバー取得したことを会社の掲示板で報告したら、
会社の先輩達が沢山おめでとうを言ってくれました。
涙ちょちょぎれ気味のおしりんです。
今日は少し早く帰宅することが出来たのでブログを更新。
「HTTPリクエストのボディ部分を読込→出力」する方法
「HTTPリクエストのヘッダ部分を読込→出力」する方法
について、まとめたいと思うよ。
まとめるって言っても、
今回もソースコードのっけるだけなんだけど…
ボディの情報を取得するための方法って
検索すると色々でてくる。
そんな色々ある中で、あたしが一番
「これ分かりやす!」と思ったソースがこれ。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuilder sb = new StringBuilder(); BufferedReader reader = request.getReader(); try { String line; while ((line = reader.readLine()) != null) { sb.append(line).append('\n'); } } finally { reader.close(); } System.out.println(sb.toString()); }
(引用元:http://stackoverflow.com/questions/1548782/retrieving-json-object-literal-from-httpservletrequest)
おお~わかりやすっ
ちなみに、ボディの情報を読み込む際、
・文字データとして取得したい場合
HttpServletRequestクラスのgetReader()
・バイナリデータを読み込むためのストリームを取得したい場合
HttpServletRequestクラスのgetInputStream()
と、用途に応じてメソッドが異なるので注意が必要。
ちなみに、両方いっぺんに使おうとすると、
java.lang.IllegalStateExceptionが出てしまうんだって。
では次にヘッダ部分を取得する方法。
こちらはHttpServletRequestのgetHeader()を使う。
その名の通りって感じのメソッド名。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ StringBuffer sb = new StringBuffer(); Enumeration headernames = request.getHeaderNames(); while (headernames.hasMoreElements()){ String name = (String)headernames.nextElement(); Enumeration headervals = request.getHeaders(name); while (headervals.hasMoreElements()){ String val = (String)headervals.nextElement(); sb.append(name); sb.append(":"); sb.append(val); sb.append("\r\n"); } } System.out.println(new String(sb)); }
(引用元:http://www.javadrive.jp/servlet/request/index9.html)
まず、getHeaderNamesメソッドを使って、
リクエストに含まれる全てのヘッダー名を所得した後で、
各ヘッダー名に対応する値を取得して表示してるんだって。
いつかこういうロジックを一人で考えられるようになりたい。
そんな月曜日でした。おやスヤァ