天天看点

sitemesh的字符编码问题

今天帮朋友解决了一个sitemesh很奇怪的字符编码问题。

开发环境是NetBeans 4.1 + Tomcat。之前在此环境下开发的Web项目很正常,最近朋友决定使用sitemesh来管理页面,结果问题出来了:CSS、HTML、JSP等文件均没问题,但就是不能显示图像。并且每刷新一下页面,Tomcat就会报错:

严重: Javac exception

Compile failed; see the compiler error output for details.

...

at com.mike.Filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:51)

...

...vcss_bmp.java:45: 非法的表达式开始

...vcss_bmp.java:45: 非法字符: /15

...

看来问题出在字符编码上,检查页面编码,全设为gb2312,应该没问题,再检查web.xml,共有两处设置编码的地方。

第一个:

  <filter>

    <filter-name>setCharacterEncoding</filter-name>

    <filter-class>com.mike.Filter.SetCharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>gb2312</param-value>

    </init-param>

  </filter>

...

  <filter-mapping>

    <filter-name>setCharacterEncoding</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

另外一个地方是:

    <jsp-property-group>

      <display-name>JSP Property Group</display-name>

      <url-pattern>/*</url-pattern>

      <page-encoding>gb2312</page-encoding>

    </jsp-property-group>

  </jsp-config>

根据错误提示,先把第一个地方屏蔽掉,错误依旧。恢复第一个后,把第二个地方屏蔽掉,问题解决。想必是sitemesh里面所应用的chains of responsibility导致,但具体细节还不清楚。

所幸第一个方法没问题,表单中文处理正常。