フォームからサーブレットにPOSTメソッドでデータを送信する - Java

フォームからPOSTメソッドを使ってサーブレットにデータを送信します。

HTMLフォームのコード (signuppost.html)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
    <title>Form</title>
  </head>
  <body>
    <H1>Sign Up Form (POST版)</H1>
    <br><hr><br>
    <FORM method="POST" action="PostHttpServlet">
      FirstName : <INPUT type="text" name="firstname">
      LastName : <INPUT type="text" name="lastname"><br><br>
      Mail Address : <INPUT type="text" name="mailaddress"><br><br>
      Gender  :
      <INPUT type="radio" name="gender" value="female" checked>female
      <INPUT type="radio" name="gender" value="male">male<BR><BR>
      Birthday :
      <SELECT name="birthday">
        <OPTION value="" selected>----</OPTION>
        <OPTION value="Jan">Jan</OPTION>
        <OPTION value="Feb">Feb</OPTION>
        <OPTION value="Mar">Mar</OPTION>
        <OPTION value="Apr">Apr</OPTION>
        <OPTION value="May">May</OPTION>
        <OPTION value="Jun">Jun</OPTION>
        <OPTION value="Jly">Jly</OPTION>
        <OPTION value="Aug">Aug</OPTION>
        <OPTION value="Sep">Sep</OPTION>
        <OPTION value="Oct">Oct</OPTION>
        <OPTION value="Nov">Nov</OPTION>
        <OPTION value="Dec">Dec</OPTION>
      </SELECT><BR><BR>
      Interests :<BR>
      <INPUT type="checkbox" name="interests" value="music" >Music<BR>
      <INPUT type="checkbox" name="interests" value="business">Business<BR>
      <INPUT type="checkbox" name="interests" value="health">Health<BR>
      <INPUT type="checkbox" name="interests" value="travel">Travel<BR><BR>
      <INPUT type="submit" value="SEND">
      <INPUT type="reset" value="RESET">
    </FORM>
  </body>
</html>

解説

POSTメソッドで情報を送信するフォームを用意します。
フォーム内にテキストボックスやコンボボックス、サブミットボタンを配置します。
 <FORM method="POST" action="PostHttpServlet">
   ...
 </FORM>

サーブレットのコード (PostHttpServlet.java)

package webApplication4;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PostHttpServlet extends HttpServlet {

  public void doPost(HttpServletRequest req, HttpServletResponse res)
          throws ServletException, IOException {
    res.setContentType("text/html; charset=ISO-8859-1");
    PrintWriter out = res.getWriter();
    //クライアントに送るHTML
    out.println("<HTML>");
    out.println("<HEAD>");
    out.println("<TITLE>SignUp Data</TITLE>");
    out.println("</HEAD>");
    out.println("<BODY>");
    out.println("<H1>SignUp Dagta</H1>");
    out.println("<BR><HR><BR>");
    out.println("<UL>");

    //Form情報を取得
    out.println("  <LI>FirstName : " + req.getParameter("firstname"));
    out.println("  <LI>LastName : " + req.getParameter("lastname"));
    out.println("  <LI>Mail Address : " + req.getParameter("mailaddress"));
    out.println("  <LI>Gender : " + req.getParameter("gender"));
    out.println("  <LI>Birthday : " + req.getParameter("birthday"));
    //複数選択のForm情報を取得する
    String interests[] = req.getParameterValues("interests");
    out.println("  <LI>Interests : <BR>");
    if (interests != null) {
      for (int i = 0; i < interests.length; i++) {
        out.println(interests[i] + "<BR>");
      }
    }

    out.println("<BR>");
    out.println(req.getMethod() + "<BR>");
    out.println(req.getRequestURI() + "<BR>");
    out.println(req.getRequestURL() + "<BR>");
    out.println(req.getServletPath() + "<BR>");

    out.println("</UL>");
    out.println("</BODY>");
    out.println("</HTML>");
    out.close();
  }
}

解説

doPostメソッドを実装します。
  public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

ContentTypeとキャラクターセットを設定します。
  res.setContentType("text/html; charset=ISO-8859-1");

HttpServletResponse.getWriter()メソッドを呼び出し、PrintWriterを取得します。
  PrintWriter out = res.getWriter();

PrintWriterクラスを用いてサーブレットが返すHTMLを出力します。サーブレットに送信されたパラメータの値はHttpServletResponse.getParameter()メソッドを用いて取得します。
 out.println("<HTML>");
 out.println("<HEAD>");
 out.println("<TITLE>SignUp Data</TITLE>");
 out.println("</HEAD>");
 out.println("<BODY>");
 out.println("<H1>SignUp Dagta</H1>");
 out.println("<BR><HR><BR>");
 out.println("<UL>");
 
 out.println("  <LI>FirstName : " + req.getParameter("firstname"));
 out.println("  <LI>LastName : " + req.getParameter("lastname"));
 out.println("  <LI>Mail Address : " + req.getParameter("mailaddress"));
 out.println("  <LI>Gender : " + req.getParameter("gender"));
 out.println("  <LI>Birthday : " + req.getParameter("birthday"));

HttpServletResponse.getParameterValues()メソッドを呼び出し、チェックボックスグループでチェックされた要素を取得します。
  String interests[] = req.getParameterValues("interests");

 out.println("  <LI>Interests : <BR>");
 if (interests != null) {
   for (int i = 0; i < interests.length; i++) {
     out.println(interests[i] + "<BR>");
   }
 }
interests[]配列に格納されている文字(チェックボックスでチェックされた要素)を表示します。

HTMLフォームのメソッドを取得して表示します。(今回の例の場合は"POST"が戻ります。)
  out.println(req.getMethod() + "<BR>");

サーブレットのリクエストURIを取得して表示します。
  out.println(req.getRequestURI() + "<BR>");

サーブレットのリクエストURLを取得して表示します。
  out.println(req.getRequestURL() + "<BR>");

サーブレットのパスを取得して表示します。
  out.println(req.getServletPath() + "<BR>");

PrintWriterを閉じます。
  out.close();

実行結果

起動後のHTMLフォーム画面


HTMLフォームに情報を入力し、POSTボタンをクリックします。


POSTボタンクリック後のサーブレットの出力結果です。


著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2023-12-16
作成日: 2011-02-09
iPentec all rights reserverd.