JavaWeb 之 Filter:过滤器

Posted niujifei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb 之 Filter:过滤器相关的知识,希望对你有一定的参考价值。

一、Filter 概述

  1、概念

    web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

  2、作用

    一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符等功能。

二、基本使用

  1、定义一个类,实现接口 Filter

  2、重写方法

  3、配置拦截路径

    ① web.xml 配置

    ② 注解方式配置

  4、代码实现

 1 import javax.servlet.*;
 2 import javax.servlet.annotation.WebFilter;
 3 import java.io.IOException;
 4 
 5 @WebFilter("/*")
 6 public class FirstFilter implements Filter 
 7     public void destroy() 
 8     
 9 
10     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException 
11         System.out.println("filterDemo1被执行了....");
12         // 放行操作
13         chain.doFilter(req, resp);
14     
15 
16     public void init(FilterConfig config) throws ServletException 
17 
18     
19 
20 

 

三、过滤器细节

  1、过滤器如何配置?

    (1)注解配置

       在类上添加 @WebFilter() 即可,里面填写访问所要拦截的资源的路径。

    (2)web.xml 配置

1   <filter>
2         <filter-name>demo1</filter-name>    // filter 的名称
3         <filter-class>cn.ks.web.filter.FilterDemo1</filter-class>  // 完整的类名
4     </filter>
5     <filter-mapping>
6         <filter-name>demo1</filter-name>
7         <!-- 拦截路径 -->
8         <url-pattern>/*</url-pattern>
9     </filter-mapping>

 

  2、过滤器的执行流程?

    (1)执行过滤器

    (2)执行要放行的资源

    (3)回来执行过滤器放行代码下面的代码

  3、过滤器的生命周期方法?

    (1)init 方法:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次,一般用于加载资源。

    (2)doFilter 方法:每一次请求被拦截资源时,会执行。执行多次

    (3)destory 方法:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次,一般用于释放资源。

  4、过滤器配置详解?

    (1)拦截路径配置

       1. 具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行

       2. 拦截目录:        /admin/*     访问/user下的所有资源时,过滤器都会被执行

       3. 后缀名拦截:    *.jsp            访问所有后缀名为jsp资源时,过滤器都会被执行

       4. 拦截所有资源: /*                访问所有资源时,过滤器都会被执行

    (2)拦截方式配置:资源被访问的方式

       注解配置

          设置 dispatcherTypes 属性

          

属性名 解释
REQUEST 默认值。浏览器直接请求资源
FORWARD 转发访问资源
INCLUDE 包含访问资源
ERROR 错误跳转资源
ASYNC 异步访问资源

       web.xml 配置

           设置 <dispatcher></dispatcher>标签,在里面填入上面的值即可。

  5、过滤器链(配置多个过滤器)

    (1)执行顺序:如果有两个过滤器:过滤器1和过滤器2

       ① 过滤器1

       ② 过滤器2

       ③ 资源执行

       ④ 过滤器2

       ⑤ 过滤器1

    (2)过滤器先后顺序问题

       ① 注解配置:

        规则:按照类名的字符串比较规则比较,值小的先执行。

        如: AFilter 和 BFilter,AFilter就先执行了。

       ② web.xml 配置:

        规则: <filter-mapping>谁定义在上边,谁先执行

 

以上是关于JavaWeb 之 Filter:过滤器的主要内容,如果未能解决你的问题,请参考以下文章

javaWeb--之--过滤器(filter)篇

JavaWeb之Filter&Listener

java_day30_javaWeb三大组件之过滤器Filter

JavaWeb--Filter(过滤器)学习

javaweb之session过期验证

JavaWeb之过滤器