目录
Filter过滤器
–1,概述
–2,使用步骤
–3,创建过滤器
–4,测试
–5,Filter生命周期
–6,测试
–7,过滤器的匹配规则
FilterChain过滤器链
执行顺序:
过滤器的先后顺序
Filter过滤器 –1,概述
用来过滤请求或者响应
当A请求B时,可以在中间添加一个过滤器
当A给B做出响应时,可以在中间添加一个过滤器
1, 创建类implements Filter接口
2, 重写抽象方法doFilter
3, 能否触发过滤器
package cn.tedu.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; //创建过滤器:implements Filter+重写抽象方法 @WebFilter("/*")//拦截所有请求 public class Filter1 implements Filter { //销毁,执行1次 public void destroy() { } //类似于Servlet的service(),会被执行多次 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("过滤器开始执行任务~~"); chain.doFilter(req, resp);//放行,解除阻塞状态 } //初始化,执行1次 public void init(FilterConfig config) throws ServletException { } }–4,测试
直接浏览器访问Servlet就可以触发过滤器的规则
–5,Filter生命周期package cn.tedu.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; //创建过滤器:implements Filter+重写抽象方法 @WebFilter("/*")//拦截所有请求 public class Filter1 implements Filter { //第三阶段,销毁阶段,Filter会自动调用destroy(),只会执行1次 public void destroy() { System.out.println("filter被销毁~~~"); } //第二阶段,类似于Servlet的service()服务阶段,会被Filter执行多次 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("过滤器开始执行任务~~"); chain.doFilter(req, resp);//放行,继续访问目标资源,否则目标资源无法执行 } //第一阶段,初始化阶段,Filter会自动调用init(),只会执行1次 public void init(FilterConfig config) throws ServletException { System.out.println("filter被初始化完成~~~"); } }–6,测试 –7,过滤器的匹配规则
可以有4种配置方式:
1,具体文件: /index.jsp ,是指只有访问index.jsp这一个资源时,过滤器会被执行
2,匹配前缀: /user/* ,是指访问user下的所有资源时,过滤器会被执行
3,匹配后缀: * .jsp, 是指访问所有后缀名为jsp的文件时,过滤器会被执行
4,匹配所有: /* ,是指访问所有资源时,过滤器会被执行
package cn.tedu.filterdemo; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; //@WebFilter("/hello1.html") //只拦截固定资源 //@WebFilter("/user/*") //按照请求前缀拦截 //@WebFilter("*.jsp") //按照请求后缀拦截 @WebFilter("/*") //啥都拦截 public class Filter4 implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("filter doFilter...."); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { } }
FilterChain过滤器链 执行顺序:
有多个过滤器配置时,依次按照:
过滤器1
过滤器2
执行资源
过滤器2
过滤器1
注解配置: 哪个过滤器将会先被执行,会按照类名的字符串比较规则,较小的先执行.如: AFilter先于BFilter执行,Filter3先于Filter4执行
web.xml配置: 依次按照的顺序执行,谁在上面就先执行谁
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)