1. 概念
JavaWeb中的三大组件:
- Servlet
- Filter(过滤器)
- Listener(监听器)
Filter不是静态资源,或者是不产生请求和响应,它的作用是对请求和响应做预处理。
Java中的过滤器使用场景:
验证信息的登录、处理字符的问题、过滤敏感词汇等。
1.2 快速入门
步骤:
1.实现一个接口 Filter 包 javax.servlet
2.重写三个方法 核心方法是 doFilter()
package com.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
//只要服务器启动,任何一个servlet启动(每一个servlet对应一个注解),都会过滤
//@WebFilter("/TestServlet")//精准拦截
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init...");
}
/**
* 核心过滤方法
* ServletRequest servletRequest 请求对象
* ServletResponse servletResponse 响应对象
* FilterChain filterChain 过滤链
* 重点 核心
* */
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//
System.out.println("过滤...");
//放行代码
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("销毁...");
}
}
1.3 配置Filter
1.3.1 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_3_1.xsd"
version="3.1">
<!-- 注册 -->
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>com.filter.FilterDemo1</filter-class>
</filter>
<!-- 配置过滤器:配置过滤拦截规则 -->
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
1.3.2 注解配置
@WebFilter("/*")
//只要服务器启动,任何一个servlet启动(每一个servlet对应一个注解),都会过滤
@WebFilter("/TestServlet")
//精准拦截
1.4 Filter的执行流程
浏览器在访问服务器的时候,要发送一个http的请求,这个请求的资源,先匹配过滤器中的注解写法的路径,能匹配到的话,就进行拦截,过滤器中有放行代码。
- 1.执行过滤器
- 2.是否满足过滤条件,
- 如果满足,过滤掉,哪里来回哪里去
- 如果不满足,放行
- 3.放行之后,执行资源,
- 4.再次回到过滤器,
- 5.最后给客户端一个响应。
1.5 Filter生命周期
- 1.构造方法
- 2.init方法
- 3.doFilter方法
- 4.destroy方法
1.6 Filter的路径问题
@WebFilter()
拦截路径:
1.具体的拦截路径 /TestServlet
2.拦截目录 /user/*
3.拦截指定后缀 *.do *.action
4.拦截所有的资源 /*