zoukankan      html  css  js  c++  java
  • 利用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 {
        }
    
    }
  • 相关阅读:
    【Python图像特征的音乐序列生成】解析ABC格式的文件(修改版)
    【Python图像特征的音乐序列生成】关于数据库到底在哪里下载
    假期周进度报告2
    假期周进度报告1
    河北省科技创新平台系统头脑风暴会
    问题账户需求分析
    2018年春季个人阅读计划
    软件需求与分析读后感
    《需求工程——软件建模与分析》读后感3
    《需求工程——软件建模与分析》读后感2
  • 原文地址:https://www.cnblogs.com/zhangbaowei/p/4730847.html
Copyright © 2011-2022 走看看