Filter(过滤器)
过滤器介绍
web过滤器:过滤器实现对web资源请求的拦截,完成特殊的功能操作,尤其是对请求的预处理。
作用:一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...
过滤器工作流程
过滤器生命周期
init()
:在服务器启动后,会创建Filter实例对象,然后调用init()方法,进行初始化。只执行一次。用于加载资源doFilter()
:拦截请求处理,完成指定功能,每一次请求被拦截资源时,都会执行。destroy()
:Filter对象会驻留在内存中,在服务器关闭后会调用destroy()方法,Filter对象才被销毁。用于释放资源。
简单实现过滤器
- 编写java类实现Filter接口,实现doFilter()方法
- 配置web.xml文件,对filter类注册,并设置拦截请求
FilterDemo1.java
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
public class FilterDemo1 implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("过滤器执行了....");
//请求传回过滤链
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
web.xml配置
<filter>
<filter-name>demo1</filter-name>
<filter-class>filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern> //拦截路径
</filter-mapping>
FilterConfig 使用
Filter 的 init 方法中提供了一个 FilterConfig 对象。
如 web.xml 文件配置如下:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>filter.FilterDemo</filter-class>
<init-param>
<param-name>initparam</param-name>
<param-value>我是初始化参数</param-value>
</init-param>
</filter>
在 init 方法使用 FilterConfig 对象获取参数:
public void init(FilterConfig config) throws ServletException {
// 获取初始化参数
String initparam = config.getInitParameter("initparam");
// 输出初始化参数
System.out.println("初始化参数: " + initparam);
}
关于过滤器配置
关于过滤器配置方式有两种:一种是配置web.xml文件,另外一种就是注解的方式。
- 配置web.xml文件
<filter>
<filter-name>demo1</filter-name> //过滤器名
<filter-class>filter.FilterDemo1</filter-class> //类所在的包
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern> // filter 所拦截的请求路径
<dispatcher>REQUEST</dispatcher> //指定过滤器所拦截的资源被 Servlet 容器调用的方式
</filter-mapping>
- 使用注解
@WebFilter("/*")
@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.REQUEST)
资源被访问的方式
①在web.xml中配置
②在注解中设置dispatcherTypes属性
访问方式:
- REQUEST:默认值。浏览器直接请求资源
- FORWARD:转发访问资源
- INCLUDE:包含访问资源
- ERROR:错误跳转资源
- ASYNC:异步访问资源
过滤器的应用顺序
当配置多个过滤器,形成过滤链时,过滤器的执行顺序为web.xml配置中