鍍金池/ 教程/ Linux/ SSI(服務(wù)器端嵌入)
連接器
JSPs
重寫機(jī)制
CGI
Tomcat Manager
Windows 認(rèn)證
代理支持
虛擬主機(jī)
安全性注意事項(xiàng)
如何在 Maven 中使用 Tomcat 庫
安裝
MBean 描述符
JNDI 資源
類加載機(jī)制
Tomcat Web 應(yīng)用部署
基于 APR 的原生庫
負(fù)載均衡器
安全管理
附加組件
監(jiān)控與管理
Windows 服務(wù)
集群化與會(huì)話復(fù)制
高級(jí) IO 機(jī)制
SSI(服務(wù)器端嵌入)
WebSocket 支持
JDBC 數(shù)據(jù)源
日志機(jī)制
默認(rèn) Servlet
SSL/TLS 配置
Tomcat 的 JDBC 連接池
第一個(gè)應(yīng)用
簡介
Realm 配置

SSI(服務(wù)器端嵌入)

簡介

SSI(服務(wù)器端嵌入)是一組放在 HTML 頁面中的指令,當(dāng)服務(wù)器向客戶端訪問提供這些頁面時(shí),會(huì)解釋執(zhí)行這些指令。它們能為已有的 HTML 頁面添加動(dòng)態(tài)生成內(nèi)容,不需要通過 CGI 程序來或其他的動(dòng)態(tài)技術(shù)來重新改變整個(gè)頁面。

如果利用 Tomcat 作為 HTTP 服務(wù)器并需要 SSI 支持時(shí),可以添加 SSI 支持。通常,如果你運(yùn)行的不是像 Apache 那樣的服務(wù)器,就通過開發(fā)來實(shí)現(xiàn)這種支持。

Tomcat SSI 支持實(shí)現(xiàn)了與 Apache 完全一致的 SSI 指令。關(guān)于使用 SSI 指令的詳細(xì)信息,可參考Apache 的 SSI 簡介。

SSI 支持可以有兩種方式來實(shí)現(xiàn):servlet 或過濾器。你只能利用其中的一種方式來提供 SSI 支持。

基于 servlet 的 SSI 支持是通過 org.apache.catalina.ssi.SSIServlet 類來實(shí)現(xiàn)的。一般來說,這個(gè) servlet 映射至 URL 模式"*.shtml"。

基于過濾器的 SSI 支持則利用 org.apache.catalina.ssi.SSIFilter 類來實(shí)現(xiàn)。一般而言,該過濾器映射至 URL 模式 "*.shtml",但是它也可以被映射至 "*",因?yàn)樗鼤?huì)基于 MIME 類型選擇性地啟用/禁用對(duì) SSI 的處理。初始參數(shù) contentType 允許你將 SSI 處理應(yīng)用于 JSP 頁面、JavaScript 內(nèi)容以及其他內(nèi)容中。

默認(rèn) Tomcat 是不支持 SSI 的。

安裝

警告:SSI 指令可用于執(zhí)行 Tomcat JVM 之外的程序。如果使用 Java SecurityManager,它會(huì)繞過你在 catalina.policy 中配置的安全策略。

為了使用 SSI servlet,要從 $CATALINA_BASE/conf/web.xml 中去除 SSI servlet 及 servlet 映射配置旁邊的 XML 注釋。

為了使用 SSI 過濾器,要從 $CATALINA_BASE/conf/web.xml 中去除 SSI 過濾器及過濾器映射配置旁邊的 XML 注釋。

只有標(biāo)明為 privileged 的上下文才可以使用 SSI 功能(參看 Context 元素的 privileged 屬性)。

Servlet 配置

