Filter和Listener

Filter

  • 作用:用于当访问服务器资源时,过滤器可以将请求拦截下来,完成一些功能
  • 简单使用步骤:
    1. 定义一个类实现接口Filter
    2. 重新接口的抽象方法
    3. 配置拦截路径
      • 在web.xml里配置
      • 使用@WebFilter()注解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@WebFilter("/*") // 所有资源在被访问之前都会经过过滤器
public class FilterDemo1 implements Filter{

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("过滤器执行了。。。。。");
// 放行
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub

}

web.xml配置

1
2
3
4
5
6
7
8
9
10
<filter>
<filter-name>demo1</filter-name>
<filter-class>io.jtxyh.controller.FilterDemo1</filter-class>
</filter>

<filter-mapping>
<filter-name>demo1</filter-name>
<!-- 这下面这个路径是拦截路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>

执行流程

  1. 执行过滤器
  2. 执行放行后的资源
  3. 回来执行过滤器放行代码下边的代码

生命周期

  1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次
  2. doFilter:在每一次请求被拦截资源时,会执行。执行多次
  3. destroy:在服务器关闭后,Filter对象被销毁,如果服务器正常关闭,则会执行destroy方法。只执行一次,用于释放资源

配置

  • 拦截路径配置
    1. 具体的资源路径:**/index.jsp**
      • 只有访问index.jsp资源时,才会执行
    2. 拦截目录:**/user/***
      • 访问**/user下的所有资源**时,才会执行
    3. 后缀名拦截:*.jsp
      • 访问后缀名为jsp资源时,才会执行
    4. 拦截所有资源:**/***
      • 访问所有资源时都会执行
  • 拦截方式配置,注解配置
    1. 设置dispatcherTypes属性

      1. REQUEST默认值。浏览器直接请求资源
      2. FORWARD转发访问资源
      3. INCLUDE包含访问资源
      4. ERROR错误跳转资源
      5. ASYNC异步访问资源
      1
      @WebFilter(value = "/*",dispatcherTypes = {DispatcherType.REQUEST,...})
    2. web.xml配置

      • 设置<dispatcher></dispatcher>标签
      1
      2
      3
      4
      5
      6
          <filter-mapping>
      <filter-name>demo1</filter-name>
      <!-- 这下面这个路径是拦截路径 -->
      <url-pattern>/index.jsp</url-pattern>
      <dispatcher>FORWARD</dispatcher>
      </filter-mapping>

链-配置多个过滤器

  • 执行顺序:有两个过滤器
    1. 执行过滤器1
    2. 执行过滤器2
    3. 资源执行
    4. 执行过滤器2
    5. 执行过滤器1
  • 过滤器先后顺序
    1. 注解配置:按照类名的字符串比较规则比较,值小的先执行
    2. web.xml配置:<filter-mapping>定义在上面的先执行

相关文章

数据库连接池

SpringIOC

Junit和Spring

SpringAOP

Tomcat

Servlet

Request,Response和ServletContext

Cookie和Session

JSP和EL和Jstl

Mybatis