Servletでデータを受信する
この節では、Servletを使ってPOST送信を処理する方法を見てみましょう。
○ ファイル
入力フォームを作成します。プロジェクトに次のようなファイルを追加してください。
ファイル名 | FormPost.html |
---|
○ 作成の準備
Form.htmlファイルをコピーしてFormPost.htmlファイルを作成してください。
○ プログラム
次のようにHTMLを修正してください。
FormPost.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>入力フォーム(POST送信)</title>
- </head>
- <body>
- <form action="postreceiveservlet" method="POST">
- 名前:<br>
- <input type="text" name="name"><br>
- 住所:<br>
- <select name="prefecture">
- <option>愛知県</option>
- <option>岐阜県</option>
- <option>三重県</option>
- </select><br>
- 趣味:<br>
- <input type="checkbox" name="hobby" value="料理">料理
- <input type="checkbox" name="hobby" value="ドライブ">ドライブ
- <br>
- <input type="submit" value="送信">
- <input type="reset" value="リセット">
- </form>
- </body>
- </html>
○ ファイル
次に、受信するServletを追加しましょう。プロジェクトに次のようなServletを追加してください。
パッケージ名 | test.servlet |
---|---|
クラス名 | PostReceiveServlet |
スーパークラス名 | javax.servlet.http.HttpServlet |
○ 作成の準備
PostServletクラスをコピーして、PostReceiveServletを作成してください。
○ プログラム
次のようにプログラムを入力してください。
PostReceiveServlet.java
- package test.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet("/postreceiveservlet")
- public class PostReceiveServlet extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //受信するデータの文字コードを設定する
- req.setCharacterEncoding("utf-8");
- //送信されたデータを取得する
- String name = req.getParameter("name");
- String prefecture = req.getParameter("prefecture");
- String[] hobby = req.getParameterValues("hobby");
- //クライアントへの出力準備をする
- resp.setContentType("text/html;charset=utf-8");
- PrintWriter pw = resp.getWriter();
- //クライアントにHTMLタグを書き出し
- pw.println("<html>");
- pw.println("<head>");
- pw.println("<title>Servletで受信(GET)</title>");
- pw.println("</head>");
- pw.println("<body>");
- pw.println(" 名前:" + name + "<br>");
- pw.println(" 住所:" + prefecture + "<br>");
- pw.println(" 趣味:");
- //趣味のデータを加工
- if(hobby != null){
- for(int i=0; i<hobby.length; i++){
- pw.println(hobby[i] + ",");
- }
- }
- pw.println("</body>");
- pw.println("</html>");
- }
- }
○ 実行結果
次のURLを入力して実行してみましょう。
http://localhost:8080/WebApp/FormPost.html
○ 解説
FormPost.htmlファイルの8行目のaction属性で「postreceiveservlet」と指定しているので、そのURLでマッピングされたPostReceiveServletクラスが呼び出されます。method属性が「POST」なので、PostReceiveServletクラスのdoPostメソッドが呼び出されます。
PostReceiveServlet.javaファイルの18行目では、Webブラウザーから送信された文字コードを指定します。これを指定しないとデフォルトの文字コード「ISO-8859-1」として読み込むので、日本語が文字化けします。HttpServletRequestオブジェクトのsetCharacterEncodingメソッドの引数に「utf-8」を指定しているので、getParameterメソッドで読み込んだ日本語データはUTF-8で読み込まれるようになります。