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

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

こんにちは。「Javaを復習する初心者」です。今回はサーブレットにPOSTメソッドでパラメータを送ることをやりました。

サーブレットにパラメータを送る方法は2つあり、今回はPOSTメソッドを使いました。POSTの場合、URLに直接記述はできません。なので、htmlファイルを作り、form要素を記述して、method属性をPOSTにします。ブラウザでそのformからサーブレットにデータを送信するという方法を使います。

送信する値

今回は次の値をサーブレットに送信することにします。

パラメータ名
nameFamily 山田
nameFirst 太郎
age 21

HTML側送信フォーム

上記のパラメータ入力欄を持つhtmlファイルを作成しました。入力はinput要素でtype属性をtextにすることで表示できます。パラメータ名はname属性に指定します。また、value属性で初期値を設定できます。以下、form要素です。

<form method="POST" action="HelloPostParameters">
Family Name<br /><input name="nameFamily" type="text" value="" /><br />
First Name <br /><input name="nameFirst" type="text" value="" /><br />
Age        <br /><input name="age" type="text" value="21" /><br />
<input type="submit" value="登録" />
</form>

上記ではinput属性の初期値はageのみ設定しています。氏名の部分は日本語をvalue属性に設定して送信すると文字化けをしてしまい、今回は原因がわかりませんでした。なので、空にしています。

form要素のmethod属性をPOST属性すると登録ボタンでデータがPOSTメソッドで送信されます。送信先はaction属性で指定できます。上記で記述している「HelloPostParameters」はサーブレット側で@WebServletアノテーションに設定する内容と一致させます。

サーブレット側

サーブレット側ではHttpServletRequest#getParameterを使います。これはGETメソッドで送信した場合と同じです。今回はURLにパラメータ名がないのですが、送信されたパラメータ名の一覧を次のように、getParameterNamesメソッドを使って出力し、確認することができます。

        Enumeration<String> names = request.getParameterNames();
        while (names.hasMoreElements()) {
            System.out.println(names.nextElement());
        }

送信されたパラメータ名と値を表示する部分は以下のように作りました。

        request.setCharacterEncoding("UTF-8");
        String nameFamily = request.getParameter("nameFamily");
        String nameFirst  = request.getParameter("nameFirst");
        String age        = request.getParameter("age");

        response.setContentType("text/html; charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.println(String.format("family name: %s<br>", nameFamily));
        writer.println(String.format("first name: %s<br>", nameFirst));
        writer.println(String.format("age: %s<br>", age));

以下は、山田、太郎、21と入力して送信ボタンを押した結果です。

family name: 山田
first name: 太郎
age: 21

日本語が文字化けせずに表示されました。