■入力フォーム処理の基本

Webアプリケーションでユーザーからの入力を受け取るためには、入力フォームを用いる。入力フォームは、HTMLファイル中に次のような<FORM>タグで構成する必要がある。

<FORM method="GET または POST" action="呼び出すプログラム名">
…テキストフィールドなどの入力フィールド。
 たとえば、<INPUT type="TEXT">など…
<INPUT type="SUBMIT" name="ボタン名">
</FORM>


ここでは、リスト1に示すtest.htmlファイルを用意してみよう。行番号はソース内には必要なく、便宜上付加しているものだ。

リスト1■test.html
1:<HTML>
2:<BODY>
3:<FORM method="POST" action="test.jsp">
4:商品名:<INPUT type="TEXT" name="productname">
5:<INPUT type="SUBMIT" value="送信">
6:</FORM>
7:</BODY>
8:</HTML>

上記のリスト1をWebブラウザで参照した場合には、画面1のようになる。画面1には、商品名を入力するためのひとつのテキストフィールドを用意した。そのテキストフィールドには、4行目にあるように、nameアトリビュートでproductnameという名前を割り当てている。

4:商品名:<INPUT type="TEXT" name="productname">

ユーザーが「SUBMIT」ボタン(画面1にある「送信する」ボタン)を押した場合には、入力フォーム内の文字列データが<FORM>タグ内の「action」アトリビュートで指定したWebサーバ側のプログラムに送信される。

リスト1では、3行目で「action」アトリビュートに「test.jsp」ファイルに指定しているため、ユーザーが「SUBMIT」ボタンを押した際には、サーバ側に置かれた「test.jsp」という名のプログラムが呼び出されることになる。

3:<FORM method="POST" action="test.jsp">


画面1■リスト1の実行結果

■JSPで入力フォームを解釈し出力する
それでは、リスト1から呼び出されるtest.jspファイルを作っていこう。ここでは分かりやすくするため、単純にユーザーがリスト1の画面で入力した商品名そのものを表示することにした。プログラムソースは、次に挙げるリスト2のようになる。

リスト2■test.jsp

1: <HTML>
2: <BODY>
3: 入力された商品名は、
<%= request.getParameter("productname") %>
4: </BODY>
5: </HTML> (ただしこの段階では日本語文字コードの関係で正しく動作しない)


リスト2の3行目にあるように、JSPにおいて入力フォームに入力された値を取得するには、requestオブジェクトのgetParameterメソッドを用いる。

request.getParameter("フィールド名")

requestオブジェクトのgetParameterメソッドは、引数に指定したフィールド名をもつ入力フィールドに入力された値を、文字列として返すメソッドだ。

ちなみに、getParameterメソッドは、引数に指定したフィールド名をもつ入力フィールドが存在しない場合には、nullを返すことになっている。該当するフィールド名を持つ入力フィールドが存在しない場合としては、たとえばユーザーがHTMLファイルの入力フォームを経由せずに、直接JSPファイルのURLを要求した場合などが考えられる。
Tips:getParameterメソッドの使い方
getParameterメソッドは、入力フィールドに1つの値しか含まれていない場合に利用する。たとえば、複数選択可能な選択フィールド(<SELECT>〜<OPTION>〜</SELECT>)などでは、入力フィールドに複数の値が設定されることがある。その場合には、代わりにgetParameterValuesメソッドを用いる。詳細は本文で後述しよう。

requestオブジェクトは、JSPから何も定義せずにそのまま利用できる「デフォルトオブジェクト」であり、その実態は、javax.Servlet.http.HttpServletRequestクラスのインスタンスである。

JSPには、requestオブジェクト以外にも、表1に示すさまざまなデフォルトオブジェクトが用意されている。実際にこれらのオブジェクトがどのようなメソッドを備えているのかを知りたければ、J2EE SDKのドキュメントで、表1に示すクラスに関するヘルプを参照すればよいだろう。

表1■JSPの標準オブジェクト概要
オブジェクト
クラス名
解   説
request javax.Servlet.http.
HttpServletRequest
クライアントから送信されたデータを処理するオブジェクト。クライアントから送信された入力フォームの情報、ユーザー情報、ヘッダなどを取得できる
response javax.Servlet.http.
HttpServletResponse
クライアントにデータを送信するためのオブジェクト。クライアントにヘッダ情報やサーバーステータス、テキストデータやバイナリデータなどを返すときに用いる
out javax.Servlet.jsp.
JSPWriter
クライアントにテキストデータを送信するためのオブジェクト。バッファリングをサポートする。バイナリデータを送信したい場合には、rssponseオブジェクトに備わるいくつかのメソッドを用いる
session javax.Servlet.http.
HttpSession
Cookieを使ったセッションを管理する。このオブジェクトを利用すると、ユーザーごとにページ間を渡るデータを管理できるようになる。たとえば、ショッピングページで「カゴに入れる」といったシステムを構成するとき、ユーザーが選んだ商品情報をsessionオブジェクトに格納するといったように利用すればよい
page Object このページを指すオブジェクト自身。すなわちインスタンス化された自分自身
pageContext javax.Servlet.jsp.
PageContext
このページに関するコンテキスト情報。環境情報や入出力に用いるオブジェクト(responseオブジェクト、requestオブジェクト、outオブジェクトへの参照)、ページで使われているクラスをインスタンス化したオブジェクトへの参照などを取得できる
application javax.Servlet.
ServerContext
このアプリケーションに関するコンテキスト情報。サーブレットコンテナに関する情報など、環境設定に関するさまざまな情報が得られる
config javax.Servlet.
ServerConfig
サーブレットコンテナに関する設定情報を保持するオブジェクト。設定ファイル中に記述したWebアプリケーション初期化の設定値などを読み取れる
exception Throwable 発生した例外を示すオブジェクト。エラーページをカスタマイズしたいときに用いる