Home of: [工房 "藤車"] > [SourceForge.net における PageMixer]

「InputStream」の取得

本節では、 PageServlet を使用する際の Producer 生成に使用する InputStream 取得のカスタマイズ方法を説明します。

概要

クラス図

本節におけるクラス図を以下に示します。

クラス図
クラス図 (クリックで拡大表示)

色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。

クラス名

本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。

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" を提供しています。 LocatorFactoryLocator の生成に使用されます。

"ロケールに応じた描画" 節において説明した ClassLoaderLocator および LocalFSLocator に加えて、 PageMixer は Servlet 環境向けに ServletContextLocator および WebAppLocator を提供しています。 LocatorFactory のデフォルト実装は、 (後述する)設定に応じてこれらのうちいずれかを選択します。

ServletContextLocatorClassLoaderLocator の派生クラスです。

本クラスは、 はじめに ServletContextgetResourceAsStream を使用して InputStream 取得を試みます。 その後に基底クラスの getInputStream(String) を起動します。

WebAppLocatorLocalFSLocator の派生クラスです。

本クラスは、 ServletContextgetRealPath("") 戻り値を 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>

カスタム LocatorFactory の指定

次節「'Producer'の生成」へ