1 概念
- JavaWeb的
三大组件
。Servlet
程序、Listener
监听器、Filter
过滤器。 - Filter是一个
接口
。 - 作用:
拦截请求
,过滤响应。 - 常见的应用场景:权限检查、日记操作、事务管理…
2 Filter过滤器的使用步骤
- 1、编写一个类实现Filter接口
- 2、实现方法doFilter()
- 3、到web.xml中配置Filter的拦截路径
// 注意Filter不要导错包
import javax.servlet.Filter;
public class EncodingFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding("UTF-8");
// 这一行代码的作用是:让程序继续往下访问目标资源,不能省略
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
3 生命周期
- 构造方法,
启动
web工程时执行 - init初始化方法,
启动
web工程时执行 - doFilter过滤器方法,
拦截
到请求时执行 - destroy销毁方法,
停止
web工程时执行
4 FilterConfig类
- 是init方法中的参数。
- 是Filter过滤器的
配置文件类
- tomcat每次创建一个Filter时,也会
同时创建
一个FilterConfig类,这里包含了Filter配置文件的配置信息。
FilterConfig类的作用(与ServletConfig
类的作用相似):
- 获取Filter的
名称
,即filter-name
标签中的内容。 - 获取web.xml配置文件中,Filter标签下的
init-param
参数。 - 获取
ServletContext
对象。
5 FilterChain过滤器链
- 是doFilter方法的参数
- 含义:
多个过滤器
如何一起工作
6 Filter过滤器的拦截路径
- 精确匹配
<url-pattern>/target.jsp</url-pattern>
<!--
表示精确匹配的路径为:http://ip:port/工程路径/target.jsp
/与servlet标签中一样,不能省略
target.jsp表示一个具体的资源名
-->
- 目录匹配
<url-pattern>/admin/*</url-pattern>
<!--
表示请求地址为:http://ip:port/工程路径/admin/*
-->
- 后缀名匹配
<url-pattern>*.html</url-pattern>
<!--
表示请求地址必须以.html结尾,不能加/号
-->
- Filter过滤器只关心请求的地址
是否匹配
,不关心请求的资源是否存在
参考资料