JSP/Servlet | サーブレットとJSP/HTML | HTMLからサーブレットへフォーム送信する

ページ間のデータ交換の基本といえば、やはりフォームである。HTMLやJSPページにフォームを用意し、そこからサーブレットへ送る方法は、サーブレット利用の基本といえる。

サーブレットに送信されたフォームの内容を取得するには、doGet/doPostの引数に用意されているHttpServletRequestインスタンスを使用する。その中にあるgetParameterメソッドで、渡された値を取り出せる。

String 変数 = request.getParameter(名前);

たとえば<input type="text" name="txt1">のような入力要素なら、getParameter("txt1")と指定して値を取得できる。取得できる値はすべてStringになるため、数値などは必要に応じてそこから変換して処理すればよい。

このgetParameterというメソッドは、すでに別の場所で見たことがあるはずだ。JSPの暗黙オブジェクトrequestのgetParameterである。これは単なる偶然ではない。実を言えば、暗黙オブジェクトrequestはdoGetの引数として渡されるHttpServletRequestそのものだからである。

JSPは実はサーブレットだと説明した。JSPのスクリプトもすべてサーブレットに変換される。サーブレットは基本的にdoGetメソッドで実行される。ここで「暗黙オブジェクト」とは、「サーブレットへ変換されるときにあらかじめ用意されている変数」だとわかるだろう。

requestとresponseという暗黙オブジェクトは、doGetの引数そのものである。またoutの暗黙オブジェクトは、responseから取得したPrintWriterを保持している変数だと考えられる。そう考えると、JSPでの知識がそのままサーブレットでも使えることがわかる。

それでは簡単な使用例を示す。

index.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Hello App Engine</title>
    <style>
    h1 {
        font-size: 16pt;
        background: #AAFFAA;
        padding: 5px;
    }
    </style>
</head>
<body>
    <h1>Hello App Engine!</h1>
    <p id="msg">何かを書いて送信してください。</p>
    <form method="post" action="/mygaeapp">
    <table>
        <tr>
            <td>入力</td>
            <td><input type="text" id="input" name="text1"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="送信"></td>
        </tr>
    </table>
    </form>
</body>
</html>

MyGaeAppServlet.java

package com.devkuma.mygaeapp;
 
import java.io.*;
 
import javax.servlet.http.*;
 
@SuppressWarnings("serial")
public class MyGaeAppServlet extends HttpServlet {
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)  throws IOException {
        response.setContentType("text/plain");
        request.setCharacterEncoding("utf8");
        response.setCharacterEncoding("utf8");
        PrintWriter out = response.getWriter();
        out.println("Hello, world!");
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        request.setCharacterEncoding("utf8");
        response.setCharacterEncoding("utf8");
        String param = request.getParameter("text1");
        PrintWriter out = response.getWriter();
        out.println("<html><head></head><body>");
        out.println("<h1>result</h1>");
        out.println("<p>you typed: " + param + ".</p>");
        out.println("</body></html>");
    }
}

index.htmlに簡単なフォームを置き、それを先ほど作成したMyGaeAppServletサーブレットで受信して結果を表示するようにしている。非常に簡単に値をサーブレットへ渡していることがわかる。