java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

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

投稿日:

最終更新日:2016年09月22日

アイキャッチ

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