zoukankan      html  css  js  c++  java
  • L--java web filter

    什么是filter

    Filter是java下的一种过滤器,能实现对java web程序客户端和服务端消息的过滤,也就是在服务器端接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理。

    Filter的使用非常的灵活,是在“链”到客户端和服务端之间的,在需要时可以配置到客户端和服务器之间,在不需要时可以去掉。filter还可以设置其对发送到哪些页面或从哪些页面发出的消息进行过滤,即是一种横切性的编程,可插拔。filter执行的大致过程如下图

     实现filter相关的功能,需要实现javax.servlet.jar包下的filter接口,该接口有三个方法分别是init ,dofilter,destory方法,把需要执行某些功能的代码放在dofilter方法中

    一个Filter处理一个jsp

    下例实现的是设置所有jsp页的字符编码

    package com.tgb.drp.util.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     * 采用filter统一处理字符集
     *
     */
    public class CharsetEncodingFilter implements Filter {
        
        private String encodeString;
            //Filter注销方法
        @Override
        public void destroy() {
        
    
        }
            //filter要实现的功能
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            System.out.println("begin");
            // 设置字符集
            request.setCharacterEncoding(encodeString);
            
            //继续向下执行,如果还有其他filter继续调用其他filter,没有的话将消息发送给服务器或客户端
            chain.doFilter(request, response);
            System.out.println("end");
        }
            //初始化方法
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //
            encodeString=filterConfig.getInitParameter("encoding");
        }
    
    }

    写好filter类后,需要在配置文件中设置对那些request和response进行过滤处理,本例子设置对所有的jsp页面进行处理,在web.xml的web-app节点下,配置好后,可以进行测试。

        <filter>
            <filter-name>CharsetEncodingFilter</filter-name>
            <filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharsetEncodingFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>

    多个filter处理一个jsp页

    如果想实现多个filter对同一个jsp页进行处理,例如即需要设置字符编码,有需要验证身份,只需要在写好响应的filter后继续配置在web.xml里。我们继续上面的例子,再写一个验证身份的filter,命名为AuthentionFilter,如下

    package com.tgb.drp.util.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    
    public class AuthenticationFilter implements Filter {
    
        @Override
        public void destroy() {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            //控制用户访问权限
            HttpServletRequest req=(HttpServletRequest)request;
            HttpServletResponse res=(HttpServletResponse)response;
            HttpSession session=req.getSession();
    
            if(session.getAttribute("user_info")!=null){
                chain.doFilter(request, response);
            }else{
                res.sendRedirect(req.getContextPath()+"/error.html");
            }
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        
    
        }
    
    }

    然后再配置文件里继续进行如下配置,代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
          <welcome-file-list>
            <welcome-file>index.html</welcome-file>
    
        </welcome-file-list> 
        <filter>
            <filter-name>CharsetEncodingFilter</filter-name>
            <filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharsetEncodingFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        
        <filter>
            <filter-name>AuthenticationFilter</filter-name>
            <filter-class>com.tgb.drp.util.filter.AuthenticationFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>AuthenticationFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        
        <session-config>
            <session-timeout>60</session-timeout>
        </session-config>
    </web-app>
  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/guDouMaoNing/p/4425775.html
Copyright © 2011-2022 走看看