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");
}