以下這些 servlet 初始化參數(shù)可以配置 SSI servlet 的行為:

  • buffered 是否應(yīng)緩存該 servlet 的輸出?(0 = false,1 = true)默認(rèn)為 0(false)。
  • debug 調(diào)試 servlet 所記錄信息的調(diào)試細(xì)節(jié)度。默認(rèn)為 0。
  • expires 包含 SSI 指令的頁面失效的秒數(shù)。默認(rèn)行為針對(duì)的是每個(gè)請(qǐng)求所應(yīng)執(zhí)行的所有 SSI 指令。
  • isVirtualWebappRelative “虛擬”的 SSI 指令路徑是否應(yīng)被解釋為相對(duì)于上下文根目錄的相對(duì)路徑(而不是服務(wù)器根目錄)?默認(rèn)為 false。
  • inputEncoding 如果無法從資源本身確定編碼,則應(yīng)指定給 SSI 資源的編碼。默認(rèn)為系統(tǒng)默認(rèn)編碼。
  • outputEncoding 用于 SSI 處理結(jié)果的編碼。默認(rèn)為 UTF-8。
  • allowExec 是否啟用 exec 命令?默認(rèn)為 false。

過濾器配置

以下這些過濾器初始化參數(shù)可以配置 SSI 過濾器的行為:

  • contentType 在應(yīng)用 SSI 處理之前必須匹配的正則表達(dá)式模式。在設(shè)計(jì)自己的模式時(shí),不要忘記 MIME 內(nèi)容類型后面可能會(huì)帶著可選的字符集:“mime/type; charset=set”。默認(rèn)為 “text/x-server-parsed-html(;.*)?”。
  • debug 調(diào)試 servlet 所記錄信息的調(diào)試細(xì)節(jié)度。默認(rèn)為 0。
  • expires 包含 SSI 指令的頁面失效的秒數(shù)。默認(rèn)行為針對(duì)的是每個(gè)請(qǐng)求所應(yīng)執(zhí)行的所有 SSI 指令。
  • isVirtualWebappRelative “虛擬”的 SSI 指令路徑是否應(yīng)被解釋為相對(duì)于上下文根目錄的相對(duì)路徑(而不是服務(wù)器根目錄)?默認(rèn)為 false。
  • allowExec 是否啟用 exec 命令?默認(rèn)為 false。

指令

指令采取 HTML 注釋的形式。在將頁面發(fā)送到客戶端之前,解讀指令,并用所得結(jié)果來替換指令。指令的一般形式為:

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

這些指令包括:

  • config <!--#config timefmt="%B %Y" --> 用于設(shè)定日期格式以及其他一些 SSI 處理的項(xiàng)目。
  • echo <!--#echo var="VARIABLE_NAME" --> 將被變量值所取代。
  • exec 在主機(jī)系統(tǒng)上用于運(yùn)行命令。
  • include <!--#include virtual="file-name" --> 插入內(nèi)容。
  • flastmod <!--#flastmod file="filename.shtml" --> 返回文件最后修改的時(shí)間。
  • fsize <!--#fsize file="filename.shtml" --> 返回文件大小。
  • 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 -->

關(guān)于使用 SSI 指令的詳細(xì)信息,可參考Apache 的 SSI 簡介。

變量

SSI servlet 當(dāng)前能實(shí)現(xiàn)下列變量:

變量名 描述
AUTH_TYPE 用于這些用戶的驗(yàn)證類型:BASIC、FORM,等等。
CONTENT_LENGTH 從表單傳入數(shù)據(jù)的長度(以字節(jié)或字符數(shù))
CONTENT_TYPE 查詢數(shù)據(jù)的 MIME 類型。比如: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 類型列表
HTTP_ACCEPT_ENCODING 客戶端能夠接受的壓縮類型列表
HTTP_ACCEPT_LANGUAGE 客戶端能夠接受的語言類型列表
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)過 \ 轉(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)求的方法:GETPOST,等等
REQUEST_URI 客戶端所請(qǐng)求的最初頁面
SCRIPT_FILENAME 當(dāng)前頁面在服務(wù)器上的位置
SCRIPT_NAME 頁面名稱
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ì)話(如果存在)的令牌