PORT4 > Pasta
 

Mapper

概要

CLSテンプレートファイルから出力結果を生成するコンポーネントは Mapper という名前です。 これは、当初からサーブレットにアクセスするためのURIと、CLSテンプレートファイルをマッピングしていたことに由来します。

使用例はinfo.port4.pasta.cls.filters.IncludeFilterが実際に使っているので、ソースを見るのがよいでしょう。

Root Mapper

Pastaの設定ファイル(pasta.xconf)にmapper-rootという項目があります。 これは、URIとCLSテンプレートファイルのマッピングを設定するものです。 Pastaサーブレットにブラウザでアクセスするときのパスとテンプレートファイルの関係、 あるいはinclude Filterに渡すURIと挿入されるテンプレートの関係はこの設定によります。

pasta.xconfには以下の記述があります。

  <mapper-root id="root" default="true">
    <parameter name="config-file" value="context:/WEB-INF/mapping.xml"/>
  </mapper-root>

これは、マッピングの詳細は/WEB-INF/mapping.xmlに記述されているということです。 このファイルの変更は実行中に検出されるので、mapping.xml修正後にサーブレットコンテナを再起動する必要はありません。

mapping.xmlファイルの内容は、大抵次のようなものです。

<?xml version="1.0" encoding="UTF-8"?>

<mapping mime-type="text/html; charset=Shift_JIS"
         form-encoding="Shift_JIS">

  <mapper pattern="/jsp/*.html" map-to="/jsp/{1}.jsp"
          type="html-forward"/> 
  <mapper pattern="/**.html" map-to="context:/{1}.html"
          type="html-file"/>
  <mapper pattern="/**.xhtml" map-to="context:/{1}.xhtml"
          type="xml-file"/>
  <mapper pattern="/**.act" map-to="context:/{1}.act"
          mime-type=""
          type="xml-actfile"/>
  <mapper pattern="/**.jpg" map-to="context:/{1}.jpg"
          mime-type="image/jpeg"
          type="direct"/>

</mapping>

ルート要素mappingにはデフォルトのMIME型と、フォームのエンコーディングが記述されています。 これは、Pastaサーブレットが返すContent-Typeヘッダの値と、フォームから送られたパラメータをデコードする際のキャラクタ・エンコーディングです。 これらの設定は内部のmapper要素で上書きすることもできます。

以下はmapper要素の各属性の説明です。

pattern 外部からアクセスする時のURIパターンです。
map-to 実際に使用するCLSテンプレートです。 先頭にcontext:とつけるのは、ウェブアプリケーションディレクトリ内のファイルを利用することを表しています。 ただし、type属性で指定するMapperのタイプによっては意味合いが変わることもあります。
type Mapperのタイプです。
mime-type Mapperで上書きするMIME型。省略するとデフォルト値が使われます。
form-encoding Mapperで上書きするフォームのエンコーディング。省略するとデフォルト値が使われます。
internal-only "true"を指定すると、プログラム内からのアクセスに限定し、ウェブブラウザなどで直接ページを表示できないようにします。 プログラム内からのアクセスとは、include Filterによるページの利用や、プログラム内から直接Mapperを呼び出す場合です。

URIパターンの記述方法はCocoon2の WildcardMatcher 形式を採用しているので、こちらも参照してください。

設定例についてはPasta サーブレットの説明も参照してください。