一. 简介
概念: Filter表示过滤器, 是JavaWeb三大组件(Servlet, Filter, Listener)之一
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理......
二. 快速入门
定义类, 实现Filter接口, 并重写所有方法
配置Filter拦截资源的路径: 在类上定义@WebFilter注解
放行
放行要注意的点:
放行前:对request数据进行处理
放行后:对response数据进行处理
代码:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo01 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//放行前,对request数据进行处理
System.out.println("1.Filter已执行...");
//放行
filterChain.doFilter(servletRequest,servletResponse);
//放行后,对response数据进行处理
System.out.println("3.放行后...");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
jsp代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Demo1</title>
</head>
<body>
<h1>Hello JSP</h1>
<%
System.out.println("2.hello ");
%>
</body>
</html>
结果展示:
三. Filter执行流程
四. Filter使用细节
Filter拦截路径配置
拦截具体的资源: /hello.jsp:只有访问hello.jsp时才会被拦截
目录拦截: /user/*:访问/user下的所有资源,都会被拦截
后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有:/*访问所有资源,都会被拦截
过滤器链
一个Web应用可以配置多个过滤器, 这多个过滤器称为过滤器链
注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序