在Tomcat中实现SSI,有两种方式:Servlet和Filter。
实现SSI支持的Servlet实现使用了org.apache.catalina.ssi.SSIServlet,另外需要在Servlet的路径解析里面添加映射规则“*.shtml”。
实现SSI支持的Filter使用了org.apache.calalina.ssi.SSIFilter。另外,在Filter路径解析里面也需要添加映射规则“*.shtml”,而且在Filter配置的时候需要在映射规则里面添加能够执行的mimetype,contentType的初始化参数允许你执行服务器下边的资源。在Tomcat里面默认是禁用了SSI的。
Servlet配置:
(1)修改tomcat根目录下的conf文件夹中的context.xml,修改如下:
<Context privileged="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
即在Context 中增加privileged="true"
(2)修改tomcat根目录下的conf文件夹中的web.xml,将SSI的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>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>
<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>
<load-on-startup>4</load-on-startup>
</servlet>
取消SSI Servlet的mapping注释,增加*.html,因为我们是在html中引入shtml的,如果不配置*.html,则tomcat不会处理html中的ssi指令
<servlet-mapping>
<servlet-name>ssi</servlet-name>
<url-pattern>*.shtml</url-pattern>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
Filter配置:
(1)修改tomcat根目录下的conf文件夹中的context.xml,修改如下:
<Context privileged="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
即在Context 中增加privileged="true"
(2)修改tomcat根目录下的conf文件夹中的web.xml,将SSI的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>
.若要解决乱码问题,根据上边文档需要修改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>
参考:http://bsr1983.iteye.com/blog/2253885;