こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

サーブレットにGETでパラメータを送る

こんにちは。「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メソッドの一例です。

        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を使ってますが、特に設定はしていません。