应用了sitemesh装饰模板后,所有html页面,只有有中文都会出现乱码问题,导致页面加载超级慢,或直接就报错了。
郁 闷了很久,开始不知道是sitemesh搞的鬼,测试了n多都不知道是什么原因,后来搜索html乱码才知道是sitemesh引起的。
于 是搜索相关资料,综合了几个设置终于解决了,分享下解决方法。
有几个地方要改的:
1.排除不装饰的html文件目录
<!-- 在excludes元素下指定的页面将不会由SiteMesh来装饰 -->
<excludes>
?? <pattern>/index.jsp</pattern>
?? <pattern>/coos/*.*</pattern>
?? <pattern>/scripts/*.*</pattern>
</excludes>
2. 在web.xml里面加入一个filter
(1)到你apache-tomcat-6.0.14\webapps\examples \WEB-INF\classes\filters下找到SetCharacterEncodingFilter.java这个文件。
(2)把 SetCharacterEncodingFilter.java放到你的工程代码中。
(3)设置web.xml
??? <filter>
???? <filter-name>Set Character Encoding </filter-name>
???? <filter-class>你的包.SetCharacterEncodingFilter </filter-class>
???? <init-param>
?????? <param-name>encoding </param-name>
?????? <param-value>UTF-8 </param-value>
???? </init-param>
???? <init-param>
?????? <param-name>ignore </param-name>
?????? <param-value>true </param-value>
???? </init-param>
?? </filter>
?? <filter-mapping>
???? <filter-name>Set Character Encoding </filter-name>
???? <servlet-name>action </servlet-name>
?? </filter-mapping>
3.在 struts.properties 添加:
struts.locale=zh_CN
struts.i18n.encoding=UTF-8
4.在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher之前,因为要先调 整字符集,然后进入Action。按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher
总之,所有涉及到编码的地方都改成UTF-8吧
jsp
的 可以根据<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>来识别编码,HTML的却不行,而且没有好的解决方案。
附网上不完美的解决方案:
静态html在sitemesh中乱码的解决方法。
前提条件:sitemesh的decorator的编码全部用UTF- 8,使用SetCharacterEncodingFilter把request的encoding也
设置成UTF-8
问题 1、decorator中的内容出现乱码。
原因:
解决方法:改进SetCharacterEncodingFilter,使它对 response也设置encoding为UTF-8
问题2、被修饰的html内容出现乱码。
原因:sitemesh根据 html的contenttype(例如:text/html;charset=utf-8)来决定html文件的encoding,
如果 contenttype是像(text/html)这样的形式,sitemesh就无法知道html的encoding,这时sitemesh就
使 用DEFAULT_ENCODING即System.getProperty("file.encoding"),在jetty中正是后面那样,估计 tomcat也是这样。
解决方法:使html的encoding和 System.getProperty("file.encoding")相同。
??? 1、启动jetty时将java系统变量file.encoding设置为UTF-8,html的编码也用UTF-8.(推荐)
注:即 使是编码都是UTF-8,只要没排除装饰还是不行。
详细解决方案
sitemesh装饰后的html中文乱码解决办法
热度:139 发布时间:2012-10-14 14:55:08.0
相关解决方案
- jquery,二维数组取值。解决办法
- 求架构方案:一个日均访问量50万的物流筛单系统的技术架构方案?解决办法
- 关于 if(rs.getString("").trim().equals(""))解决办法
- 诡异:代码执行到哪去了?解决办法
- 关于 Spring 声明式事务管理!解决办法
- 访问Tomcat的url的时候如何自动调用index.html
- 求《Java Web 程序设计与项目实践》解决办法
- The requested resource (/webtest/servlet/hello.html) is not availabl 帮忙解决解决方法
- 加载Hibernate的报错了,求解。解决办法
- JSP 页面乱码 页面起首已设置 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
- B/S方面,java比PHP更好吗?解决办法
- struts2 +freemark+sitemesh css 失灵
- 算法求解String str = "A,B,C,A,B,A"解决办法
- html js不运行有关问题
- 这段代码还能不能优化?解决办法
- JAVA读取一个文件,非得搞那么麻烦么?解决办法
- 办公自动化系统——议程管理(用jsp+servlet+js+html+jdbc)怎样实现
- 求帮忙。解决办法
- POI导入excel数据(数据有父子关系)解决办法
- IE不支持JQuery吗?解决办法
- <html:text>property的有关问题
- 关于<html:text>相关的有关问题
- 求WebService的解决方案!解决办法
- 关于ibatis的<isNotEmpty>解决办法
- hibernate获取SessionFactory失败 咋办?解决办法
- 关于<s:iterator>遍历数据。解决办法
- ASP技术升级选择.(.net或Java)解决办法
- jsp页面提交到action,中文乱码(服务器Tomcat5.0)解决办法
- 求按钮上传~解决办法
- 在项目中META INF下创建context.xml获得mysql数据库连接池(急)解决办法