在tomcat环境下的中文乱码问题

    以前都是用公司现成的架构开发一些项目,但最近自己利用Struts+Spring+hibernate开发项目的时候才发现自己会的技术太少了,真是问题多多啊,革命尚未成功,同志还需努力。。。。

    刚开始的时候,将JSP页面利用<%@page contentType="text/html; charset=GBK"%>转换页面上汉字的编码方式,页面上的汉字可以正常显示了,但JSP页面上的中文数据传入BEAN的时候还是出现乱码问题,从action里面get出来的汉字都是乱码,在网上查找了一些资料,发现可以在formBean里面添加toGBK方法:

  1. private String toGBK(String str)throws java.io.UnsupportedEncodingException
  2.  {
  3.     return new String(str.getBytes("ISO-8859-1"),"GBK");
  4.  }

然后在每个set方法中将传进来的值进行转换,如:

  1. public void setXgrq(Date xgrq)
  2.    {
  3.        this.xgrq = this.toGBK(xgrq).trim;
  4.    }

但这样虽然解决了通过form传递中文的问题,但不能解决其他方式传值问题(不通过form),如:通过location.href传值的方式,于是想到写一个filter来过滤所有的传值调用,由于以前没有写过filter,所以现在也把filter的代码帖出来,便于记忆:

  1. package com.wmf.struts;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.*;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletResponse;
  7. public class servfilter extends HttpServlet implements Filter {
  8.  protected String encoding = "GBK";
  9.  protected FilterConfig filterConfig;
  10.  
  11.  public void destroy() {
  12.   // TODO 自动生成方法存根
  13.   this.encoding = null;
  14.   this.filterConfig = null;
  15.  }
  16.  public void doFilter(ServletRequest request, ServletResponse response,
  17.    FilterChain filterChain)
  18.                         throws IOException, ServletException {
  19.   // TODO 自动生成方法存根
  20.   request.setCharacterEncoding(this.encoding);
  21.   response.setCharacterEncoding(this.encoding);
  22.   ((HttpServletResponse)response).setHeader("Pragma","No-cache");
  23.   ((HttpServletResponse)response).setHeader("Cache-Control","no-cache");
  24.   ((HttpServletResponse)response).setHeader("Expires","0");
  25.   filterChain.doFilter(request, response);
  26.  }
  27.  public void init(FilterConfig filterConfig) throws ServletException {
  28.   // TODO 自动生成方法存根
  29.   this.filterConfig = filterConfig;
  30.   this.encoding = this.filterConfig.getInitParameter("encoding");
  31.  }
  32. }


在web.xml中也需要增加如下配置:

  1. <filter>
  2.     <filter-name>servfilter</filter-name>
  3.     <filter-class>com.wmf.struts.servfilter</filter-class>
  4.     <init-param>
  5.         <param-name>encoding</param-name>
  6.         <param-value>GBK</param-value>
  7.     </init-param>
  8.   </filter>
  9.   <filter-mapping>
  10.     <filter-name>servfilter</filter-name>
  11.     <url-pattern>/*</url-pattern>
  12.   </filter-mapping>
  13. </filter>

    结果测试了一把,单步调试的时候程序已经跳入filter了,但location.href传递的中文值乱码依旧,无奈啊。。。

    实在没办法了,就上CSDN找高手求救,哈哈,下面是他们的回复:

    要是tomcat,则编码问题建议统一用utf-8,我们就一直使用的很好
    需要在server.xml里面的connector里面务必设置如下参数:
    URIEncoding="UTF-8" useBodyEncodingForURI="true"

    **************************************************************
    传值出现中文乱码你使用的是tomcat的吧
    是url传值中文乱码吧
    先把 server.xml 中的<Connector 中加入 URIEncoding="GBK"
    url传中文最好先转换下编码
    URLEncoder.encode("汉字","GBK")
    接受后在解码
    URLDecoder.decode("汉字","GBK");

    果然,在Connector中加入URIEncoding="UTF-8" useBodyEncodingForURI="true"之后,问题统统搞定了,无论是form还是location.href传的中文参数都正确了,o(∩_∩)o...哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值