码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-14 18:45:03      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

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

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 {
    }

}

 

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

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!