MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 「InputStream」の取得 | << | >> |
本節では、
PageServlet
を使用する際の
Producer
生成に使用する
InputStream
取得のカスタマイズ方法を説明します。
本節におけるクラス図を以下に示します。
色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
記述 | 完全名 |
---|---|
ClassLoaderLocator | jp.ne.dti.lares.foozy.pagemixer.page.ClassLoaderLocator |
LocalFSLocator | jp.ne.dti.lares.foozy.pagemixer.page.LocalFSLocator |
Locator | jp.ne.dti.lares.foozy.pagemixer.page.Locator |
LocatorFactory | jp.ne.dti.lares.foozy.pagemixer.servlet.LocatorFactory |
PageServlet | jp.ne.dti.lares.foozy.pagemixer.servlet.PageServlet |
Producer | jp.ne.dti.lares.foozy.pagemixer.mixer.Producer |
ServletContextLocator | jp.ne.dti.lares.foozy.pagemixer.servlet.ServletContextLocator |
WebAppLocator | jp.ne.dti.lares.foozy.pagemixer.servlet.WebAppLocator |
本節での説明では、チュートリアル固有クラスは登場しません。
「リソース」管理としての InputStream
取得に関する詳細は、
"ロケールに応じた描画" 節を参照してください。
Locator
実装の選択「リソース」の InputStream
取得におけるカスタマイズのために、
PageMixer は "LocatorFactory
" を提供しています。
LocatorFactory
は Locator
の生成に使用されます。
"ロケールに応じた描画" 節において説明した
ClassLoaderLocator
および
LocalFSLocator
に加えて、
PageMixer は Servlet 環境向けに ServletContextLocator
および
WebAppLocator
を提供しています。
LocatorFactory
のデフォルト実装は、
(後述する)設定に応じてこれらのうちいずれかを選択します。
ServletContextLocator
は
ClassLoaderLocator
の派生クラスです。
本クラスは、
はじめに
ServletContext
の getResourceAsStream
を使用して
InputStream
取得を試みます。
その後に基底クラスの getInputStream(String)
を起動します。
WebAppLocator
は
LocalFSLocator
の派生クラスです。
本クラスは、
ServletContext
の
getRealPath("")
戻り値を
LocalFSLocator
コンストラクタのベースディレクトリ名として指定します。
そのため、
本クラスはウェブアプリケーションディレクトリ配下にあるリソースの
InputStream
取得を試みます。
ServletContextLocator
は、
InputStream
の元となっているリソースが、
最後のアクセス以来更新されているか否かを調べることが出来ないため、
リソースの「再読み込み」が出来ません。
一方で、
WAR ファイルの展開イメージを実行時に生成しない
Servlet コンテナの場合、
WebAppLocator
を使用できないかもしれません。
但し、私はそのような実装を見たことがありません。
ほとんど全てのケースにおいて、
既定義済みのクラスで十分だと思われますが、
LocatorFactory
のカスタマイズを行う際の詳細は、
API ドキュメントおよびこれらのソースファイルを参照してください。
LocatorFactory
は以下に示す
Servlet 初期化パラメータを受理可能です。
名前 | 説明 |
---|---|
locator.reloadable |
Servlet がリソース更新時の再読み込みを必要とするか否か。
言い換えるなら、
この設定が "true" なら
WebAppLocator が使用され、
それ以外の場合は ServletContextLocator が使用されます。
省略時の値は "true" です。 |
カスタマイズした LocatorFactory
クラスを使用する場合、
配備記述子において、
Servlet の init-param として
"servlet.locatorFactory
"
を以下のように指定する必要があります。
<init-param>
<param-name>
servlet.locatorFactory
</param-name>
<param-value>
name of your custom LocatorFactory
</param-value>
</init-param>
MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 「InputStream」の取得 | << | >> |