環境設定

概要

QuickReflectorは環境設定ファイルを取り込み、その内容に従って構成を組み立てて動作します。SilverGear単体においてはquickreflector.silvergear.Configurationクラスに環境設定ファイルを指定して生成したConfigurationオブジェクトをPageRendererオブジェクトが参照します。

WebCoreライブラリを使うと、この部分の設定をQuickReflectorServletが担当し、環境設定の変化をリクエストごとに検知します。

このページでは、QuickReflectorServletが必要とするweb.xmlファイルと環境設定ファイルの記述について解説します。

環境設定ファイルの一覧と依存関係

QuickReflectorの環境設定ファイルと依存関係は以下のとおりです。

デモにおける実ファイル名 機能 説明
web.xml コンテキストパスの環境設定 サーブレットのコンテキスト別の環境設定を記述するファイルです。このファイルの中で、QuickReflectorServletに対してコンフィグレーションファイルへのパスを記述します。
quickreflector.xml QuickReflectorの環境設定 QuickReflectorのWebCoreおよびSilverGearに対して全体的に影響を与える環境設定ファイルです。このファイルはweb.xmlに指定されたパスに基づいて参照されます。
functions.xml プローブファンクションの環境設定 QuickReflectorのプローブファンクション機能に影響を与える環境設定ファイルです。このファイルはQuickReflectorの環境設定ファイル(quickreflector.xml)に指定されたパスに基づき参照されます。

web.xmlファイル

web.xmlファイルはサーブレットコンテナを使用するときに使う設定ファイルです。QuickReflectorServletを有効にするにはWebCoreとSilverGearのアーカイブファイルをインストールした上で、以下の設定をweb.xmlに追加してください。

<servlet>
    <servlet-name>JsxServlet</servlet-name>
    <servlet-class>quickreflector.webcore.QuickReflectorServlet</servlet-class>
    <init-param>
        <param-name>configuration</param-name>
        <param-value>WEB-INF/quickreflector.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>JsxServlet</servlet-name>
    <url-pattern>*.jsx</url-pattern>
</servlet-mapping>
    

init-param/param-valueのパスに相対パスを指定する場合は、上記のようにコンテキストルートパスから相対でどこに環境設定ファイルがあるかを指定します。絶対パスを指定する場合はドライブ名(非UNC)あるいは'/'で始まるパス指定をしてください。

QuickReflector環境設定(quickreflector.xml)

環境設定ファイルの例は以下のとおりです。DTDファイルはWebCoreにおいてはquickreflector/webcore/webcoreconfig.dtdに、SilverGear単体で使う場合はquickreflector/silvergear/silvergear-config.dtdに従って記述します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "http://127.0.0.1/x">
<root>
    <pagemanager>quickreflector.silvergear.page.InterpreterPageManager</pagemanager>
    <tagcontrolfactory>quickreflector.silvergear.tagcontrol.WebPageTagControlFactory</tagcontrolfactory>
    <commandset>quickreflector.silvergear.page.PageCommandSet</commandset>
    <requestdecodemanager>quickreflector.webcore.StandardDecodeManager</requestdeodemanager>
    <setextension>quickreflector.webcore.setextension.IncludeOnlyProcessor</setextension>
    <setextension>quickreflector.webcore.setextension.HttpHeaderProcessor</setextension>
    <errorreporttype>develop</errorreporttype>
    <shared>
        <sourcepath>c:/java/workspace/qr/testresource</sourcepath>
    </shared>
    <page>
        <defaultcharset>
            <template>Windows-31J</template>
            <output>Windows-31J</output>
        </defaultcharset>
        <compresslevel>2</compresslevel> 
        <sourcepath>c:/java/workspace/qr/testresource</sourcepath>
        <temporary>testresource/temp</temporary>
    </page>
    <probefunction>
        <eventdef>functions.xml</eventdef>
        <sourcepath>c:/java/workspace/qr/testresource</sourcepath>
        <temporary>testresource/temp</temporary>
    </probefunction>
    <scriptconfig language="java">
        (define debug "true")
        (define deprecation "true")
        (define source 1.4)
        (define target 1.4)
    </scriptconfig>
</root>
    

各要素の説明を以下の表に示します。

