もはやWeb利用者の常識、“URL”の意味を理解しよう:Webアプリの常識をJSPとStrutsで身につける(5)(3/3 ページ)
本連載は、JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外(PHPやASP.NET、Ruby on Railsなど)の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です
■GETではリクエスト情報がURLに丸見え
GETパラメータの場合は、URLの末尾に「?」を付け「名前=値」の形式でリクエストパラメータを連結します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
複数のリクエストパラメータを待つ場合は、上記の例のように「&」で連結します。GETパラメータはデータの受け渡しに制限があり(上限は環境に依存します)、情報の一部をキーワードとして指定する検索エンジンなどで一般的によく利用されます。URLとして表示されているので、再利用が可能なためです。
一方でGETパラメータを使うと、送信するリクエスト情報がURLに丸見えなので、機密情報や個人情報をGETでは送信しないことはWebアプリケーションの“常識”といえます。
■GETパラメータをJSPとStrutsで理解する
では、実際にGETの仕組みをJSP/Strutsで実装してみます。まず、連載第2回の「Strutsの常識を知り、EclipseとTomcatの環境構築」で作成したディレクトリ「PKG/Hello/pages」に「Parameter.jsp」を作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
次に、「PKG/Hello/WEB-INF/src」配下に「request」フォルダを作成して、そのフォルダ配下に「RequestAction.java」を作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
最後に、「PKG/Hello/WEB-INF」配下の「struts-config.xml」を編集して完了です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
注意! 「絶対パスと相対パス」
ここで、「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」と記述しても、同じディレクトリに存在することを表します。
■Eclipseからサンプルを実行してみよう
それでは、サンプルを実行してみましょう。連載第2回と同様に、Eclipseを起動します。次に、[プロジェクト・エクスプローラー]の「Hello」を選択して右クリックをして、[リフレッシュ]を選択します。Eclipseで[プロジェクト]の[クリーン]を選択して、Helloプロジェクトのコンパイルが完了したら、Eclipse上から「Tomcat起動」アイコン(猫マーク)を押して、Tomcatを起動してください。正常に起動したことを確認したら、下記のURLにアクセスしてください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
すると、図3のようなページが表示されたと思います。
次に下記のURLのように、URLの後ろに「?etc=mesena」という文字列を追加して更新してください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
「?」の後に付いた「etc」の値を取得して「GETパラメータ」の値が「mesena」に変わったと思います。この特徴こそ、GETパラメータの仕組みです。
■Strutsの<bean>タグ
ここで、前回のタグリファレンスで紹介した<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パラメータをJSPとStrutsで理解する
次に、POSTパラメータの仕組みについて説明します。POSTパラメータの場合は、「リクエスト情報入力」のように事前に入力フォームを用意します。先ほどのディレクトリ「PKG/Hello/pages」に以下のような「Request.jsp」を作成してください。入力フォームに関しては前回の記事が参考になると思います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
入力フォームに値を入力して、「OK」ボタンを押すと、RequestAction.javaでパラメータ「name」として入力したリクエスト情報を取得できます。これが、POSTパラメータの仕組みです。その取得した情報を<bean:write>タグを使って表示すると、図5のような画面が表示されます。
次回は、Webアプリ上で保持する“状態”の常識
今回の内容で、URL、プロトコル・メッセージング・パラメータに関する常識が身に付いたことと思いますが、いかがでしたでしょうか。
次回は今回の内容に関連して、セッションやCookie、ステートレス/フル、同期/非同期通信、などWebアプリケーション上で保持する“ステート”(状態)について説明します。今回の内容とセットで読むと、さらに理解が深まるかと思いますので、どうぞお楽しみに。
今回のサンプルは、こちらからダウンロードできます。
プロフィール
中村 圭一朗(なかむら けいいちろう)
株式会社メセナ・ネットコム所属
現在、Strutsを利用した旅行業務システムの開発に携わっている。日々情報収集と知識の蓄積に努め、さまざまな場面で迅速かつ正確な判断と行動を取れるSE(真の技術者)を目指しまい進。
- JavaScript/Ajaxで知るWebアプリとスクリプトの常識
- Webアプリにおける11の脆弱性の常識と対策
- JUnitとEclipseを使って学ぶ、“テスト”の常識
- Hibernateで覚えるO/RマッピングとBeanの常識
- MySQLの常識を知りセットアップしてJSPからDB操作
- Webアプリ開発の常識、バリデーションとテンプレート
- 発掘! Webの“あるある”問題点−ステートの常識
- もはやWeb利用者の常識、“URL”の意味を理解しよう
- HTMLやStrutsに必須の“タグ”と“サブミット”の常識
- Webアプリにおけるサーバとクライアントの常識
- Strutsの常識を知り、EclipseとTomcatの環境構築
- いまさら聞けない、Webアプリケーションの常識
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Strutsを使うWebアプリケーション構築術
ステップ・バイ・ステップの解説で誰にも分かるStruts講座。効率の高いWebアプリケーション開発をマスターしよう - Java開発者のためのFAQ集
Java開発者が 最低限押さえておくべきJavaに関する基礎知識、実際のソリューション構築の場面で定石とされるノウハウ、プログラミングTIPSなどのFAQをご紹介していきます。 - サーブレットの基礎知識と活用
- JSPの基礎知識と活用
- セッション管理
- Servlet/JSPリファレンス
- Javaプログラミングに役立つテクニックとノウハウ集
- JSP/サーブレット(JSTL、Google活用なども)
- Apache/Jakarta(Struts、Ant、Excel活用なども)
- やり直し「JSPとTomcat」
途中までかじったが挫折した。スキルチェンジしたい!という読者のために、Tomcatの最新バージョンを使いながらJSPを基礎から解説していく - プログラマーの常識をJavaで身につける
Javaコアパッケージは応用範囲が広いため、普段使わないクラスに意外な発見があるはずです。そこから、さまざまな「常識」を学びましょう