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

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

HTMLフォームのコード (signupget.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</H1>
    <br><hr><br>
    <FORM method="GET" action="GetHttpServlet">
      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>

解説

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

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

package webApplication3;

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

public class GetHttpServlet extends HttpServlet {
  /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
   * @param request servlet request
   * @param response servlet response
   */
  public void doGet(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("</UL>");
    out.println("</BODY>");
    out.println("</HTML>");
    out.close();
  }
}

解説

doGetメソッドを実装します。
  public void doGet(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を出力します。
  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");

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

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

コード (Web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>GetHttpServlet</servlet-name>
    <servlet-class>webApplication3.GetHttpServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GetHttpServlet</servlet-name>
    <url-pattern>/GetHttpServlet</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

実行結果

HTMLフォーム画面


SENDボタン押下後の画面(サーブレット)


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