利用Filter技术解决中文乱码的终极实现

利用包装类,解决乱码问题

web.xml的配置

  <filter>
      <filter-name>CharacterEncodingFilter2</filter-name>
      <filter-class>cn.itcast.web.filter.example.CharacterEncodingFilter2</filter-class>
  </filter>
  
  <filter-mapping>
      <filter-name>CharacterEncodingFilter2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

Filter代码的实现

//真正解决全站乱码
public class CharacterEncodingFilter2 implements Filter {

    
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        
        request.setCharacterEncoding("UTF-8");  //post  get
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        
        chain.doFilter(new MyRequest(request), response);   //request.getparameter("password");
    }
    
    /*
    1.写一个类,实现与被增强对象相同的接口
    2.定义一个变量,记住被增强对象
    3.定义一个构造方法,接收被增强对象
    4.覆盖想增强的方法
    5.对于不想增强的方法,直接调用被增强对象(目标对象)的方法
     */
    
    class MyRequest extends HttpServletRequestWrapper{

        private HttpServletRequest request;
        public MyRequest(HttpServletRequest request) {
            super(request);
            this.request = request;
        }
        @Override
        public String getParameter(String name) {
            
            String value = this.request.getParameter(name);
            if(!request.getMethod().equalsIgnoreCase("get")){
                return value;
            }
            
            if(value==null){
                return null;
            }
            
            try {
                return value = new String(value.getBytes("iso8859-1"),request.getCharacterEncoding());
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
            
        }
        
        
        
        
    }

    
    public void destroy() {
        // TODO Auto-generated method stub

    }

    
    public void init(FilterConfig filterConfig) throws ServletException {
    }

}
原文地址:https://www.cnblogs.com/zhangbaowei/p/4730847.html