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サーブレットで受信して結果を表示するようにしている。非常に簡単に値をサーブレットへ渡していることがわかる。