tomcat下使用ssi的問題

在tomcat下使用ssi指令的配置以下:html

  1. 找到conf/context.xml這個文件,使用編輯器打開,在<Context>標籤中加一句privileged="true",變成<Context privileged="true">java

  2. 找到conf/web.xml這個文件,使用編輯器打開,在文件中查找ssi(原文件中本來就有ssi的配置,只不過被註釋了),找到後去掉有關配置ssi的註釋。主要有四個地方:servlet節點、servlet-mapping節點、filter節點、filter-mapping節點web

  3. 僅僅取消註釋以後,有可能會發生亂碼問題,解決辦法是在servlet標籤中增長一段配置:apache

<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>

   4. tomcat這樣配置以後,部署在tomcat之上的站點就能夠使用include指令了。這樣當用戶訪問時,tomcat若是遇到include指令,就會把include指定的靜態頁面文件包含到當前頁面來。但SSI默認須要在*.shtml文件中才能使用,被引用的文件也得是*.shtml,其實咱們也能夠經過配置來讓SSI也支持*.html的文件,須要找到servlet-mapping這個節點,在該節點中添加一段代碼:tomcat

<url-pattern>*.html</url-pattern>

web.xml文件中關於SSI的部分配置成功以後以下:app

<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>false</param-value>
    </init-param>
    <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>
    <load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ssi</servlet-name>
    <url-pattern>*.shtml</url-pattern>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
<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>false</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>ssi</filter-name>
    <url-pattern>*.shtml</url-pattern>
    <url-pattern>*.html</url-pattern>
</filter-mapping>

在使用include指令的時候,有兩種用法,使用file或使用virtual來指定要引用的文件的路徑,以下編輯器

<!--#include file="static/common/header.shtml"-->
或
<!--#include virtual="../static/common/header.shtml"-->

這兩種狀況必定要弄清楚,拿代碼來講。若是使用file,則當前html文件必定要和static文件夾在同一個目錄下,這雖然是一個相對路徑的用法,但卻不能使用「../」來返回上一個目錄,不然頁面會出現以下錯誤:an error occurred while processing this directive。但每每實際中,咱們使用include指令的頁面在其它文件夾下,不跟static一個目錄,甚至不在一個域名下,這種狀況下,就不能使用file,而要使用virtual。virtual是指定一個虛擬路徑,使用網站

<!--#include virtual="/static/common/header.shtml"-->

表示指向網站根目錄下static文件夾,使用this

<!--#include virtual="http://test.xxx.com/static/common/header.shtml"-->

表示指向test.xxx.com站點下的static文件夾, 使用url

<!--#include virtual="../static/common/header.shtml"-->

表示指向當前文件所在文件夾的上一層文件夾中的static。


參考博文:http://www.blogjava.net/pdw2009/archive/2009/03/06/258270.html

                http://blog.csdn.net/5iasp/article/details/7921513

相關文章
相關標籤/搜索