こんにちは。「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
日本語が文字化けせずに表示されました。