• 过滤器概述


    ---------------siwuxie095

       

       

       

       

       

       

       

       

    过滤器是从 Servlet 2.3 规范开始新增的功能,它也是一个由 Servlet 容器管理的对象

       

       

    过滤器的结构同 Servlet 非常类似

    如:也有负责初始化和清理资源的 init() 方法和 destroy() 方法

       

    虽然二者结构类似,但功能完全不同

       

    过滤器的功能可以理解为:在 源数据 目的数据 之间起过滤作用的中间组件

       

       

       

    一个简单的过滤器实例:

       

    访问指定资源之前打印一条日志,访问指定资源之后再打印一条日志

       

    点击选择工程名,右键->New->Filter,包名为:com.siwuxie095.filter,

    类名为:FilterOne

       

       

    FilterOne.java:

       

    package com.siwuxie095.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;

       

       

    /**

    *

    * 过滤器的功能:

    * 在元数据和目的数据之间起过滤作用的中间组件

    *

    * servlet被调用之前截获该调用,同时在servlet被调用之后截获该调用

    *

    * 截获后,对请求或者响应信息进行处理

    *

    * 如:修改实际请求中的参数信息或修改实际响应中的参数信息

    *

    * 应用范围:如权限控制日志记录图像转换数据压缩 etc.

    *

    * 过滤器的生命周期同servlet类似,首先初始化,然后执行doFilter方法中业务逻辑,最后销毁

    */

    public class FilterOne implements Filter {

       

    public FilterOne() {

    System.out.println("===== 构造方法 =====");

    }

    /**

    * servlet容器启动时会执行过滤器的init()方法,这一点和servlet不同

    *

    * servletinit()方法是在servlet第一次被访问时才会被执行

    * 而过滤器的init()方法在容器启动时就执行

    *

    * init()方法的参数是FilterConfig类型的,它用来获取过滤器初始化配置信息的接口

    *

    * FilterConfig 是一个接口,它有一个重要方法:getInitParameter()方法

    */

    public void init(FilterConfig fConfig) throws ServletException {

    System.out.println("===== 初始化方法 =====");

    //FilterConfiggetInitParameter()方法,需要传入String类型参数,

    //返回值是String类型,创建以接收返回值,且返回的是以参数命名的初始化参数的值(键值对)

    //若参数不存在返回空

    String initParam=fConfig.getInitParameter("param");

    System.out.println("param = "+initParam);

    }

       

       

    /**

    * doFilter()方法同servletservice()方法一样,

    * 都用来执行具体业务逻辑,是过滤器中最重要的一个方法

    *

    * 参数除了请求和响应的对象之外,还有一个FilterChain对象

    * FilterChain也提供了一个doFilter()方法,开发人员根据业务需要决定是否调用该方法

    *

    * 如果调用该方法,servlet容器就会将请求和响应,转发给下一个组件进行处理

    * 下一个组件由可能是一个过滤器,也有可能是一个servlet,或其他的web组件

    *

    * 不调用该方法,就不会有后续的处理

    */

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    System.out.println("===== 开始执行doFilter方法 =====");

    chain.doFilter(request, response);

    System.out.println("===== 结束执行doFilter方法 =====");

    }

       

    //销毁过滤器

    public void destroy() {

    System.out.println("===== 销毁方法 =====");

    }

       

    }

       

       

    在部署描述符 web.xml 中注册 filter:

       

       

       

    部署描述符 web.xml 在 WEB-INF 目录下,如果没有,手动创建即可

       

    点击选择工程名,右键->Java EE Tools->Generate Deployment Descriptor Stub

       

       

       

    过滤器的 init() 方法在 Servlet 容器被启动时就执行(即 启动 Tomcat 时

    就执行,在 init() 方法前执行的是构造方法),而 Servlet 的 init() 方法却

    是在 Servlet 第一次被访问时才执行

       

    过滤器的 doFilter() 方法同 Servlet 的 service() 方法一样,都是

    用来执行具体的业务逻辑,是过滤器中最重要的一个方法

       

       

    过滤器在 Servlet 被调用之前截获该调用,同时在 Servlet 被调用之后截获该调用

       

    「即 过滤器作用于 Servlet 执行的前后」

       

    截获后,对请求信息 响应信息进行处理,如:修改实际请求中的参数信息

    修改实际响应中的参数信息

       

    应用范围:权限控制、日志记录、图像转换、数据压缩

       

       

    过滤器的生命周期同 Servlet 类似,首先初始化,

    然后执行 doFilter() 方法中业务逻辑,最后销毁

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    【IBM】netperf 与网络性能测量
    netperf 网络性能测试
    Netperf测试技巧
    网络测试工具--Iperf、Netperf 、MZ
    iozone
    iozone的使用与介绍-20191105
    XRDP freerdp
    性能工具 stream 最新版本5.10 The STREAM benchmark
    Linux学习之路-Linux-at及cron命令【7】---20171215
    centos7基于luks对磁盘进行加密
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6715780.html
Copyright © 2020-2023  润新知