`

sitemesh装饰后的html中文乱码解决方法

阅读更多

应用了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,只要没排除装饰还是不行。

分享到:
评论

相关推荐

    sitemesh2 集成velocity 装饰页面乱码

    本案例涉及的是将sitemesh2与velocity框架进行集成,以实现页面装饰功能。sitemesh是一款开源的Web页面布局和装饰框架,而velocity则是一个轻量级的Java模板引擎,用于生成动态网页内容。下面我们将深入探讨这个集成...

    sitemesh装饰器入门

    **Sitemesh装饰器入门** Sitemesh 是一个开源的 Web 应用程序框架,它主要用来帮助开发者实现页面布局和装饰功能。Sitemesh 的核心概念是“装饰器”,这个概念源自于软件设计模式中的装饰者模式。通过使用 Sitemesh...

    页面装饰器(sitemesh)实例源代码

    5. **运行与测试**:在MyEclipse中部署Openfire项目,启动服务器后,访问任意页面,如果页面被正确装饰,说明Sitemesh已经成功集成。 在提供的`demo`文件中,可能包含了具体的装饰模板、Openfire的配置示例以及部署...

    sitemesh

    **Sitemesh** 是一个广泛使用的开源Web应用框架,它主要功能是提供页面布局和装饰功能,用于统一网站的外观和感觉。Sitemesh通过在Web应用中引入“母版”(Master Page)的概念,使得开发者可以轻松地创建一致性的...

    SiteMesh

    SiteMesh 是一个开源的Web应用程序框架,主要用于帮助开发者实现页面布局和装饰功能。它通过拦截HTTP请求,将页面内容与布局模板相结合,从而提供了一种简单有效的方式来管理和控制Web应用的外观和感觉。在Web开发中...

    siteMesh demo+文档

    SiteMesh 是一个开源的Web应用程序布局和装饰框架,主要用于解决Web应用中的页面布局问题。它通过拦截HTTP请求,将页面内容与预定义的布局模板相结合,实现统一的页面头部、底部和侧边栏等元素,从而提高网站的整体...

    sitemesh框架简单例子

    Sitemesh是一款强大的Web页面布局和装饰框架,它主要用于帮助开发者实现网站的统一外观和感觉。这个框架的主要功能是将页面的主体内容与页眉、页脚、侧边栏等通用部分分离,使得在大量网页中保持一致的设计风格变得...

    SiteMesh教程及SiteMesh官方文档翻译

    2. **使用SiteMesh**:集成SiteMesh后,再次进行性能测试。 3. **负载测试**:模拟不同并发用户数量,观察系统的响应时间。 **实验结果** - 在低并发情况下,使用SiteMesh对性能影响不大。 - 随着并发用户数的增加...

    java sitemesh 页面框架

    Java Sitemesh是一个开源的页面布局和装饰框架,它的主要目标是帮助开发者统一网站的外观和感觉,提高代码复用性,并简化页面的复杂性。Sitemesh通过将页面分为内容区域和装饰模板来实现这一目标,使得开发者可以...

    sitemesh-3.0.1.jar

    sitemesh 装饰页面技术.

    SiteMesh教程.pdf

    - Decorator Filter:这是SiteMesh的核心组件,负责拦截请求、传递页面内容给装饰器,并将组合后的页面返回给客户端。 - Decorators:这是预先定义好的JSP页面,包含了整个网站统一的页面布局和设计。 - decorators....

    sitemesh例子

    Sitemesh 是一个开源的 Web 应用程序装饰框架,主要用于解决网页布局和页面统一风格的问题。它通过拦截 HTTP 请求,将请求的页面内容与预先定义好的模板结合,使得开发者可以轻松地创建出统一的网站外观和感觉。在...

    Sitemesh 3 的使用及配置

    Sitemesh的核心概念是“装饰者”模式,即通过一个基础模板来统一页面的头部、尾部等公共部分的设计,而各个具体的页面只需要关注自己的核心内容即可。 #### 二、Sitemesh 3 下载与安装 **最新版本**: 目前Sitemesh...

    sitemesh3-demo

    【sitemesh3-demo】是一个基于Sitemesh3框架的示例项目,旨在展示如何在Web应用程序中有效地实现页面布局和装饰功能。Sitemesh是一个开源的Java Web应用框架,主要用于增强网页的外观和结构,通过定义装饰模板,可以...

    sitemesh 例子

    Sitemesh 是一款开源的网页布局和装饰框架,主要用于Java Web应用,它可以帮助开发者实现页面的统一布局,提高网站的视觉一致性。Sitemesh的工作原理是通过拦截HTTP请求,将请求的内容与预先定义好的模板结合,生成...

    sitemesh布局知识点汇总

    - **装饰模式的应用**:Sitemesh采用了GOF的装饰者模式,并将其应用于过滤器中,这意味着被装饰的页面无需知道具体的装饰逻辑,大大增强了灵活性。 - **多源内容装饰**:Sitemesh可以装饰来自不同技术栈的内容,如...

    sitemesh jar包机tld文件

    这个jar包包含了所有SiteMesh的类和方法,使得开发者能够将SiteMesh集成到他们的Web应用程序中。 描述中提到的“jsp采用sitemesh页面布局”是指使用SiteMesh来管理JSP页面的布局。JSP(JavaServer Pages)是一种...

    sitemesh入门demo

    - 装饰器是Sitemesh的核心概念,它是一个HTML文件,定义了页面的基本结构,如头部、主体和尾部。你可以为不同类型的页面定义多个装饰器,根据URL或特定条件选择使用哪个装饰器。 - 装饰器通过`...

    sitemesh jar包

    **Sitemesh** 是一个开源的网页布局和装饰框架,主要用在Java Web应用程序中,用于提供页面布局和模板设计的解决方案。它可以帮助开发者统一网站的外观和感觉,通过分离内容、样式和布局,使代码更加模块化和可维护...

Global site tag (gtag.js) - Google Analytics