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