程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Apache Tomcat服務器SSI(用來支持shtml)配置大全

Apache Tomcat服務器SSI(用來支持shtml)配置大全

編輯:關於JAVA
 

最近在配一台Apache Tomcat服務器,其中需要配置SSI功能,我從網上搜集了Apache Tomcat中SSI配置的詳細方法,拿來做個備忘。

一、SSI簡介

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

二、服務器配置屬性

在配置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:同上

三、指令描述

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:創建條件分支語句

>>附件:Apache SSI官方文檔

四、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——客戶使用的浏覽器端的請求結果  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved