基本概念
- Filter 过滤器,是 JavaWeb 的三大组件之一,三大组件为 : Servlet、Filter、Listener
- 过滤器是向 Web 应用程序的请求和响应处理添加处理功能的 Web 服务组件
- 过滤器相当于在浏览器与 Web 资源之间的一道过滤网,在访问资源之前通过过滤器对请求进行过滤、操作等,也可以对响应进行修改、判断以及拦截
使用方式
- 自定义类实现 Filter 接口并重写 doFilter 方法
- 在web.xml文件中配置过滤器(与配置 servlet 类似)
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest, servletResponse);
}
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.yamin.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
常用类
Filter接口
- 用于描述过滤器对象,可以对资源的请求和资源的响应进行筛选操作
| 方法 | 功能 |
| ----------------------------------------------------- | ---------------------- |
| void init(FilterConfig filterConfig) | 实现过滤器的初始化操作 |
| void doFilter(ServletRequest req,ServletResponse res) | 执行过滤操作的功能逻辑 |
| void destory() | 实现过滤器的销毁操作 |
FilterConfig 接口
- 主要用于描述过滤器的配置信息
| 方法 | 功能 |
| ------------------------------------ | ------------------------ |
| String getFilterName() | 获取过滤器的名字 |
| String getInitParameter(String name) | 获取指定初始化的参数信息 |
| Enumeration getInitParameterNames() | 获取所有的初始化参数信息 |
| ServletContext getServletContext() | 获取ServletContext对象 |
过滤器链
- 如果多个过滤器都满足过滤条件,则容器依据映射的先后顺序来调用各个过滤器,然后返回通过过滤器的顺序相反
- 例如:三个过滤器的顺序为 1 -> 2 -> 3,返回过滤器的顺序则是 3 -> 2 -> 1
<filter-mapping>
<filter-name>myFilter1</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter2</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter3</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
浏
览 滤 虑 虑 务
器 ←
1 2 3
Filter 优点
- 实现代码的"可插拔",即使增加或者减少某个功能模块,都不会影响到系统的正常执行
- 可以将多个相同处理逻辑的模块集中写在过滤器中,可重复利用,方便代码的维护