Filter过滤器
概念
当我们访问服务器的资源时候,过滤器可以将请求拦截下来,完成一些特殊的功能
过滤器的作用
一般用于完成通用的操作。如:登录验证,通用编码处理,敏感字符的过滤
快速入门
步骤
- 定义一个类,实现接口Filter
- 复写方法
- 配置拦截路径
web.xml配置
注释
@WebFilter("/*")//访问所有资源之前,都会执行过滤器
public class filterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("FilterDemo1执行了。。。");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
过滤器细节
web.xml配置
<filter>
<filter-name>demo2</filter-name>
<filter-class>cn.itcast.web.filter.filterDemo2</filter-class>
</filter>
<filter-mapping>
<filter-name>demo2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码块下的代码
过滤器生命周期方法
initi:在服务器启动的后,会创建Filter对象,然后调用init方法。只执行一次。用于资源的加载
doFilter:每一次请求被拦截资源时,会执行。执行多次。
destroy:在服务器关闭后,Filter对象被销毁。如果服务器关闭正常,则调用destroy方法。只是执行一次。用于释放资源
过滤器配置详情
拦截路径配置
- 具体路径:/ index.jsp 只访问/ index.jsp资源的时候,过滤器才会被执行
- 拦截目录:/user/* 访问/user路径下的所有资源的时候,过滤器会被执行
- 后缀名拦截:*.jsp 访问所有后缀名为.jsp资源时,过滤器会被执行
- 拦截所有资源 /* 范文所有资源时,过滤器都会被执行。
拦截方式的配置:资源被访问的方式
注释配置
设置dispatcherTypes属性
- request:默认值。浏览器直接请求资源
- forward:转发访问资源
- include:包含访问资源
- error:错误跳转资源
- async:异步访问资源
过滤器链(配置多个过滤器)
执行顺序(如果有两个过滤器:过滤器1和过滤器2)
- 过滤器1
- 过滤器2
- 资源执行
- 过滤器2
- 过滤器1
先后顺序问题
注解配置
按照类名的字符串比较规则比较,值小的先执行
web.xml配置
谁定义在上边,谁先执行