zoukankan      html  css  js  c++  java
  • java 过滤器(参数传递中文乱码)

    转自:http://blog.csdn.net/guopengzhang/article/details/5557096

    (一)过滤器类编写。 

    1、设置字符集编码方式:

          编写过滤器类:实现接口javax.servlet.Filter

    public class CharacterEncodingFilter implements Filter {
        private String charset;
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain filterChain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            request.setCharacterEncoding(charset);
            filterChain.doFilter(request, response);
        }
    
        public void init(FilterConfig config) throws ServletException {
            // TODO Auto-generated method stub
            charset = config.getInitParameter("charset");
        }
    
    }

    标注:

      以上过滤器类只能保证post提交方式能正确解码,get方式依然会出问题。

    方案1:

    String username = new String(request.getParamter("userName").getBytes("ISO8859-1"),"GBK")

    此方法在接受页面上能够对post和get两种方式传过来的参数userName进行正确显示,但每个参数都使用这种方式来接受会太麻烦,所以还是使用过滤器的方式比较方便。

    方案2:

    对于get接受参数的解决方法:修改服务器的配置文件中

    修该tomcat服务器的安装目录(E:/Program Files/Apache Software Foundation/Tomcat 6.0/conf)下的server.xml

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

    标注:添加属性 URIEncoding="GBK" ,此方式只能解决get方式提交。

    2、检测用户是否登陆的过滤器

    public class CheckLoginFilter implements Filter {
    
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            HttpServletRequest hsRequest = (HttpServletRequest)request;
            HttpServletResponse hsResponse = (HttpServletResponse)response;
    
            HttpSession session = hsRequest.getSession();
    
            //没登录
            if(session.getAttribute("userID") == null)
            {
    
                String uri = hsRequest.getRequestURI();
                // 请求登录页面
                if (uri.contains("log")||uri.contains("Log") || 
                        uri.contains("reg") || uri.contains("Reg")) {
                    chain.doFilter(request, response);
                }else {
                // 请求其它页面
                    hsResponse.sendRedirect("login.jsp");
                }
    
            }else {
                // 已登录,顺利跳转
                chain.doFilter(request, response);
            }
        }
    
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
    
        }
    
    }

    (二)配置web.xml

        
        <filter>   
            <filter-name>CharacterEncodingFilter</filter-name>   
            <filter-class>cn.guopeng.bbs.filter.CharacterEncodingFilter</filter-class> 
            <init-param>
                <param-name>charset</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>   
        <filter-mapping>  
            <filter-name>CharacterEncodingFilter</filter-name>   
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter>
            <filter-name>CheckLoginFilter</filter-name>   
            <filter-class>cn.guopeng.bbs.filter.CheckLoginFilter</filter-class>   
        </filter>   
        <filter-mapping>   
            <filter-name>CheckLoginFilter</filter-name>   
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    标注:

    (1)想过滤多个页面并且不全部过滤,

        如果过滤或不过滤的地址比较有规律可以配置为全部过滤,然后在过滤器中编写代码只过滤一部分,其他的直接请求即可。

        如果规律不明显,则只能通过web.xml配置,可以为过滤类写多个<filter-mapping>

    (2)web.xml 中如果有servlet的配置信息, 那么filter应该在servlet的下面进行配置。

  • 相关阅读:
    《Docker容器与容器云》读书笔记
    【Kubernetes】Kubernetes的Service外部访问方式:NodePort和LoadBalancer
    《微服务设计》读书笔记
    什么是Istio
    【Kubernetes】kube-dns 持续重启
    什么是Etcd?
    什么是Service Mesh?
    放假个人总结四
    放假个人总结三
    放假个人总结二
  • 原文地址:https://www.cnblogs.com/tv151579/p/3133002.html
Copyright © 2011-2022 走看看