zoukankan      html  css  js  c++  java
  • 字符集过滤器

        在做网站项目的时候常常会发生乱码的情况,我经常用一个过滤器来解决乱码的问题,过滤器的代码入下:

    public class charset implements Filter {
    
    
        private static String encode = "UTF-8";//设置 默认UTF-8编码
        
        public void destroy() {
        }
    
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
    
        HttpServletRequest request = (HttpServletRequest) arg0;  
            HttpServletResponse response = (HttpServletResponse) arg1;  
            
            /*
             * 设置request编码   , 该设置仅对POST有效。
             */
            request.setCharacterEncoding(encode);
            
            /*
             * 设置发送到客户端的响应的内容类型,可以包括字符编码说明。
             * 如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。
             * 该方法如果在getWriter()方法被调用之后或者在被提交之后调用,
             * 将不会设置响应的字符编码,在使用http协议的情况中,该方法设置 Content-type实体报头 。
             */
            response.setContentType("text/html;charset=" + encode);  
            
            /*
             *    如果服务器端使用response.setContentType设置了编码格式,
             *    那么应该使用 response.setCharacterEncoding指定的编码格式,这样就会把之前的设置屏蔽掉。 
             */
            response.setCharacterEncoding(encode);
            
            /*
             * 这段代码会将页面提交的信息编码由ISO8859-1转换为UTF-8
             */
            arg2.doFilter(new CharacterEncodingRequest(request), response);
        }
    
        
        /**
         * 在初始化的时候web.xml文件中设置好的编码去除,代替程序中默认的编码
         */
        public void init(FilterConfig arg0) throws ServletException {
            
            String encoding = arg0.getInitParameter("encode");
            if (encoding != null) {
                encode = encoding;
            }
        }
    
        class CharacterEncodingRequest extends HttpServletRequestWrapper {
            
            private HttpServletRequest request = null;
    
            public CharacterEncodingRequest(HttpServletRequest request) {
                super(request);
                this.request = request;
            }
    
            /**
             * 对参数重新编码
             */
            @Override
            public String getParameter(String name) {
    
                String value = super.getParameter(name);
                
                if (value == null)
                    return null;
            
                String method = request.getMethod();
                
                if ("get".equalsIgnoreCase(method)) {
                    try {
                        value = new String(value.getBytes("ISO8859-1"),  request.getCharacterEncoding());
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                return value;
            }
        }
    }
  • 相关阅读:
    C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)
    WebConfig配置文件详解(转载自逆心的博客)
    ASP.NET C# 日期 时间 年 月 日 时 分 秒 格式及转换(转自happymagic的专栏)
    ASP.NET RepeatLayout 属性
    牛顿迭代法
    汉诺塔(整理)
    游戏引擎---好牛(转)
    字符串相关面试题(整理)
    有关java调用批处理文件
    有关java 8
  • 原文地址:https://www.cnblogs.com/wjn563/p/4333040.html
Copyright © 2011-2022 走看看