JavaWeb基础篇(十)--Filter过滤器

一.过滤器简介

1.Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

2.它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

3.特点

(1)过滤器是双向的.

(2)可以有多个过滤器

(3)过滤器不是目标资源,是访问目标资源前后执行的,拦截的是一堆目标资源.

二.Filter入门

1.简单实现

(1)编写一个类,实现filter接口,重写3个方法

(2)在web.xml中进行配置(与servlet配置方法相同):

    <filter>
     <filter-name>FilterDemo_01</filter-name>
      <filter-class>Filter.FilterDemo_01</filter-class>
    </filter>

    <filter-mapping>
      <filter-name>FilterDemo_01</filter-name>
     <url-pattern>/felter1</url-pattern>
    </filter-mapping>

2.FilterChain对象

(1)doFilter(ServletRequest request, ServletResponse response)    执行下一个过滤器,如果没有下一个过滤器,访问目标资源。

3.过滤器的生命周期

void init(FilterConfig filterConfig)      --服务器启动的时候创建过滤器实例(单例的),默认调用init方法进行初始化操作,    
void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)  -- 放行,初始化之后就会执行,有一次执行一次。   
void destroy()    -- 过滤器是关闭服务器或者移除项目销毁,销毁之前调用destroy方法进行销毁。

三.FilterConfig接口

String getFilterName()                  -- 获取<filter-name>的名称
String getInitParameter(String name)    -- 获取初始化参数的值(重点)
Enumeration getInitParameterNames()     -- 获取初始化参数(重点)
ServletContext getServletContext()      -- 获取ServletContext域对象(重点)

四.过滤器的配置

1.配置<filter>   

 <filter-name> -- 配置filter的名称   
 <filter-class>    -- 包名+类名   
 <init-param>  -- 配置初始化参数 

2.配置<filter-mapping>   

<filter-name> -- 配置filter的名称和<filter>标签中的<filter-name>配置必须是相同的。  

<url-pattern> -- 配置过滤的路径        

       完全路径匹配        以/开头的   /aa     /aa/bb      localhost/litBlue_filter/aa/bb      

      目录匹配             以/开头的   /*      /aa/*       localhost/litBlue_filter/aa/bb      

      扩展名匹配           不能以/开头   *.jsp              访问所有的jsp都会被拦截     

     注意:

    (1)优先级:完全路径 > 目录匹配 > 扩展名匹配            

    (2) 在web.xml中配置2个(A,B)过滤器,每个过滤器的配置都是/*  AB过滤器执行顺序和在web.xml中的配置(<filter-mapping>)顺序有关。   

<servlet-name>    -- 过滤器过滤指定的servlet  直接配置Servlet的名称    

<dispatcher>        

      REQUEST   -- 默认只拦截请求。REQUEST也是默认值。     

      FORWARD   -- 只拦截转发的    

      INCLUDE   -- 包含     

      ERROR     -- 需要在web.xml进行配置

猜你喜欢

转载自blog.csdn.net/weixin_43815050/article/details/87905325