最終更新日:190524 原本2012/06/02

サーブレットとJSP/HTMLのやりとり (1/5)

■HTMLからサーブレットへフォームを送信する

ページ間のデータのやり取りの基本といえば、やはり「フォーム」でしょう。HTMLやJSPのページにフォームを用意し、そこからサーブレットへと送信する、という使い方は、サーブレット利用の基本ともいえます。

サーブレットに送信されたフォームの内容を取得するには、doGet/doPostの引数に用意されているHttpServletRequestインスタンスを利用します。この中にある「getParameter」メソッドで、送られた値をとり出すことができます。
String 変数 = request.getParameter( 名前 );

たとえば、<input tppe="text" name="txt1">といったコントロールであれば、getParameter("txt1")と指定することで値が得られます。得られる値は、すべてStringになるので、数値などの値は必要に応じてそこから変換し処理すればよいでしょう。

このgetParameterというメソッド、既に別のところで見たことがありませんか? そう、JSPの暗黙オブジェクトrequestの「getParameter」です。これは、単なる偶然ではありません。実をいえば、暗黙オブジェクトrequestは、doGetの引数で渡されるHttpServletRequestのことなのですから。

JSPは、実はサーブレットである、と説明しましたね。ということは、JSPのスクリプトもすべてサーブレットに変換されているわけです。それらは基本的にdoGetメソッド内で実行されるようになっているでしょう。ということは、「暗黙オブジェクト」とは、「サーブレットに変換されたときにあらかじめ用意されている変数」であることが想像がつくでしょう。

requestresponseといった暗黙オブジェクトは、doGetの引数そのものなのです。またoutなどの暗黙オブジェクトは、responseから取得したPrintWriterを保管している変数と考えることができます。そう考えると、JSPでの知識がそのままサーブレットでも使えることに気がつくでしょう。

では、簡単な利用例をあげておきましょう。index.htmlにシンプルなフォームを置き、それを先に作成したMyGaeAppServletサーブレットで受け取り結果を表示するようにしてみます。非常にシンプルに値をサーブレットへと受け渡せることがわかります。

●プログラム・リスト●

*program list*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
※index.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>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サーブレットのリスト
 
package com.tuyano.libro.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>");
    }
}