javaweb后台接收中文乱码。


 

 

 

加一个编码过滤器。

 

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>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM