おしりんブログ

新人PGおしりんの色々まとめるよブログ

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メソッドを使って、
リクエストに含まれる全てのヘッダー名を所得した後で、
各ヘッダー名に対応する値を取得して表示してるんだって。


いつかこういうロジックを一人で考えられるようになりたい。
そんな月曜日でした。おやスヤァ