SSI 在TOMCAT5與TOMCAT6中的配置 (轉)

1.簡介:html

SSI全稱(Server Side Includes)是在HTML靜態頁面中使用的指令,當頁面在服務端執行的時候是能夠進行服務端解析的。這種方式可讓咱們在存在的HTML頁面裏面分 塊動態生成內容而不在整個執行了CGI等服務端技術的基礎之上進行動態頁面服務。在返回請求的頁面(包含SSI指令)前,服務器會處理這些指令,並用處理 的結果替換指令,而後把頁面返回。咱們使用Tomcat做爲Http服務器的時候,咱們須要使用SSI能夠在Tomcat添加對SSI的支持。
Tomcat服務器的SSI支持的實現方式和Apache裏面的SSI指令同樣,在Tomcat裏面實現 SSI支持使用的是一個 Servlet和一個Filter(Servlet和Filter的基本信息參考JSP教程),咱們可使用其中一種方式來進行SSI支持的配置,可是不 須要兩個同時配置,同時配置是否會產生衝突我不太清楚,通常狀況下配置一個就能夠了。
實現SSI支持的Servlet實現使用了org.apache.catalina.ssi.SSIServlet,另外須要在Servlet的路徑解析裏面添加映射規則「*.shtml」。
實現SSI支持的Filter使用了 org.apache.calalina.ssi.SSIFilter。另外,在Filter路徑解析 裏面也須要添加映射規則「*.shtml」,並且在Filter配置的時候須要在映射規則裏面添加可以執行的mime type,contentType的初始化參數容許你執行服務器下邊的資源。在Tomcat裏面默認是禁用了SSI的。
注意:SSI指令執行 Tomcat外部的JVM,若是咱們使用Java的安全管理器須要在 calalina.policy文件裏面進行配置。若要使用SSI Servlet和SSI Filter,直接在服務器的路徑$CATALINA_BASE/conf/web.xml文件裏面將SSI的註釋去掉。須要注意的是在Tomcat服務 器裏面僅僅只有標記了privileged的Context可使用SSI功能。(*:當privileged設置爲true的時候,才容許Tomcat 的Web應用使用容器內的Servlet,Tomcat的文檔裏面講了使用的lib的域,每一個應用程序若是不設置這個屬性,是不能訪問容器內的 Servlet的,這裏應該指代的是全局的Servlet)
不然這裏會遇到異常:
java.lang.SecurityException: Filter of class org.apache.catalina.ssi.SSIFilter(SSIServlet)is privileged and cannot be loaded by this web application
2.服務器配置屬性:
在配置SSI Servlet的時候須要用到的參數(init parameters)以下:
buffered:是須要將輸入保存到緩衝區(0=false,1=true)默認是0(false)
debue:配置調試日誌的記錄級別,默認0;
expires:SSI包含某個頁面的超時配置,默認行爲是全部的SSI指令在每一次請求中執行
isVirtualWebappRelative:是針對Tomcat Context的根目錄(虛擬目錄)進行相對路徑解析仍是針對Tomcat的服務器目錄進行相對路徑解析(0=false,1=true)默認是0,不使用虛擬目錄。
inputEncoding:若是資源不是自身的,資源來自於容器外部,能夠針對外部資源進行編碼的設置,以什麼變法方式輸入資源,默認使用的是資源所在平臺使用的編碼。
outputEncoding:SSI執行結果輸出的編碼方式,默認是UTF-8的。
配置SSI Filter的時候須要使用如下參數(init paramters):
contextType:配置一個能夠匹配的正則表達式規則提供給SSI執 行使用,若自定義本身的匹配規 則,須要在mime 類型裏面配置下邊的可選項:在form裏面設置「mime/type;charset=set」默認的是「text/x-server-parsed- html(;.*)?」
debug:同上
expires:同上
isVirtualWebappRelative:同上
3.指令描述:
SSI是被HTML文檔內須要進行處理的包含部分的SSI Servlet調用的。這些指令是HTML文檔的註釋形式,這些指令在將內容發送到客戶端以前進行內容的替換。標準格式以下:
<!--#directive [parm=value] -->
這些指令包括:
config:設置日期格式一塊兒被SSI處理的其餘數據 (<!--#config timefmt="%B %Y" -->)
echo:將會被變量的值替換掉 (<!--#echo var="VARIABLE_NAEM" -->)
exec:用來執行服務器端的命令
include:包含某些內容 (<!--#include virtual="file-name" -->)
flastmod:返回某個文件最後一次修改的時間 (<!--#flastmod file="filename.shtml" -->)
fsize:返回某個文件的大小 (<!--#fzie file="filename.shtml" -->)
printenv:返回全部定義的變量 (<!--#printenv -->)
set:用來爲定義的變量賦值 (<!--#set var="foo" value="Bar" -->)
if elif endif else:建立條件分支語句
4.SSI Servlet裏面的變量以下:
AUTH_TYPE——針對用戶的認證受權方式:BASIC,FORM,etc.和Tomcat內的認證方式同步
CONTENT_LENGTH——從服務器表單傳過來的數據長度,字符數目或者數據的字節數
CONTENT_TYPE——服務器訪問呢數據的MIME類型,好比「text/html」
DATE_GMT——目前的時間格式方式使用GMT
DATE_LOCAL——目前的時間格式方式設置成爲本地時間格式
DOCUMENT_NAME——當前上下文環境的文件地址
DOCUMENT_URI——虛擬路徑定義的文件地址
GATEWAY_INTERFACE——CGI的版本定義:「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——訪問此Servlet的路徑信息
PATH_TRANSLATED——PATH_INFO提供的translated版本
QUERY_STRING——在URL地址?以後的請求參數列表
QUERY_STRING_UNESCAPED——沒有通過編碼過的請求參數
REMOTE_ADDR——用戶請求客戶端IP地址
REMOTE_HOST——用戶發送請求的主機名
REMOTE_PORT——用戶發送請求的端口號
REMOTE_USER——認證受權須要的發送請求的用戶名
REQUEST_METHOD——請求使用方法:GET或者POST
REQUEST_URI——客戶端原來訪問請求的Web頁面的URI地址
SCRIPT_FILENAME——在服務器上當前頁面的地址
SCRIPT_NAME——當前頁面的名稱
SERVER_ADDR——服務器所在的IP地址
SERVER_NAME——服務器的主機名或者IP地址
SERVER_PORT——服務器接受請求的端口號
SERVER_PROTOCOL——服務器處理請求的協議:「HTTP/1.1」
SERVER_SOFTWARE——服務器響應客戶端請求的名稱和版本號
UNIQUE_ID——一旦建立連接事後每一次會話由服務器分配的惟一會話標識(是否是SessionID?我不敢確定,由於沒有作過驗證,有多是有可能不是,不過有一點,此屬性和直接和會話相關的。)
5.配置過程:
1).先保證Tomcat能夠運行,即可以正常啓動
2).(5.x版本)服務器根目錄下邊 $TOMCAT_HOME (或者 $CATALINA_HOME)/server/lib/ 目錄下邊有一個文件:
servlets-ssi.renametojar ,將這個文件名改名爲一個jar後綴,固然最方便的方法是直接改掉文件後綴,按照Tomcat掃描jar路徑類的原理來說,直接改名爲jar應該也是能夠的,不過我沒嘗試過,通常網上最經常使用的方法是改爲: servlets-ssi.jar 。(6.x版本)服務器不須要去尋找jar文件了,直接進入下一步操做均可以。
3).找到文件: $TOMCAT_HOME(或者$CATALINA_HOME)/conf/web.xml ,這裏面不須要咱們本身寫入SSI Servlet和SSI Filter的配置,首先咱們要選擇使用哪一種方式來配置:
Servlet配置:
在這個文件裏面,找到如下注釋代碼段,將註釋代碼段去掉:
Servlet配置——
<!--
    <servlet>
        <servlet-name>ssi</servlet-name>
        <servlet-class>
          org.apache.catalina.ssi.SSIServlet
        </servlet-class>
        <init-param>
          <param-name>buffered</param-name>
          <param-value>1</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
        <load-on-startup>4</load-on-startup>
    </servlet>
-->
ServletMapping配置——
<!--
    <servlet-mapping>
        <servlet-name>ssi</servlet-name>
        <url-pattern>*.shtml</url-pattern>
    </servlet-mapping>
-->
Filter配置:
Filter的相關配置——
<!--
    <filter>
        <filter-name>ssi</filter-name>
        <filter-class>
          org.apache.catalina.ssi.SSIFilter
        </filter-class>
        <init-param>
          <param-name>contentType</param-name>
          <param-value>text/x-server-parsed-html(;.*)?</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
    </filter>
-->
FilterMapping相關配置——
<!--
    <filter-mapping>
        <filter-name>ssi</filter-name>
        <url-pattern>*.shtml</url-pattern>
    </filter-mapping>
-->
只是Filter配置裏面還須要取消另一個註釋,下邊的MIME TYPE的服務器支持相關注釋
<!--
    <mime-mapping>
        <extension>shtml</extension>
        <mime-type>text/x-server-parsed-html</mime-type>
    </mime-mapping>
-->
上邊的註釋取消事後,配置就基本好了,在Tomcat 5.x的版本中配置的時候,到這個地步就結束了,可是在Tomcat 6.x版本中可能還會出現下邊的異常:
java.lang.SecurityException: Filter of class org.apache.catalina.ssi.SSIFilter(SSIServlet) is privileged and cannot be loaded by this web application
4).因此正對這點6.x還有一個步驟,在$TOMCAT_HOME(或 者$CATALINA_HOME)/conf/context.xml 文件中在<Context>結點添加一個屬性privileged="true",而後再啓動就不會拋出上邊的異常了。
5).若要解決亂碼問題,根據上邊文檔須要修改SSI中的啓動參數:添加以下代碼:
<init-param>
        <param-name>inputEncoding</param-name>
        <param-value>utf-8</param-value>
</init-param>
<init-param>
        <param-name>outputEncoding</param-name>
        <param-value>utf-8</param-value>
</init-param>
相關文章
相關標籤/搜索