过滤器 Filter
2024年11月17日大约 2 分钟
作用:拦截请求,对请求进行预处理,然后将请求转发给目标资源
实现方式
- 编写一个类实现Filter接口
- 重写Filter接口中的方法
- 在web.xml中配置过滤器
- 注解配置过滤器
重写Filter接口中的方法
import javax.servlet.*;
// 实现接口
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {
// 初始化方法,在web服务器启动时执行,执行一次
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
// 过滤方法,每次请求时执行,执行多次
}
@Override
public void destroy() {
// 销毁方法,在web服务器关闭时执行,执行一次
}
}
其中doFilter
里面的参数是:
- ServletRequest servletRequest:请求对象
- ServletResponse servletResponse:响应对象
- FilterChain filterChain:过滤器链对象
在完成过滤操作后,使用chain对象的doFilter()方法将执行权交给下一个过滤器,如果没有下一个过滤器,则将执行权交给目标资源
在web.xml中配置过滤器
<filter>
<filter-name>过滤器名称</filter-name>
<filter-class>过滤器类的全名</filter-class>
<init-param>
<param-name>初始化参数的名称</param-name>
<param-value>初始化参数的值</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>过滤器名称</filter-name>
<url-pattern>过滤器的访问路径</url-pattern>
<dispatcher>过滤器拦截方式</dispatcher>
</filter-mapping>
四种拦截方式
<dispatcher>REQUEST</dispatcher> 默认的! //拦截直接请求方式
<dispatcher>FORWARD</dispatcher> //拦截请求转发方式
<dispatcher>INCLUDE</dispatcher> //拦截请求包含方式
<dispatcher>ERROR</dispatcher> //拦截错误转发方式
<dispatcher>ASYNC</dispatcher> //拦截异步方式
注解配置过滤器
// 实现接口
// 使用注解
@WebFilter(filterName = "过滤器名称", urlPatterns = "过滤器的访问路径")
public class MyFilter implements Filter {
// ...
}