Servletでデータを受信する
この節では、Servletを使ってPOST送信を処理する方法を見てみましょう。
○ ファイル
入力フォームを作成します。プロジェクトに次のようなファイルを追加してください。
サンプルダウンロード
〇 作成の準備
Form.htmlファイルをコピーしてFormPost.htmlファイルを作成してください。
○ プログラム
次のようにHtmlを入力してください。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>入力フォーム</title>
- </head>
- <body>
- <form action="postreceiveservlet" method="POST">
- 名前:<br>
(…そのほかの記述)
○ ファイル
次に、受信するServletを追加しましょう。プロジェクトに次のようなServletを追加してください。
パッケージ名 |
test.servlet |
クラス名 |
PostReceiveServlet |
スーパークラス名 |
javax.servlet.http.HttpServlet |
サンプルダウンロード
〇 作成の準備
PostServletクラスをコピーして、PostReceiveServletを作成してください。
○ プログラム
次のようにプログラムを入力してください。
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //クライアントに出力する準備
- resp.setContentType("text/html; charset=utf-8");
- PrintWriter pw = resp.getWriter();
- //送信されたデータを取得する
- String name = req.getParameter("name");
- String prefecture = req.getParameter("prefecture");
- String[] hobby = req.getParameterValues("hobby");
- //受信したデータをUTF-8に変換
- name = new String(name.getBytes("8859_1"), "UTF-8");
- prefecture = new String(prefecture.getBytes("8859_1"), "UTF-8");
- if(hobby != null){
- for(int i=0;i<hobby.length;i++){
- hobby[i] = new String(hobby[i].getBytes("8859_1"), "UTF-8");
- }
- }
- //クライアントに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>");
- }
〇 Webアプリケーション設定ファイルの編集
web.xmlに次の内容を追加してください。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1">
(そのほかの記述…)
- <servlet>
- <servlet-name>PostReceiveServlet</servlet-name>
- <servlet-class>test.servlet.PostReceiveServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>PostReceiveServlet</servlet-name>
- <url-pattern>/postreceiveservlet</url-pattern>
- </servlet-mapping>
- </web-app>
○ 実行結果
http://localhost:8080/WebApp/FormPost.html
実行結果
○ 解説
PostReceiveServletクラスでの処理は、前節のサンプルと同じ流れで記述しています。25~31行目では、日本語文字の文字化けの対策をしています。Tomcat上での文字コード変換の定型文のように扱うことができます。
前へ 次へ