GETパラメータの場合は、URLの末尾に「?」を付け「名前=値」の形式でリクエストパラメータを連結します。
GETパラメータの記述例 | |
|
複数のリクエストパラメータを待つ場合は、上記の例のように「&」で連結します。GETパラメータはデータの受け渡しに制限があり(上限は環境に依存します)、情報の一部をキーワードとして指定する検索エンジンなどで一般的によく利用されます。URLとして表示されているので、再利用が可能なためです。
一方でGETパラメータを使うと、送信するリクエスト情報がURLに丸見えなので、機密情報や個人情報をGETでは送信しないことはWebアプリケーションの“常識”といえます。
では、実際にGETの仕組みをJSP/Strutsで実装してみます。まず、連載第2回の「Strutsの常識を知り、EclipseとTomcatの環境構築」で作成したディレクトリ「PKG/Hello/pages」に「Parameter.jsp」を作成します。
Parameter.jsp | |
|
次に、「PKG/Hello/WEB-INF/src」配下に「request」フォルダを作成して、そのフォルダ配下に「RequestAction.java」を作成します。
RequestAction.java | |
|
最後に、「PKG/Hello/WEB-INF」配下の「struts-config.xml」を編集して完了です。
struts-config.xmlに追加 | |
|
ここで、「input="/pages/Parameter.jsp"」の「/pages/Parameter.jsp」という表記について確認しておきます。
Webブラウザでよく見るURLは「http://localhost:8080/hello/pages/Parameter.jsp」というふうに、スキーム名やドメイン名などを含めたものです。これを「絶対パス」といい、そのURLだけでファイルのある場所を一意で示す絶対的なものです。
これに対して、「/pages/Parameter.jsp」のような表記の仕方を「相対パス」といいます。例えば、「http://localhost:8080/hello」までを基準の場所として、ファイルやディレクトリがどこにあるかを相対的に示す表記です。基準の場所と「相対パス」を足すと、「絶対パス」になります。
JSPやStrutsの設定ファイルに記述する場合、相対パスを用いることがほとんどです。また、項目に対して記入すべき相対パスが、「どこを基準としているのか」「/で始まるのか」「それとも、/を付けないのか」でWebアプリケーションが動かなくなることがよくあるので、気を付けましょう。
また、HTML上でも「./pages/Parameter.jsp」「../pages/Parameter.jsp」「../../Parameter.jsp」という表記の仕方でリンク先や参照先を指定する場合があります。これも混乱しやすいので、よくディレクトリの仕様を確認しておく必要があります。一般的に「./」で同じディレクトリを、「../」で1つ上の階層のディレクトリを、「../../」で2つ上の階層のディレクトリを表しています。「Parameter.jsp」と記述しても、同じディレクトリに存在することを表します。
それでは、サンプルを実行してみましょう。連載第2回と同様に、Eclipseを起動します。次に、[プロジェクト・エクスプローラー]の「Hello」を選択して右クリックをして、[リフレッシュ]を選択します。Eclipseで[プロジェクト]の[クリーン]を選択して、Helloプロジェクトのコンパイルが完了したら、Eclipse上から「Tomcat起動」アイコン(猫マーク)を押して、Tomcatを起動してください。正常に起動したことを確認したら、下記のURLにアクセスしてください。
http://localhost:8080/hello/pages/Parameter.jsp |
すると、図3のようなページが表示されたと思います。
次に下記のURLのように、URLの後ろに「?etc=mesena」という文字列を追加して更新してください。
http://localhost:8080/hello/pages/Parameter.jsp?etc=mesena |
「?」の後に付いた「etc」の値を取得して「GETパラメータ」の値が「mesena」に変わったと思います。この特徴こそ、GETパラメータの仕組みです。
ここで、前回のタグリファレンスで紹介した<bean:header><bean:write><bean:parameter>タグについて説明します。
□<bean:header>タグ
項目「HTTPヘッダ」で出力している情報「<bean:header>タグ」は、HTTPリクエストヘッダの値を取得する際に使用します。指定できる属性はid、multiple、name、valueです。使用するWebブラウザにより、HTTPリクエストヘッダの情報は異なります。
□<bean:write>タグ
その「<bean:header>タグ」で取得した情報を画面に表示させるために使用しているのが「<bean:write>」タグです。<bean:write>タグは、取得されたJavaBeansパラメータを属性「name」で指定して表示します。このタグは表示させたい項目を簡単に表示できるため一般的によく利用されます。
□<bean:parameter>タグ
画面に「GETパラメータ :no-name」として表示しているのが、<bean:parameter>タグです。<bean:parameter>タグの特徴はリクエストで取得したパラメータを取得して表示できます。属性は、<bean:header>と同じです。
今回のRequest.jspでは、属性「value」で"no-header"としているため、初期値としてvalueが表示されています。
次に、POSTパラメータの仕組みについて説明します。POSTパラメータの場合は、「リクエスト情報入力」のように事前に入力フォームを用意します。先ほどのディレクトリ「PKG/Hello/pages」に以下のような「Request.jsp」を作成してください。入力フォームに関しては前回の記事が参考になると思います。
Request.jsp | |
|
入力フォームに値を入力して、「OK」ボタンを押すと、RequestAction.javaでパラメータ「name」として入力したリクエスト情報を取得できます。これが、POSTパラメータの仕組みです。その取得した情報を<bean:write>タグを使って表示すると、図5のような画面が表示されます。
今回の内容で、URL、プロトコル・メッセージング・パラメータに関する常識が身に付いたことと思いますが、いかがでしたでしょうか。
次回は今回の内容に関連して、セッションやCookie、ステートレス/フル、同期/非同期通信、などWebアプリケーション上で保持する“ステート”(状態)について説明します。今回の内容とセットで読むと、さらに理解が深まるかと思いますので、どうぞお楽しみに。
今回のサンプルは、こちらからダウンロードできます。
中村 圭一朗(なかむら けいいちろう)
株式会社メセナ・ネットコム所属
現在、Strutsを利用した旅行業務システムの開発に携わっている。日々情報収集と知識の蓄積に努め、さまざまな場面で迅速かつ正確な判断と行動を取れるSE(真の技術者)を目指しまい進。
Copyright © ITmedia, Inc. All Rights Reserved.