| JSP/サーブレット編 |
|
「サーブレットパスの構成要素を取得する」では、HttpServletRequestクラスを介して取得できる、リクエストURLのさまざまなパス要素について紹介しました。しかし、1つだけ紹介しなかった要素があります。それは、getPathInfoメソッドによって取得できる「拡張パス」情報です。
拡張パスは、サーブレットの位置を表すコンテキストパスやサーブレットパスのような情報とは異なり、「付随的な入力パラメータ」というべき情報です。プログラムから利用できる引数情報という意味ではクエリ情報とも似ていますが、クエリ情報が「?key=value」のような特殊なフォーマットで記述しなければならないのに対し、拡張パスは(その名のとおり)あたかもパスの一部であるかのように、パラメータ情報を記述できるという点が異なります。
拡張パスはキー名を持たないパラメータなので、複数の情報の受け渡しが必要な場合には不向きです。しかし、共通サーブレットから処理を分岐する(例えば、実処理用のクラスを特定する)場合などは便利に利用することができます。そのような場合、拡張パスまでが処理するクラスを特定する情報となるため、処理上で必要なパラメータと区分することで、URLをより分かりやすく(見やすく)することができます。
さて、この「拡張パス」情報、必ずしもすべてのURLに付加できるわけではありません。拡張パスが使えるかどうかは、デプロイメント・ディスクリプタ(web.xml)の設定によって決まります。
例えば、以下のようにurl-pattern要素がワイルドカードを含まない完全一致で指定されている場合、URLには拡張パス情報を付加することはできません。
| web.xml |
<?xml version="1.0" encoding="Shift_JIS" ?> |
つまり、「http://localhost:8080/javatips/ServletPath/sample_param/」のように拡張パスを付加してしまうと、URLがurl-pattern要素とマッチングしなくなってしまうのです。この場合、ブラウザには「404 Not Found」のエラーが返されてしまいます。
そこで、以下のようにurl-pattern要素を書き換えると、拡張パスが認識できるようになります。
<url-pattern>/ServletPath/*</url-pattern> |
拡張パス情報を利用したい場合は、url-pattern要素の末尾に必ず「*」(アスタリスク)を付加する必要があることを覚えておいてください。
| 「Java TIPS」 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
