zoukankan      html  css  js  c++  java
  • javaWeb--之--过滤器(filter)篇

    一、过滤器

    1.1定义

    过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息进行过滤。

    1.2工作原理

    1、项目启动时,从Web容器中加载过滤器;

    2、过滤器存在于用户请求和Web资源之间;

    3、用户请求和Web响应之间的收发都经由过滤器按照过滤规则进行过滤筛选。

    1.3过滤器的生命周期

    实例化(web.xml加载)→初始化(init方法)→过滤(doFilter方法)→销毁(destroy方法)

    1、初始化:当容器第一次加载该过滤器时,init() 方法将被调用。该类在这个方法中包含了一个指向 Filter Config 对象的引用。我们的过滤器实际上并不需要这样做,因为其中没有使用初始化信息,这里只是出于演示的目的。

    2、过滤:过滤器的大多数时间都消耗在这里。doFilter方法被容器调用,同时传入分别指向这个请求/响应链中的 Servlet Request、Servlet Response 和 Filter Chain 对象的引用。然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 Filter Chain 对象引用上的 doFilter方法),之后在处理控制权返回该过滤器时处理响应。

    3、销毁:容器紧跟在垃圾收集之前调用 destroy()方法,以便能够执行任何必需的清理代码。

    过滤器链:服务器会按照web.xml中过滤器定义的先后顺序组装成一条链

    1.4过滤器在web.xml中的基本配置

    过滤器在web.xml中的的配置:

    <filter>
        <filter-name>过滤器名称</filter-name>
        <filter-class>过滤器完整类名</filter-class>
        <init-param>
            <description>描述信息,可以省略</description>
            <param-name>参数名称</param-name>
            <param-value>参数值</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>过滤器名称</filter-name>
        <url-pattern>URL</url-pattern>
        <dispatcher>[REQUEST|INCLUDE|FORWARD|ERROR]</dispatcher>
    </filter-mapping>

    二、过滤器的基本使用

    2.1 过滤器类的设计

    实现Filter接口,重写init、doFilter、destroy方法

    public class MyFilter implements Filter{
        public void init(FilterConfig filterConfig) throws ServletException{}
        /**
        *使浏览器不缓存页面的过滤器
        */
        public void doFilter(ServlerRequest request,ServletResponse response,FilterChain filterChian) throws IOException,ServletException{
          ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
          ((HttpServletResponse) response).setHeader("Pragma","no-cache");
          ((HttpServletResponse) response).setDateHeader ("Expires", -1);
          filterChain.doFilter(request, response);//将处理任务传递给过滤器链中的下一个资源
        }
        public void destroy(){}
    }

    2.2 过滤器在web.xml中的注册

    1、REQUEST、FORWARD、INCLUDE等类型过滤器的注册

    <!-- 过滤器配置 -->
    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>util.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <url-pattern>/main.jsp</url-pattern>
        <dispatcher>[REQUEST|FORWARD|INCLUDE]</dispatcher>
    </filter-mapping>

    2、ERROR类型的过滤器注册

    <!-- 配置错误页面,当出现404错误则跳转至/error.jsp页面 -->
    <error-page>
        <error-code>404</error-code>
        <location>/error.jsp</location>
    <error-page>
    <!-- 过滤器配置 -->
    <filter>
        <filter-name>errorFilter</filter-name>
        <filter-class>util.filter.ErrorFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>errorFilter</filter-name>
        <url-pattern>/error.jsp</url-pattern>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

    三、Servlet3.0中过滤器的使用

    加上 @WebFilter 注解即可,无需在web.xml中注册

     

  • 相关阅读:
    项目依赖库列表文件requirements.txt生成和使用
    pymysql执行sql语句无效问题
    Prometheus
    关于在安装wampserver出现“由于找不到msvcr110.dll”的问题的解决办法
    安装centos8和Window10出现的一些问题和解决方法
    LeetCode833题:字符串中的查找与替换
    Pycharm中github的使用(只有链接供自己学习使用)
    机器学习《西瓜书》的学习笔记——机器学习使用的领域
    机器学习中数理统计与参数估计的相关基础概念
    怎样在Anaconda中的某一个环境中安装Python的相关包(pypyodbc)
  • 原文地址:https://www.cnblogs.com/514929hgy/p/7216953.html
Copyright © 2011-2022 走看看