快速业务通道

彻底解决Tomcat 5.0.19中文乱码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

彻底解决Tomcat 5.0.19中文乱码

时间:2010-12-06

一、Include的页面乱码

现象:include进来的页面出现乱码,其它页面正常。

原因:Tomcat在缺省情况下使用ISO-8859-1编码,但是在include时有时Tomcat不能正确根据外层.jsp文件的编码解析include进来的文件,造成include进来的文件中的中文乱码。

解决:这儿可以有很多解决办法,但是对于我们的中文环境,从根本上的解决办法是将Tomcat 5.0.19的核心缺省编码从ISO-8859-1修改为GBK 。可以在下面地址下载修改过的jar文件,

jasper-compiler.jar,jasper-runtime.jar位于/common/lib下,其它位于/server/lib下,将新的.jar文件替代原.jar即可。

二、提交的数据乱码

现象:通过表单提交的数据出现乱码。

原因:原因未明。可能是Tomcat在接收到请求后,并没有能够根据request中的信息提前正确的编码方式。

解决:可以添加一个设置字符集的Filter。

package filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.UnavailableException; public class SetCharacterEncodingFilter implements Filter {  protected String encoding = null;  protected FilterConfig filterConfig = null;  protected boolean ignore = true;  public void destroy() {   this.encoding = null;   this.filterConfig = null;  } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  // Conditionally select and set the character encoding to be used  if (ignore || (request.getCharacterEncoding() == null)) {   String encoding = selectEncoding(request);   if (encoding != null)    request.setCharacterEncoding(encoding);  }  // Pass control on to the next filter  chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException {  this.filterConfig = filterConfig;  this.encoding = filterConfig.getInitParameter("encoding");  String value = filterConfig.getInitParameter("ignore");  if (value == null)   this.ignore = true;  else if (value.equalsIgnoreCase("true"))   this.ignore = true;  else if (value.equalsIgnoreCase("yes"))   this.ignore = true;  else   this.ignore = false; } protected String selectEncoding(ServletRequest request) {  return (this.encoding); } }

配置web.xml

<filter>  <filter-name>Set Character Encoding</filter-name>  <filter-class>filters.SetCharacterEncodingFilter</filter-class>  <init-param>   <param-name>encoding</param-name>   <param-value>GBK</param-value>  </init-param> </filter> <filter-mapping>  <filter-name>Set Character Encoding</filter-name>  <url-pattern>/*</url-pattern> </filter-mapping>

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号