SSI の使い方

目次

はじめに

SSI(Server Side Includes)は、HTMLページに記述され、ページが提供される際にサーバー上で評価されるディレクティブです。これにより、CGIプログラムやその他の動的な技術を使用してページ全体を提供することなく、既存のHTMLページに動的に生成されたコンテンツを追加できます。

Tomcat内では、TomcatをHTTPサーバーとして使用していて、SSIサポートが必要な場合にSSIサポートを追加できます。通常、これはApacheのようなWebサーバーを実行したくない開発中に実行されます。

TomcatのSSIサポートは、Apacheと同じSSIディレクティブを実装しています。SSIディレクティブの使用に関する情報は、 ApacheのSSI入門 を参照してください。

SSIサポートは、サーブレットとフィルターとして利用できます。SSIサポートを提供するには、どちらか一方を使用する必要があり、両方を使用することはできません。

サーブレットベースのSSIサポートは、org.apache.catalina.ssi.SSIServletクラスを使用して実装されます。従来、このサーブレットはURLパターン"*.shtml"にマッピングされています。

フィルターベースのSSIサポートは、org.apache.catalina.ssi.SSIFilterクラスを使用して実装されます。従来、このフィルターはURLパターン"*.shtml"にマッピングされていますが、MIMEタイプに基づいてSSI処理を選択的に有効/無効にするため、"*"にマッピングすることもできます。contentType initパラメーターを使用すると、JSPページ、JavaScript、またはその他の任意のコンテンツにSSI処理を適用できます。

デフォルトでは、TomcatではSSIサポートは無効になっています。

インストール

注意 - SSIディレクティブは、Tomcat JVMの外部でプログラムを実行するために使用できます。Java SecurityManagerを使用している場合、これはcatalina.policyのセキュリティポリシー設定をバイパスします。

SSIサーブレットを使用するには、$CATALINA_BASE/conf/web.xmlにあるSSIサーブレットおよびサーブレットマッピング設定の周囲のXMLコメントを削除します。

SSIフィルターを使用するには、$CATALINA_BASE/conf/web.xmlにあるSSIフィルターおよびフィルターマッピング設定の周囲のXMLコメントを削除します。

特権付きとしてマークされているコンテキストのみがSSI機能を使用できます(Context要素の特権付きプロパティを参照)。

サーブレットの設定

SSIサーブレットの動作を構成するために使用できるいくつかのサーブレット初期化パラメーターがあります。

  • buffered - このサーブレットからの出力はバッファリングされる必要がありますか?(0=false、1=true)デフォルトは0(false)です。
  • debug - このサーブレットによってログに記録されるメッセージのデバッグ詳細レベル。デフォルトは0です。
  • expires - SSIディレクティブを含むページが期限切れになるまでの秒数。デフォルトの動作では、すべてのSSIディレクティブがすべてのリクエストに対して評価されます。
  • isVirtualWebappRelative - "virtual" SSIディレクティブのパスは、サーバーのルートではなく、コンテキストルートからの相対パスとして解釈される必要がありますか?デフォルトはfalseです。
  • inputEncoding - SSIリソース自体から決定できない場合に、SSIリソースに想定されるエンコーディング。デフォルトは、デフォルトのプラットフォームエンコーディングです。
  • outputEncoding - SSI処理の結果に使用されるエンコーディング。デフォルトはUTF-8です。
  • allowExec - execコマンドは有効ですか?デフォルトはfalseです。

フィルターの設定

SSIフィルターの動作を構成するために使用できるいくつかのフィルター初期化パラメーターがあります。

  • contentType - SSI処理が適用される前に一致する必要がある正規表現パターン。独自のパターンを作成する場合は、MIMEコンテンツタイプに、"mime/type; charset=set"の形式でオプションの文字セットが続く場合があることを忘れないでください。 デフォルトは"text/x-server-parsed-html(;.*)?"です。
  • debug - このサーブレットによってログに記録されるメッセージのデバッグ詳細レベル。デフォルトは0です。
  • expires - SSIディレクティブを含むページが期限切れになるまでの秒数。デフォルトの動作では、すべてのSSIディレクティブがすべてのリクエストに対して評価されます。
  • isVirtualWebappRelative - "virtual" SSIディレクティブのパスは、サーバーのルートではなく、コンテキストルートからの相対パスとして解釈される必要がありますか?デフォルトはfalseです。
  • allowExec - execコマンドは有効ですか?デフォルトはfalseです。

ディレクティブ

サーバーサイドインクルードは、SSIサーブレットによって処理されるタイプのHTMLドキュメントにSSIディレクティブを埋め込むことで呼び出されます。ディレクティブはHTMLコメントの形式を取ります。ディレクティブは、ページをクライアントに送信する前に、解釈された結果に置き換えられます。ディレクティブの一般的な形式は次のとおりです。

<!--#directive [param=value] -->

