Servletでデータを受信する

この節では、Servletを使ってPOST送信を処理する方法を見てみましょう。

○ ファイル

入力フォームを作成します。プロジェクトに次のようなファイルを追加してください。

ファイル名 FormPost.html

サンプルダウンロード

○ 作成の準備

Form.htmlファイルをコピーしてFormPost.htmlファイルを作成してください。

○ プログラム

次のようにHTMLを修正してください。

FormPost.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>入力フォーム(POST送信)</title>
  6. </head>
  7. <body>
  8.     <form action="postreceiveservlet" method="POST">
  9.         名前:<br>
  10.         <input type="text" name="name"><br>
  11.         住所:<br>
  12.         <select name="prefecture">
  13.             <option>愛知県</option>
  14.             <option>岐阜県</option>
  15.             <option>三重県</option>
  16.         </select><br>
  17.         趣味:<br>
  18.         <input type="checkbox" name="hobby" value="料理">料理
  19.         <input type="checkbox" name="hobby" value="ドライブ">ドライブ
  20.         <br>
  21.         <input type="submit" value="送信">
  22.         <input type="reset" value="リセット">
  23.     </form>    
  24. </body>
  25. </html>

○ ファイル

次に、受信するServletを追加しましょう。プロジェクトに次のようなServletを追加してください。

パッケージ名 test.servlet
クラス名 PostReceiveServlet
スーパークラス名 javax.servlet.http.HttpServlet

サンプルダウンロード

○ 作成の準備

PostServletクラスをコピーして、PostReceiveServletを作成してください。

○ プログラム

次のようにプログラムを入力してください。

PostReceiveServlet.java

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. @WebServlet("/postreceiveservlet")
  10. public class PostReceiveServlet extends HttpServlet {
  11.     @Override
  12.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13.         //受信するデータの文字コードを設定する
  14.         req.setCharacterEncoding("utf-8");
  15.         
  16.         //送信されたデータを取得する
  17.         String name = req.getParameter("name");
  18.         String prefecture = req.getParameter("prefecture");
  19.         String[] hobby = req.getParameterValues("hobby");
  20.         //クライアントへの出力準備をする
  21.         resp.setContentType("text/html;charset=utf-8");
  22.         PrintWriter pw = resp.getWriter();
  23.         
  24.         //クライアントにHTMLタグを書き出し
  25.         pw.println("<html>");
  26.         pw.println("<head>");
  27.         pw.println("<title>Servletで受信(GET)</title>");
  28.         pw.println("</head>");
  29.         pw.println("<body>");
  30.         pw.println(" 名前:" + name + "<br>");
  31.         pw.println(" 住所:" + prefecture + "<br>");
  32.         pw.println(" 趣味:");
  33.         //趣味のデータを加工
  34.         if(hobby != null){
  35.             for(int i=0; i<hobby.length; i++){
  36.                 pw.println(hobby[i] + ",");
  37.             }
  38.         }
  39.         pw.println("</body>");
  40.         pw.println("</html>");
  41.     }
  42. }

○ 実行結果

次の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で読み込まれるようになります。

前へ   次へ