こんにちは。「Javaを復習する初心者」です。
今回はサーブレットにGETメソッドでパラメータを送る方法を確認しました。
サーブレットにパラメータを送る方法は2つあります。HTTPリクエストメソッドのGETメソッドとPOSTメソッドです。これはHTMLのform要素のmethod属性に設定する値です。GETメソッドの方はURLを直接入力することができます。今回はGETメソッドでサーブレットにパラメータを送ることを試しました。
パラメータを決める
GETメソッドでパラメータを送る場合、はURLの最後に「?」を付けて、[パラメータ名]=[値]の書式の文字列を追加します。複数ある場合は「&」で区切ります。今回は以下のパラメータを送ることにしました。
パラメータ名 | 値 |
---|---|
name | tom |
age | 23 |
値にこだわりはありませんが、最初なので半角英数字にしました。上記のパラメータを送る場合、URLの最後に「?name=tom&age=23」を追加します。
サーブレット側で取得
以下、サーブレットのdoGetメソッドの第一引数HttpServletRequestがリクエストパラメータの情報を持っています。getParameterメソッドを使うことでパラメータの値を取得することができます。以下、サーブレットのgoGetメソッドの一例です。
goGetメソッドの一例
String name = request.getParameter("name");
String age = request.getParameter("age");
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println(String.format("name: %s<br>", name));
writer.println(String.format("age: %s<br>", age));
getParameterメソッドは指定したパラメータがない場合、nullを返却するようです。パラメータなしでサーブレットを呼び出した結果、以下のように出力されました。
結果
name: null
age: null
URLの末尾に「?name=tom&age=23」を追加してサーブレットを呼び出した場合、以下のように出力されました。
結果
name: tom
age: 23
パラメータの値を取得できています。
パラメータの値に日本語
さて、nameを「太郎」にしようと思います。そのままURLに日本語を書くとサーブレット側で文字化けしてしまいます。なので「太郎」をapplication/x-www-form-urlencoded形式で指定します。URLEncoderクラスにencodeメソッドがあり、それを使って、UTF-8で太郎を変換すると「%E5%A4%AA%E9%83%8E」となりました。なのでサーブレットを呼び出すときに、この文字列を使います。
以下は、URLの末尾に「?name=%E5%A4%AA%E9%83%8E&age=23」を追加してサーブレットを呼び出した結果です。
結果
name: 太郎
age: 23
サーブレット側は特に何も変更してませんが、「太郎」が出力されました。Tomcat8を使ってますが、特に設定はしていません。