1 Tomcat6 中配置ssi
1.1 导入servlets-ssi-5.0.16.jar到tomcat安装目录/lib下,网上说tomcat自带ssi包,但我没有找到
1.2 在tomcat安装目录/conf/web.xml中将ssi的servlet 和servlet-mapping的注释标签去掉
1.3 在ssi的servlet配置中增加下边的标签,这部分是测试的重点
<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>
1.4 在tomcat安装目录/conf/context.xml中设置红色部分:
<Context privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
这样tomcat下的ssi就配置成功了!
2 ssi乱码测试
2.1 测试环境
tomcat-6.0.33
jdk1.6.0_23
servlets-ssi-5.0.16.jar
2.2 测试文件
index.shtml
<!DOCTYPEhtml>
<html>
<head>
<meta http-equiv="content-type"content="text/html; charset=utf-8"/>
<title>index.html</title>
<meta http-equiv="keywords"content="keyword1,keyword2,keyword3"/>
<meta http-equiv="description"content="this is my page"/>
</head>
<body>
This is my HTML page. <br>
包含页面<br/>
<!--#include file="content.html"-->
</body>
</html>
content.html
<h1>被包含页面content.html</h1>
2.3 测试结果,箭头经过的地方表示使用相应的编码
2.3.1 index.shtml文件是utf-8编码,charset=utf-8,content.html文件是utf-8编码
2.3.2 index.shtml文件是utf-8编码,charset=gb2312,content.html文件是ansi编码
2.3.3 index.shtml文件是utf-8编码,charset=utf-8,content.html文件是ansi编码
2.3.4 index.shtml文件是utf-8编码,charset=gb2312,content.html文件是utf-8编码
2.4 测试结论
本文只对index.shtml的utf-8编码情况进行测试,没有对index.shtml的ansi编码情况进行测试。因为开发中文件多使用utf-8编码,所以目前的结果还是有意义的。
基于以上四个测试结果,可以看出页面正常显示的关键是以下四个编码要一致,当前测试环境下outputEncoding不影响页面正常显示,但是为了安全起见还是设置成一致的编码为好。
charset=
content.html文件编码
inputEncoding
基于2.3.3和2.3.4的测试结果可以看出:
charset和inputEncoding编码一致时,index.shtml内容正常
content.html和inputEncoding编码一致时,content.html内容正常