Java第四十二天,JavaWeb三大组件,Filter

java

一、什么是Java Web三大组件

Servlet、Filter(过滤器)、Listener(监听器)

二、Filter 概念

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

三、Filter 使用

1.自定义类,实现 Filter 接口

2.设置拦截路径

3.配置

(1)web.xml 配置方式

① 自定义 Filter 类,实现 Filter 接口

package web.filter;

import javax.servlet.*;

import java.io.IOException;

public class FilterTest implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

System.out.println("我也拦截成功了......");

// 放行

filterChain.doFilter(servletRequest, servletResponse);

}

@Override

public void destroy() {

}

}

② 配置 web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

<!--配置 filter-->

<filter>

<filter-name>test</filter-name>

<filter-class>web.filter.FilterTest</filter-class>

</filter>

<!--配置 filter 映射-->

<filter-mapping>

<!--选择配置好的 filter-->

<filter-name>test</filter-name>

<!--配置拦截路径-->

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

(2)注解 配置方式

package web.filter;

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import java.io.IOException;

// 配置拦截路径, /* 表示全部拦截

@WebFilter(urlPatterns = "/*")

public class MyFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

System.out.println("过滤中......");

//放行

filterChain.doFilter(servletRequest, servletResponse);

}

@Override

public void destroy() {

}

}

四、Filter 生命周期

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

五、过滤器执行流程

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

六、过滤器拦截路径配置

  • 具体资源路径 ===> /xxx.html 或其他
  • 目录拦截 ===> /xxx/*
  • 后缀名拦截 ===> *.jsp 或其他
  • 拦截所有 ===> /*

七、过滤器拦截方式配置

资源被访问的方式

1.注解配置:

设置 @WebFilter 注解的 dispatcherTypes 属性

  • REQUEST:默认值;浏览器直接请求资源
  • FORWARD:转发访问资源
  • INCLUDE:包含访问资源
  • ERROR:错误跳转资源
  • ASYNC:异步访问资源
@WebFilter(urlPatterns = "/*", dispatcherTypes = DispatcherType.FORWARD)

2.web.xml配置

设置 web.xml 文件中 <dispatcher></dispatcher>标签即可

<!--配置 filter-->

<filter>

<filter-name>test</filter-name>

<filter-class>web.filter.FilterTest</filter-class>

</filter>

<!--配置 filter 映射-->

<filter-mapping>

<!--选择配置好的 filter-->

<filter-name>test</filter-name>

<!--配置拦截路径-->

<url-pattern>/*</url-pattern>

<!--配置过滤方式-->

<dispatcher>FORWARD</dispatcher>

</filter-mapping>

八、过滤器链

即配置多个过滤器

1.执行顺序

如果有两个过滤器:过滤器1和过滤器2

  1. 过滤器1
  2. 过滤器2
  3. 资源执行
  4. 过滤器2
  5. 过滤器1

2.过滤器先后顺序问题

(1)注解配置

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

例如:

AFilter 和 BFilter,AFilter就先执行了

(2)web.xml配置

<filter-mapping> 中,谁定义在上边,谁先执行

以上是 Java第四十二天,JavaWeb三大组件,Filter 的全部内容, 来源链接: utcz.com/z/392704.html

回到顶部