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 | セッションが確立されている場合に、現在のセッションを識別するために使用されるトークン。 |