パス 選択肢 説明
pagemanager quickreflector.silvergear.page. InterpreterPageManager
quickreflector.silvergear.page. VirtualPageManager
quickreflector.silvergear.page. BytecodePageManager
InterpreterPageManagerが標準です。他のクラスはより高速に動作しますが、最初の呼び出しでかかるコストがやや大きいことと動作の検証が遅れており現在のところ利用はお勧めできません。
tagcontrolfactory quickreflector.silvergear.tagcontrol. WebPageTagControlFactory タグの閉じ方を制御するためのファクトリクラスの設定です。XHTMLとHTMLにおいてタグの閉じ方が異なることに対処するためのクラスですが、XMLにも対応することを検討しているため、今後削除されるかもしれません。
commandset quickreflector.silvergear.page.PageCommandSet ext:useなど、制御タグに関する記述を提供するクラスの設定です。PageCommandSetではspanとexntedに対して主な制御記述を行い、ext:で始まる属性キーに機能を割り当てています。これに不都合がある場合にはCommandSetインタフェースを継承したほかのクラスを作成して設定します。
requestdecodemanager quickreflector.webcore. StandardDecodeManager (WebCoreのみ)リクエストパラメータのデコード処理を行います。StandardDecodeManagerはpage/defaultcharset/outputの値を参考に、マルチバイト文字をデコードします。これは変数コンテナのREQUESTプリフィックス下の値に影響します。
setextension quickreflector.webcore.setextension. IncludeOnlyProcessor
quickreflector.webcore.setextension. HttpHeaderProcessor
(WebCoreのみ)ext:set のキーワードに応じて処理を提供する拡張機能です。キーワードひとつに対し1個のエクステンションを割り当てることができ、その組み合わせを複数指定することができます。IncludeOnlyProcessorはリクエストパスとページパスが等しい場合に出力を拒否して例外を送出する機能を提供します。HttpHeaderProcessorは渡されたテキストをHTTPヘッダ文字列とみなして処理します。
errorreporttype develop
release(デフォルト)
(WebCoreのみ、Tomcat5~6で有効)developを指定すると、プログラムのコンパイルが失敗した際にソース位置をウェブブラウザに表示します。
shared/sourcepath (任意、省略可) ページテンプレートプログラムおよびプローブファンクションから共通で参照できるソースコードの格納先のルートの指定に使います。ここに置かれたプログラムは直接にページテンプレートおよびプローブファンクション設定から直接に呼び出すことはできません。
page/defaultcharset/template Windows-31J
UTF-8
euc-jp
Shift_JISなど
ページテンプレートからエンコーディング指定を読み取ることができない場合に使われます。
page/defaultcharset/output Windows-31J
UTF-8
euc-jp
Shift_JISなど
ページ出力においてHTTP-HEADERの設定がなされなかった場合に使われます。QuickReflectorServletを使う場合は自動的に使われますが、SilverGear単体で使う場合はあえて使わない限り意味がありません。
page/compresslevel 0
1
2
3
0は非圧縮です。コメントも空白もそのまま出力されます。
1はテキストの前後の空白と改行を最大1個に圧縮します。(圧縮が不十分な箇所もあります)コメントはそのまま出力されます。
2は1とほぼ同様ですが、コメントについては<script>と<style>と<span ext:set>タグの内部を除き削除されます。
3は不要と思われる空白をすべて詰めます。必要なところには最大1個の空白が残るようになります。コメントは2と同様に不要な箇所からすべて削除されます。
page/sourcepath (任意) ページテンプレートファイルおよびプログラムのルートディレクトリを示します。ページリクエストに対するファイルの検索はすべてここで示すディレクトリをルートとする相対パスとして行われます。WebCore環境においては、相対パスの指定をすると環境設定ファイルからの相対パスとして扱われます。
page/temporary temporary-p(任意) テンポラリディレクトリの指定に使います。WebCore環境においては、相対パスを指定するとServletContextが保持するtempdirをルートとする相対位置にテンポラリディレクトリを作り、それを使用します。
probefunction/eventdef functions.xml(任意) プローブファンクションコールの設定を記述したファイルの位置を示します。相対パスの指定をすると環境設定ファイルからの相対パスとして扱われます。
probefunction/sourcepath (任意) プローブファンクションプログラムのルートディレクトリを示します。eventdefが示すファイルに記入されているファイルの探索は、このパスをルートとして相対的に検索され、使われます。
probefunction/temporary temporary-f(任意) テンポラリディレクトリの指定に使います。WebCore環境においては、相対パスを指定するとServletContextが保持するtempdirをルートとする相対位置にテンポラリディレクトリを作り、それを使用します。
scriptconfig language="言語ID"(コンテンツは任意) スクリプトドライバごとの環境設定を指定するために使います。記述は (define 変数名 "値")を単位とする列挙形式です。

プローブファンクション環境設定(quickreflector.xml)

プローブファンクション環境設定ファイルの例は以下のとおりです。DTDファイルはquickreflector/silvergear/silvergear-probeevent.dtdに従って記述します。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root SYSTEM "http://127.0.0.1/dummy">
<root>
    <addfunc use="true" pattern="p006/test.html">
        <function use="true" point="post_pre_element" language="java" source="LocalCode.java" pattern="**/body"/>
        <function use="true" point="pre_element" language="java" source="LocalCode.java#initCellCount" pattern="**/table"/>
        <function use="true" point="pre_element" language="java" source="LocalCode.java#cellCount" pattern="**/td"/>
        <function use="true" point="post_element" language="java" source="LocalCode.java#doneCellCount" pattern="**/table"/>
        <function use="true" point="pre_text" language="java" source="LocalCode.java#decoText" pattern="**/td"/>
    </addfunc>
    <addfunc use="true" pattern="p100/test.html">
        <function use="true" point="pre_element" language="java" source="/GrayBack.java" pattern="/html/body"/>
    </addfunc>
</root>
    

各要素の説明を以下の表に示します。

パス 説明
addfunc useとpatternを属性として持つことができます。useの値がtrueではない場合は、子要素のfunction定義はすべて無視されます。patternはどのファイルの参照時に子要素が実行されるかを示します。ワイルドカードでの指定ができます。
function use、point、language、source、patternを属性として持つことができます。要素の説明についてはプローブファンクションのページを参照してください。