
基礎から学ぶサーブレット/JSP(5)
JSPの基本「暗黙オブジェクト」を使う
| クライアントからの要求を受け取る −requestオブジェクト− |
requestオブジェクトはoutオブジェクトに次いで、頻繁に用いられるオブジェクトです。requestオブジェクトは、クライアント(ユーザー)側から送信されたフォームデータやクエリ情報(URLの末尾に「?キー名=値」の形式で付加された情報)、クッキー(クライアントに保存された小さなテキスト)、ヘッダ情報など、いわゆる「リクエスト(要求)情報」と呼ばれる「行きの情報」全般を取得するためのメソッドを提供します。
■フォームデータの取得
まずはrequestオブジェクトの中でも最も頻繁に使用されることの多いgetParameterValues、getParameterNamesメソッドを使用してみましょう。
以下のサンプルでは、request_form.jspに対して送信された任意のリクエストデータを一覧表として出力します。
| request_form.jsp |
<%@ page contentType="text/html;charset=Shift_JIS"
import="java.util.*" %> |
![]() |
| 送信されたクエリ情報の値を出力(クリックすると全体を表示します) |
例えば、ブラウザのアドレス欄に「http://localhost:8080/atmarkit/chap5/request_form.jsp?key1=yyamada&key2=shimajiro」(実際に試す読者はリンクを利用してください)のように指定してみましょう。上記キャプチャのような結果を得られるはずです。
setCharacterEncodingメソッドは、リクエスト情報の文字エンコーディングを設定します。リクエスト情報に日本語が含まれている場合、このsetCharacterEncodingメソッドが正しく設定されていないと、文字化けの原因ともなりますので注意してください。
getParameterNamesメソッドは、現在のJSPページに対して送信されたすべてのフォーム情報(あるいはクエリ情報)のキー名をEnumerationオブジェクトとして取得します。Enumerationオブジェクトは、あるひとかたまりの情報を順番に取り出すためのメソッドを提供します。つまり、ここでは次のキー名がなくなるまで(Enumeration#hasMoreElementsメソッドがfalseを返すまで)、キー名を順番に取得することで(nextElementメソッド)、送信されたキーをすべて出力しているわけです。ただし、キーの取り出される順番は、「必ずしも記述順ではない」点に注意してください。
ループ内で使用されているgetParameterメソッドは、指定されたキー名に対応するパラメータ値を取得します。上の例ではクエリ情報を取得していますが、request_form.jspに対して送信するHTMLフォームを別に用意すれば、そのHTMLフォームの内容を取得することも可能です。
なお、時には1つのキーで複数の値を持つケースもあるでしょう。「〜?key=yyamada&key=shimajiro」のような場合です。HTMLフォームでもチェックボックスからの入力ではこのようなケースが考えられます。
そのようなときには、実はこのgetParameterメソッドは使用することができません。getParameterメソッドは、必ずキーにひも付いた最初の値1つのみを返すからです。もしも1つのキーに複数の値がマッピングされる可能性がある場合には、getParameterValuesメソッドを使用してください。getParameterValuesメソッドは、指定されたキーにひも付いた値を文字列配列として返します。ですから、上記のサンプルをより汎用的な形で複数値に対応したいという場合には、getParameterメソッドの行を以下のように書き換えます。
<td> |
■ヘッダ情報の取得
ヘッダ情報は、コンテンツ本体ではなく、クライアントの種類や対応言語、リンク元など、コンテンツに対する付加的な情報を表します。通常、ユーザーの目に触れる機会は少ない不可視の情報ではありますが、そこにはもろもろの制御を行うに当たって、極めて有用な情報が含まれていることが少なくありません。
例えば、ブラウザの種類(user-agentヘッダ)に応じて、表示するページの内容を変更するということも可能でしょうし、リンク元(refererヘッダ)が外部のサイトであれば処理を受け付けないなどセキュリティ上のガードとして用いることもあります。対応言語(accept-languageヘッダ)によって言語を切り替えることで、マルチ言語対応のサイトを構築することもできるでしょう。
ここでは、そうした応用的な用途にまで踏み込むことはできませんが、クライアントから送信されたヘッダ情報を一覧表として表示してみることにしましょう。取得の方法さえ分かってしまえば、その後の応用はあなたのアイデア次第で自由自在です。
| request_header.jsp |
<%@ page contentType="text/html;charset=Shift_JIS"
import="java.util.*" %> |
![]() |
| 送信されたクエリ情報の値を出力(クリックすると全体を表示します) |
getHeaderNamesメソッドは、クライアントから送信されたすべてのヘッダ名を取得し、Enumerationオブジェクトとして返します。Enumerationオブジェクトからのデータの取り出し方は、request_form.jspでも説明しましたので、そちらを参照してください。
getHeaderメソッドは指定されたヘッダ名に対応するヘッダ値を取得します。ヘッダ値を整数(int型)、あるいは日付(1970/01/01からの経過ミリ秒)として取得したい場合には、getIntHeader、getDateHeaderメソッドを使用することも可能です。
■クッキーの取得
クッキー(Cookie)は、サーバ側から唯一クライアントに対して書き込むことのできる「小さなテキスト」のことをいいます。指定された期間だけデータを永続化できるので、例えば、1度目のアクセスで入力された情報(例えば、E-Mailアドレスなど)を2回目のアクセスでデフォルト表示する、というようなことが可能になります。
以下のサンプルでは、あらかじめクッキーに保存されたE-Mailアドレスをテキストボックスにデフォルト表示させてみることにします。
| request_cookie.jsp |
<%@ page contentType="text/html;charset=Shift_JIS"
%> |
![]() |
![]() |
| 2度目以降のアクセスでは、1度目のアクセス時に入力されたE-Mailアドレスをテキストボックスにデフォルトでセットする |
getCookiesメソッドは、クライアントから送信されたクッキー情報を取得し、Cookieオブジェクトの配列として返します。ここでは、getCookiesメソッドの戻り値がnull(空)でなく、かつ、Cookie配列から取り出したCookieオブジェクトの中に“email”という名前のクッキーが含まれていた場合に、変数strMalにクッキー値をセットします(requestオブジェクトにはクッキー名をキーに直接クッキーにアクセスする、getParameterやgetHeaderのようなメソッドは存在しません)。
あとは取得した変数strMalの値をテキストボックスのデフォルト値としてセットするだけです。クッキー値が取得できなかった場合には、空文字列をセットします。
■requestオブジェクトのそのほかのメソッド
これまでに登場したgetParameter、getHeader、getCookiesメソッドのほかにも、requestオブジェクトには多くのメソッドが存在します。以下に、その中でも比較的使用される機会の多いメソッドをまとめてみましょう。
表3 requestオブジェクトの主なメソッド
|
| requestオブジェクトは、フォームデータ、クエリ情報、ヘッダ情報、クッキーそのほか、クライアントから送信された「リクエスト情報」全般にアクセスするためのメソッドを提供します。 |
| 2/3 |
|
INDEX |
||
| 第5回 JSPの基本「暗黙オブジェクト」を使う | ||
| Page1 暗黙オブジェクトを極める 画面の出力を担う −outオブジェクト− |
||
|
Page2 |
||
| Page3 画面間の共有データを管理する −sessionオブジェクト− |
||
| 「基礎から学ぶサーブレット/JSP」連載記事一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




