首页 > 编程语言 > 详细

javaweb后台接收中文乱码。

时间:2020-12-03 09:56:22      阅读:43      评论:0      收藏:0      [点我收藏+]

 

 

 

加一个编码过滤器。

 

package cn.itcast.goods.filter;


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Map.Entry;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
/**
 * 处理整个web应用全站乱码
 * 1)处理请求参数乱码
 * 2)处理响应正文乱码
 * @author RoySun
 *
 */
public class MixCodeFilter implements Filter{
    @Override
    public void destroy() {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        //针对post提交方式,这一句即可处理接收请求中的乱码
        request.setCharacterEncoding("utf-8");
        /*
         *过滤器中处理响应正文乱码,
         *所有拦截到的资源的乱码问题都可以解决
         */
        response.setContentType("text/html;charset=utf-8");
        /*
         * 采用装饰者模式,将request对象进行包装,
         * 在装饰类中重写getParameter等获取参数的方法
         */
        MyHttpServletRequest myRequest = new MyHttpServletRequest(req);
        chain.doFilter(request, res);
    }

    @Override
    public void init(FilterConfig onfig) throws ServletException {}

}
//装饰类,对HttpServletRequest类进行装饰,重写获取请求参数的方法
class MyHttpServletRequest extends HttpServletRequestWrapper{
    private HttpServletRequest request;
    //构造方法
    public MyHttpServletRequest(HttpServletRequest request) {
        super(request);
        this.request = request;
    }
    @Override
    public String getParameter(String name) {
        return this.getParameterValues(name)==null? null:this.getParameterValues(name)[0];
    }

    @Override
    public String[] getParameterValues(String name) {
        return this.getParameterMap().get(name);
    }
    private boolean isEncode=true;
    @Override
    public Map<String, String[]> getParameterMap() {
        if("GET".equalsIgnoreCase(request.getMethod())){//针对get提交方式进行手动编解码
            Map<String, String[]> map = request.getParameterMap();
            if(isEncode){
                for (Entry<String, String[]> entry : map.entrySet()) {
                    String[] params = entry.getValue();
                    for(int i=0;i<params.length;i++){
                        try {
                            System.out.println("过滤器之前的参数:" + params[i]);
                            params[i]=new String(params[i].getBytes("iso8859-1"), "utf-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                }
                isEncode = false;
            }
            return map;
        }else{//其余6种提交方式
            return request.getParameterMap();
        }
    }

}

 

 

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>cn.itcast.goods.filter.MixCodeFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

 

javaweb后台接收中文乱码。

原文:https://www.cnblogs.com/coder-lzh/p/14077063.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!