SSI の使い方

目次

はじめに

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

Tomcat内でSSIサポートは、TomcatをHTTPサーバーとして使用し、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の外部のプログラムを実行するために使用される可能性があります。

SSIサーブレットを使用するには、$CATALINA_BASE/conf/web.xml 内のSSIサーブレットとサーブレットマッピングの設定を囲んでいるXMLコメントを削除します。

SSIフィルターを使用するには、$CATALINA_BASE/conf/web.xml 内のSSIフィルターとフィルターマッピングの設定を囲んでいるXMLコメントを削除します。

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

サーブレット設定

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

  • buffered - このサーブレットからの出力はバッファリングされますか? (0=false, 1=true) デフォルトは0 (false)です。
  • debug - このサーブレットによってログに記録されるメッセージのデバッグ詳細レベル。デフォルトは0です。
  • expires - SSIディレクティブを含むページが期限切れになるまでの秒数。デフォルトの動作では、すべてのSSIディレクティブがすべてのリクエストに対して評価されます。
  • isVirtualWebappRelative - 「仮想」SSIディレクティブパスは、サーバールートではなく、コンテキストルートからの相対パスとして解釈されるべきですか?デフォルトはfalseです。
  • inputEncoding - 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 - 「仮想」SSIディレクティブパスは、サーバールートではなく、コンテキストルートからの相対パスとして解釈されるべきですか?デフォルトはfalseです。
  • allowExec - `exec`コマンドは有効ですか?デフォルトはfalseです。

ディレクティブ

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

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

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

  • config - <!--#config errmsg="Error occurred" 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="file-name" --> ホストシステムでコマンドを実行するために使用されます。
  • exec - <!--#exec cgi="file-name" --> これは include virtual ディレクティブと同じように動作し、実際にはどのコマンドも実行しません。
  • include - <!--#include file="file-name" --> は内容を挿入します。パスは、このディレクティブが使用されているドキュメントからの相対パスとして解釈され、コンテキストルートまたはサーバールートからの「仮想」パスではありません。
  • include - <!--#include virtual="file-name" --> は内容を挿入します。パスは、コンテキストルートまたはサーバールートのいずれかからの相対パスである「仮想」パスとして解釈されます(isVirtualWebappRelative パラメーターによって異なります)。
  • flastmod - <!--#flastmod file="filename.shtml" --> ファイルが最後に変更された時刻を返します。パスは、このディレクティブが使用されているドキュメントからの相対パスとして解釈され、コンテキストルートまたはサーバールートからの「仮想」パスではありません。
  • flastmod - <!--#flastmod virtual="filename.shtml" --> ファイルが最後に変更された時刻を返します。パスは、コンテキストルートまたはサーバールートのいずれかからの相対パスである「仮想」パスとして解釈されます(isVirtualWebappRelative パラメーターによって異なります)。
  • fsize - <!--#fsize file="filename.shtml" --> ファイルのサイズを返します。パスは、このディレクティブが使用されているドキュメントからの相対パスとして解釈され、コンテキストルートまたはサーバールートからの「仮想」パスではありません。
  • fsize - <!--#fsize virtual="filename.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 有効な場合、サーバーが使用する共通ゲートウェイインターフェースのリビジョン: 「CGI/1.1」。
HTTP_ACCEPT クライアントが受け入れ可能なMIMEタイプの一覧。
HTTP_ACCEPT_ENCODING クライアントが受け入れ可能な圧縮タイプの一覧。
HTTP_ACCEPT_LANGUAGE クライアントが受け入れ可能な言語の一覧。
HTTP_CONNECTION クライアントからの接続が管理されている方法: 「Close」または「Keep-Alive」。
HTTP_HOST クライアントがリクエストしたウェブサイト。
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 クライアントが元々要求したウェブページ。
SCRIPT_FILENAME サーバー上の現在のウェブページの場所。
SCRIPT_NAME ウェブページの名称。
SERVER_ADDR サーバーのIPアドレス。
SERVER_NAME サーバーのホスト名またはIPアドレス。
SERVER_PORT サーバーがリクエストを受信したポート。
SERVER_PROTOCOL サーバーが使用するプロトコル。例: 「HTTP/1.1」。
SERVER_SOFTWARE クライアントリクエストに応答しているサーバーソフトウェアの名前とバージョン。
UNIQUE_ID セッションが確立されている場合に現在のセッションを識別するために使用されるトークン。