ディレクティブは次のとおりです。

  • config - <!--#config errmsg="エラーが発生しました" sizefmt="abbrev" timefmt="%B %Y" --> SSIエラーメッセージ、SSIによって処理される日付とファイルサイズの形式を設定するために使用します。
    すべてオプションですが、少なくとも1つは使用する必要があります。利用可能なオプションは次のとおりです。
    errmsg - SSIエラーに使用されるエラーメッセージ
    sizefmt - fsizeディレクティブでサイズに使用される形式
    timefmt - flastmodディレクティブでタイムスタンプに使用される形式
  • echo - <!--#echo var="VARIABLE_NAME" encoding="entity" -->は変数の値に置き換えられます。
    オプションのencodingパラメーターは、使用するエンコーディングのタイプを指定します。有効な値は、entity(デフォルト)、url、またはnoneです。注:entity以外のエンコーディングを使用すると、セキュリティ上の問題につながる可能性があります。
  • exec - <!--#exec cmd="ファイル名" --> ホストシステムでコマンドを実行するために使用されます。
  • exec - <!--#exec cgi="ファイル名" --> これは、include virtualディレクティブと同じように機能し、実際にはコマンドを実行しません。
  • include - <!--#include file="ファイル名" --> 内容を挿入します。パスは、このディレクティブが使用されているドキュメントからの相対パスとして解釈され、コンテキストルートまたはサーバールートからの相対パスである「仮想」パスではありません。
  • include - <!--#include virtual="ファイル名" --> 内容を挿入します。パスは、(isVirtualWebappRelativeパラメーターに応じて)コンテキストルートまたはサーバールートからの相対パスである「仮想」パスとして解釈されます。
  • flastmod - <!--#flastmod file="ファイル名.shtml" --> ファイルが最後に変更された時刻を返します。パスは、このディレクティブが使用されているドキュメントからの相対パスとして解釈され、コンテキストルートまたはサーバールートからの相対パスである「仮想」パスではありません。
  • flastmod - <!--#flastmod virtual="ファイル名.shtml" --> ファイルが最後に変更された時刻を返します。パスは、(isVirtualWebappRelativeパラメーターに応じて)コンテキストルートまたはサーバールートからの相対パスである「仮想」パスとして解釈されます。
  • fsize - <!--#fsize file="ファイル名.shtml" --> ファイルのサイズを返します。パスは、このディレクティブが使用されているドキュメントからの相対パスとして解釈され、コンテキストルートまたはサーバールートからの相対パスである「仮想」パスではありません。
  • fsize - <!--#fsize virtual="ファイル名.shtml" --> ファイルのサイズを返します。パスは、(isVirtualWebappRelativeパラメーターに応じて)コンテキストルートまたはサーバールートからの相対パスである「仮想」パスとして解釈されます。
  • printenv - <!--#printenv --> 定義されているすべての変数のリストを返します。
  • set - <!--#set var="foo" value="Bar" --> は、ユーザー定義の変数に値を割り当てるために使用されます。
  • if elif endif else - 条件付きセクションを作成するために使用されます。例えば
    <!--#config timefmt="%A" -->
    <!--#if expr="$DATE_LOCAL = /Monday/" -->
    <p>Meeting at 10:00 on Mondays</p>
    <!--#elif expr="$DATE_LOCAL = /Friday/" -->
    <p>Turn in your time card</p>
    <!--#else -->
    <p>Yoga class at noon.</p>
    <!--#endif -->

SSIディレクティブの使用に関する詳細については、 ApacheのSSI入門 を参照してください。

変数

SSI変数は、jakarta.servlet.ServletRequestオブジェクトのリクエスト属性を介して実装され、SSIサーブレットに限定されません。名前が「java.」、「javax.」、「sun」、または「org.apache.catalina.ssi.SSIMediator.」で始まる変数は予約されており、使用できません。

SSIサーブレットは現在、次の変数を実装しています。

変数名 説明
AUTH_TYPE このユーザーに使用された認証のタイプ:BASIC、FORMなど。
CONTENT_LENGTH フォームから渡されたデータの長さ(バイト単位または文字数)。
CONTENT_TYPE 「text/html」などのクエリデータのMIMEタイプ。
DATE_GMT GMTの現在の日付と時刻
DATE_LOCAL ローカルタイムゾーンの現在の日付と時刻
DOCUMENT_NAME 現在のファイル
DOCUMENT_URI ファイルへの仮想パス
GATEWAY_INTERFACE サーバーが有効になっている場合に使用するCommon Gateway Interfaceのリビジョン:「CGI/1.1」。
HTTP_ACCEPT クライアントが受け入れることができるMIMEタイプのリスト。
HTTP_ACCEPT_ENCODING クライアントが受け入れることができる圧縮タイプのリスト。
HTTP_ACCEPT_LANGUAGE クライアントが受け入れることができる言語のリスト。
HTTP_CONNECTION クライアントからの接続が管理されている方法:「Close」または「Keep-Alive」。
HTTP_HOST クライアントが要求したWebサイト。
HTTP_REFERER クライアントがリンクしたドキュメントのURL。
HTTP_USER_AGENT クライアントがリクエストを発行するために使用しているブラウザー。
LAST_MODIFIED 現在のファイルの最終変更日時
PATH_INFO サーブレットに渡される追加のパス情報。
PATH_TRANSLATED 変数PATH_INFOによって指定されたパスの変換されたバージョン。
QUERY_STRING URLの「?」に続くクエリ文字列。
QUERY_STRING_UNESCAPED すべてのシェルメタキャラクターが "\" でエスケープされたデコードされていないクエリ文字列
REMOTE_ADDR リクエストを行っているユーザーのリモートIPアドレス。
REMOTE_HOST リクエストを行っているユーザーのリモートホスト名。
REMOTE_PORT リクエストを行っているユーザーのリモートIPアドレスのポート番号。
REMOTE_USER ユーザーの認証された名前。
REQUEST_METHOD 情報要求が発行された方法:「GET」、「POST」など。
REQUEST_URI クライアントが最初に要求したWebページ。
SCRIPT_FILENAME サーバー上の現在のWebページの場所。
SCRIPT_NAME Webページの名前。
SERVER_ADDR サーバーのIPアドレス。
SERVER_NAME サーバーのホスト名またはIPアドレス。
SERVER_PORT サーバーがリクエストを受信したポート。
SERVER_PROTOCOL サーバーが使用するプロトコル。例:「HTTP/1.1」。
SERVER_SOFTWARE クライアントリクエストに応答しているサーバーソフトウェアの名前とバージョン。
UNIQUE_ID セッションが確立されている場合に、現在のセッションを識別するために使用されるトークン。