SSI(服務(wù)器端嵌入)是一組放在 HTML 頁(yè)面中的指令,當(dāng)服務(wù)器向客戶端訪問(wèn)提供這些頁(yè)面時(shí),會(huì)解釋執(zhí)行這些指令。它們能為已有的 HTML 頁(yè)面添加動(dòng)態(tài)生成內(nèi)容,不需要通過(guò) CGI 程序來(lái)或其他的動(dòng)態(tài)技術(shù)來(lái)重新改變整個(gè)頁(yè)面。
如果利用 Tomcat 作為 HTTP 服務(wù)器并需要 SSI 支持時(shí),可以添加 SSI 支持。通常,如果你運(yùn)行的不是像 Apache 那樣的服務(wù)器,就通過(guò)開(kāi)發(fā)來(lái)實(shí)現(xiàn)這種支持。
Tomcat SSI 支持實(shí)現(xiàn)了與 Apache 完全一致的 SSI 指令。關(guān)于使用 SSI 指令的詳細(xì)信息,可參考Apache 的 SSI 簡(jiǎn)介。
SSI 支持可以有兩種方式來(lái)實(shí)現(xiàn):servlet 或過(guò)濾器。你只能利用其中的一種方式來(lái)提供 SSI 支持。
基于 servlet 的 SSI 支持是通過(guò) org.apache.catalina.ssi.SSIServlet
類(lèi)來(lái)實(shí)現(xiàn)的。一般來(lái)說(shuō),這個(gè) servlet 映射至 URL 模式"*.shtml"。
基于過(guò)濾器的 SSI 支持則利用 org.apache.catalina.ssi.SSIFilter
類(lèi)來(lái)實(shí)現(xiàn)。一般而言,該過(guò)濾器映射至 URL 模式 "*.shtml",但是它也可以被映射至 "*",因?yàn)樗鼤?huì)基于 MIME 類(lèi)型選擇性地啟用/禁用對(duì) SSI 的處理。初始參數(shù) contentType
允許你將 SSI 處理應(yīng)用于 JSP 頁(yè)面、JavaScript 內(nèi)容以及其他內(nèi)容中。
默認(rèn) Tomcat 是不支持 SSI 的。
警告:SSI 指令可用于執(zhí)行 Tomcat JVM 之外的程序。如果使用 Java SecurityManager,它會(huì)繞過(guò)你在 catalina.policy
中配置的安全策略。
為了使用 SSI servlet,要從 $CATALINA_BASE/conf/web.xml
中去除 SSI servlet 及 servlet 映射配置旁邊的 XML 注釋。
為了使用 SSI 過(guò)濾器,要從 $CATALINA_BASE/conf/web.xml
中去除 SSI 過(guò)濾器及過(guò)濾器映射配置旁邊的 XML 注釋。
只有標(biāo)明為 privileged 的上下文才可以使用 SSI 功能(參看 Context 元素的 privileged 屬性)。
以下這些 servlet 初始化參數(shù)可以配置 SSI servlet 的行為:
exec
命令?默認(rèn)為 false。以下這些過(guò)濾器初始化參數(shù)可以配置 SSI 過(guò)濾器的行為:
exec
命令?默認(rèn)為 false。指令采取 HTML 注釋的形式。在將頁(yè)面發(fā)送到客戶端之前,解讀指令,并用所得結(jié)果來(lái)替換指令。指令的一般形式為:
<!--#directive [parm=value] -->
這些指令包括:
<!--#config timefmt="%B %Y" -->
用于設(shè)定日期格式以及其他一些 SSI 處理的項(xiàng)目。<!--#echo var="VARIABLE_NAME" -->
將被變量值所取代。<!--#include virtual="file-name" -->
插入內(nèi)容。<!--#flastmod file="filename.shtml" -->
返回文件最后修改的時(shí)間。<!--#fsize file="filename.shtml" -->
返回文件大小。<!--#printenv -->
返回所有定義變量的列表。<!--#set var="foo" value="Bar" -->
為用戶自定義變量賦值。<!--#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 -->
關(guān)于使用 SSI 指令的詳細(xì)信息,可參考Apache 的 SSI 簡(jiǎn)介。
SSI servlet 當(dāng)前能實(shí)現(xiàn)下列變量:
變量名 | 描述 |
---|---|
AUTH_TYPE | 用于這些用戶的驗(yàn)證類(lèi)型:BASIC、FORM,等等。 |
CONTENT_LENGTH | 從表單傳入數(shù)據(jù)的長(zhǎng)度(以字節(jié)或字符數(shù)) |
CONTENT_TYPE | 查詢數(shù)據(jù)的 MIME 類(lèi)型。比如:text/html |
DATE_GMT | 以格林威治標(biāo)準(zhǔn)時(shí)間(GMT)表示的當(dāng)前時(shí)間與日期 |
DATE_LOCAL | 以本地時(shí)區(qū)表示的當(dāng)前日期與時(shí)間 |
DOCUMENT_NAME | 當(dāng)前文件名 |
DOCUMENT_URI | 文件的虛擬路徑 |
GATEWAY_INTERFACE | 服務(wù)器所使用的通用網(wǎng)關(guān)接口(CGI)的修訂版本,比如:CGI/1.1 |
HTTP_ACCEPT | 客戶端能夠接受的 MIME 類(lèi)型列表 |
HTTP_ACCEPT_ENCODING | 客戶端能夠接受的壓縮類(lèi)型列表 |
HTTP_ACCEPT_LANGUAGE | 客戶端能夠接受的語(yǔ)言類(lèi)型列表 |
HTTP_CONNECTION | 如何管理與客戶端的連接:"Close" 或 "Keep-Alive" |
HTTP_HOST | 客戶端所請(qǐng)求的網(wǎng)站 |
HTTP_REFERER | 客戶端鏈接的文檔的 URL |
HTTP_USER_AGENT | 客戶端用于處理請(qǐng)求的瀏覽器 |
LAST_MODIFIED | 當(dāng)前文檔的最后修改日期與時(shí)間 |
PATH_INFO | 傳入 servlet 的額外路徑信息 |
PATH_TRANSLATED | 變量 PATH_INFO 所提供路徑的轉(zhuǎn)換版本 |
QUERY_STRING | 在 URL 中,跟在 ?后面的查詢字符串 |
QUERY_STRING_UNESCAPED | 帶有所有經(jīng)過(guò) \ 轉(zhuǎn)義的shell 元字符的未解碼查詢字符串 |
REMOTE_ADDR | 用戶作出請(qǐng)求的遠(yuǎn)端 IP 地址 |
REMOTE_HOST | 用戶作出請(qǐng)求的遠(yuǎn)端主機(jī)名 |
REMOTE_PORT | 用戶作出請(qǐng)求的遠(yuǎn)端 IP 地址的端口號(hào) |
REMOTE_USER | 用戶的認(rèn)證名稱 |
REQUEST_METHOD | 處理信息請(qǐng)求的方法:GET 、POST ,等等 |
REQUEST_URI | 客戶端所請(qǐng)求的最初頁(yè)面 |
SCRIPT_FILENAME | 當(dāng)前頁(yè)面在服務(wù)器上的位置 |
SCRIPT_NAME | 頁(yè)面名稱 |
SERVER_ADDR | 服務(wù)器的 IP 地址 |
SERVER_NAME | 服務(wù)器的主機(jī)名或 IP 地址 |
SERVER_PORT | 服務(wù)器接收請(qǐng)求的端口 |
SERVER_PROTOCOL | 服務(wù)器所使用的協(xié)議,比如:HTTP/1.1 |
SERVER_SOFTWARE | 應(yīng)答客戶端請(qǐng)求的服務(wù)器軟件的名稱與版本號(hào) |
UNIQUE_ID | 用于識(shí)別當(dāng)前會(huì)話(如果存在)的令牌 |
更多建議: