プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

Java リクエストパラメーターとURLエンコード

■JavaのリクエストパラメーターとURLエンコードについて解説する

 
 

リクエストパラメーターとは?

フォーム画面で入力したデータは【「部品名」=「値」】の形式で送信される
この【「部品名」=「値」】がリクエストパラメーターのこと
 
例えば下記のURLにGETメソッドで送信した場合、URLの最後の「?」より後の【name=abc】の部分
http://localhost:8080/sendParam/result.jsp?name=abc
 
 


URLエンコードとは?

リクエストパラメーターはブラウザが使用している文字コードを元に「%(パーセント)と半角英数字」に変換して送信される
その変換処理のこと
 
例えば、「あいう」はURLエンコードによって「%E3%81%82%E3%81%84%E3%81%86」に変換される
 
 


URLエンコードのルール

「半角英数」や特定の記号(「.」・「*」・「-」・「_」等)以外はブラウザの文字コードを使って変換する
 
 


実際にJSPでフォーム画面と送信先画面を作成して確認してみる

※リクエストパラメーターが分かりやすいようにGETリクエストで送信する(eclipseで実行)
 
【フォーム画面(送信側):send.jsp】


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>送信ページ</title>
</head>
<body>
	<form action="/sendParam/result.jsp" method="GET">
		//「name="name"」の「"name"」が部品名
		<p><input type="text" name="name"></p>
		<p><input type="submit" value="送信"></p>
	</form>
</body>
</html>

 
【送信先画面(受信側):result.jsp】


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>結果</title>
</head>
<body>

</body>
</html>

 
【フォルダ構成】

 
 
【send.jspを実行 ⇒ リクエストパラメーターが半角英字なのでエンコードされない

リクエストパラメーターは【name=abc】

 
 
【send.jspを実行 ⇒ リクエストパラメーターがひらがななのでエンコードされる

リクエストパラメーターは【name=%E3%81%82%E3%81%84%E3%81%86】

 
 


【予備知識】サーブレットでリクエストパラメーターを取得する際の注意点

URLエンコードによって変換されたリクエストパラメーターを元に戻さなければ文字化けしてしまう
 

【解決策】

request.setCharacterEncoding(“<送信元の文字コード>“)でデコードする
但し、リクエストパラメーターを取得する前に設定すること
尚、リクエストパラメーターはrequest.getParameter()メソッドで取得できる
 
下記はGETメソッドで送信されたリクエストパラメーターをサーブレットクラスで取得する例


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//文字コードを「UTF-8」でデコード
	request.setCharacterEncoding("UTF-8");

	//リクエストパラメーターを取得
	String name = request.getParameter("name");
}