首页 > 其他 > 详细

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

时间:2015-08-14 18:43:35      阅读:282      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!