• 利用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 {
        }
    
    }
  • 相关阅读:
    JS相关
    简单的打字效果
    android文件保存
    android 各种布局技术
    Android中的显示单位
    第一个android项目目录结构说明
    安装运行第一个android应用
    android手机模拟器屏幕分辨率说明
    系统常用VC++运行时下载地址
    VC++共享文件夹
  • 原文地址:https://www.cnblogs.com/zhangbaowei/p/4730847.html
Copyright © 2020-2023  润新知