Servletでデータを受信する

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

○ ファイル

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

ファイル名 FormPost.html

サンプルダウンロード

〇 作成の準備

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

○ プログラム

 次のようにHtmlを入力してください。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>入力フォーム</title>
  6. </head>
  7. <body>
  8.  <form action="postreceiveservlet" method="POST">
  9. 名前:<br>
(…そのほかの記述)

○ ファイル

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

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

サンプルダウンロード

〇 作成の準備

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

○ プログラム

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

  1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2.  //クライアントに出力する準備
  3.  resp.setContentType("text/html; charset=utf-8");
  4.  PrintWriter pw = resp.getWriter();
  5.  //送信されたデータを取得する
  6.  String name = req.getParameter("name");
  7.  String prefecture = req.getParameter("prefecture");
  8.  String[] hobby = req.getParameterValues("hobby");
  9.  //受信したデータをUTF-8に変換
  10.  name = new String(name.getBytes("8859_1"), "UTF-8");
  11.  prefecture = new String(prefecture.getBytes("8859_1"), "UTF-8");
  12.  if(hobby != null){
  13.   for(int i=0;i<hobby.length;i++){
  14.    hobby[i] = new String(hobby[i].getBytes("8859_1"), "UTF-8");
  15.   }
  16.  }
  17.  //クライアントにHtmlタグを書き出し
  18.  pw.println("<html>");
  19.  pw.println("<head>");
  20.  pw.println("<title>Servletで受信(GET)</title>");
  21.  pw.println("</head>");
  22.  pw.println("<body>");
  23.  pw.println(" 名前:" + name + "<br>");
  24.  pw.println(" 住所:" + prefecture + "<br>");
  25.  pw.println(" 趣味:");
  26.  //趣味のデータを加工
  27.  if(hobby != null){
  28.   for(int i=0; i<hobby.length; i++){
  29.    pw.println(hobby[i] + ",");
  30.   }
  31.  }
  32.  pw.println("</body>");
  33.  pw.println("</html>");
  34. }

〇 Webアプリケーション設定ファイルの編集

 web.xmlに次の内容を追加してください。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6.   version="3.1">
(そのほかの記述…)
  1.  <servlet>
  2.   <servlet-name>PostReceiveServlet</servlet-name>
  3.   <servlet-class>test.servlet.PostReceiveServlet</servlet-class>
  4.  </servlet>
  5.  <servlet-mapping>
  6.   <servlet-name>PostReceiveServlet</servlet-name>
  7.   <url-pattern>/postreceiveservlet</url-pattern>
  8.  </servlet-mapping>
  9. </web-app>

○ 実行結果

http://localhost:8080/WebApp/FormPost.html

実行結果
実行結果

○ 解説

 PostReceiveServletクラスでの処理は、前節のサンプルと同じ流れで記述しています。25~31行目では、日本語文字の文字化けの対策をしています。Tomcat上での文字コード変換の定型文のように扱うことができます。

前へ   次へ