JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

               

一、乱码原因

①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。

②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)

 


二、解决办法


方法一 每次传输都手动设置编码(GET方式传输数据)

传输方
String name = URLEncoder.encode("张三","UTF-8");
String path = "http://localhost:8008/xyWeb/xyServlet?name=" + name;

接收方
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");


若传输方默认采用UTF-8编码就没有必要每次写,但接收方每次都写太烦,可考虑过滤器。

 

方法二(过滤器)

/** * 编码过滤器 *  * @author xy *  */public class EncodingFilter implements Filter{ private String encoding; public void init(FilterConfig fConfig) throws ServletException {  encoding = fConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception {  HttpServletRequest httprequest = (HttpServletRequest) request;  if ("GET".equals(httprequest.getMethod()))  {   // 将httpRequest进行包装   EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httprequest, encoding);    chain.doFilter(wrapper, response);  }  else  {   request.setCharacterEncoding(encoding);   response.setContentType("text/html;charset=" + encoding);   chain.doFilter(request, response);  } } public void destroy() { }}/** * httpRequest进行包装类 *  * @author xy *  */public class EncodingHttpServletRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; private String encoding; public EncodingHttpServletRequest(HttpServletRequest request) super(request);  this.request = request; } public EncodingHttpServletRequest(HttpServletRequest request,String encoding) super(request);  this.request = request;  this.encoding = encoding;   } @Override public String getParameter(String name) {  String value = request.getParameter(name);  if (null != value)  {   try   {    // tomcat默认以ISO8859-1处理GET传来的参数。把tomcat上的值用ISO8859-1获取字节流,再转换成UTF-8字符串    value = new String(value.getBytes("ISO8859-1"), encoding);   }   catch (UnsupportedEncodingException e)   {    e.printStackTrace();   }  }  return value; }}
  <filter>    <display-name>EncodingFilter</display-name>    <filter-name>EncodingFilter</filter-name>    <filter-class>cn.xy.filter.EncodingFilter</filter-class>    <init-param>      <description></description>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>EncodingFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>
           

浏览人工智能教程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值