public class ResourceMapping extends java.lang.Object implements HttpRequestHandler
画像等の静的ファイルへのリクエストやフォーワードを介さないJSP画面へのアクセスは、
通常、Webサーバ・アプリケーションサーバでレスポンスを行う為、フレームワーク側で制御することができない。
このリクエストハンドラを経由させることで、これらのアクセスについても
認可を始めとする共通処理の制御下におくことができる。
マッピング先のパスには、HttpResponse.setContentPath(String)
の書式に従って、
以下の3種類のいずれかを指定することができる。
1. コンテキストクラスローダ上のリソース
2. サーブレットフォーワード(JSPを含む)
3. 内部フォーワードの実行結果
ただし、ファイルシステム上のローカルファイル(file://スキーム)は使用できない。
次の例では、特定のベースURI(/webapp/resource/)下の画像ファイルに対するリクエストを、
サーブレットコンテキスト上のリソース(/WEB-INF/resource/)を参照するようにマッピングしている。
こうすることで、これらのファイルをフレームワークの認証・認可の制御下に置くことができる。
new StaticResource("/admin/resource/", "servlet:///WEB-INF/resource/");
HTTPリクエストと、それに対するレスポンスのコンテンツパスとの対応は以下のようになる。
===========================================================================
HTTPリクエストライン コンテンツパス [コンテンツタイプ]
===========================================================================
GET /admin/resource/style.css -> servlet:///WEB-INF/resource/style.css
[text/css]
------------------------------- --------------------------------------
GET /admin/resource/js/init.js -> servlet:///WEB-INF/resource/js/init.js
[application/javascript]
===========================================================================
HttpResponse.setContentPath(String)
Constructor and Description |
---|
ResourceMapping()
デフォルトコンストラクタ。
|
ResourceMapping(java.lang.String baseUri,
java.lang.String basePath)
特定のbaseUri配下へのリクエストを静的ファイルにマッピングする
リクエストハンドラを生成する。
|
Modifier and Type | Method and Description |
---|---|
HttpResponse |
handle(HttpRequest req,
ExecutionContext ctx)
HTTPリクエストに対する処理を実行する。
|
ResourceMapping |
setBasePath(java.lang.String basePath)
マッピング先リソースパスを設定する。
|
ResourceMapping |
setBaseUri(java.lang.String baseUri)
マッピング元ベースURIを設定する。
|
public ResourceMapping(java.lang.String baseUri, java.lang.String basePath)
baseUri
- マッピング元ベースURIbasePath
- マッピング先リソースパスpublic ResourceMapping()
public ResourceMapping setBaseUri(java.lang.String baseUri)
baseUri
- マッピング元ベースURIpublic ResourceMapping setBasePath(java.lang.String basePath)
basePath
- マッピング先リソースパスpublic HttpResponse handle(HttpRequest req, ExecutionContext ctx)
このクラスの実装では以下の処理を行う。 1. リクエストURI中のbaseUri以下の部分を取得する。 2. docRootに1.の結果を連結した文字列をコンテンツタイプとする。 3. リクエストURIの拡張子からコンテンツタイプを判定する。 4. HttpResponseを生成し、2,3の結果をそれに設定する。 5. 4の結果を返す。
handle
in interface Handler<HttpRequest,HttpResponse>
handle
in interface HttpRequestHandler
req
- HTTPリクエストオブジェクトctx
- サーバサイド実行コンテキストオブジェクトHttpResponse.setContentPath(String)