过滤器
一.简述及入门案例
javaWeb中三大组件(Servlet、Filter、listener)之一:Filter
- 过滤器是服务器上的Java小程序,实现Filter接口。
- 作用:过滤、筛选 (大门门卫、刷卡闸机、筛子)
应用环境:
1、权限校验 (有权限,看资源,没权限,提示没有权限)
2、乱码解决、字符处理
3、自动登录
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>com.czxy.demo1.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/hehe/*</url-pattern>
</filter-mapping>
其中 <url-pattern>/hehe/*</url-pattern> 过滤路径。 对哪个路径进行过滤
代码:
public class FilterDemo1 implements Filter {
/**
* 销毁方法
*/
public void destroy() {
}
/**
* 过滤方法
* @param req
* @param resp
* @param chain
* @throws ServletException
* @throws IOException
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("fd1执行了");
chain.doFilter(req, resp);
}
/**
* 初始化方法
* @param config
* @throws ServletException
*/
public void init(FilterConfig config) throws ServletException {
}
}
二.生命周期&放行
创建:服务器正常启动时。 调用该过滤器init();
销毁:服务器正常关闭时。 调用该过滤器destroy();
一个Filter类,内存中有一个对象
放行:
目标资源:被拦截之前,原本需要访问的资源。
放行:chain.doFilter()
- 执行放行后,请求会被发给后面的过滤器,如果后面没有过滤器了,直接被放行给目标资源。
- 未执行放行,请求会被当场拦截,无法访问目标资源
三.过滤器链及执行流程
1、过滤器的<url-pattern>可以一致。servlet不行
2、多过滤器的执行顺序:
根据<filter-mapping>的放置顺序从上到下依次执行
3、chain.doFilter()
放行时,优先寻找链上下一个过滤器,如果后面没有过滤器了,最后才执行目标资源
4、请求可以被过滤
响应可以被过滤
请求过滤顺序:1、2、3
响应过滤顺序:3、2、1
四.过滤器配置
url-pattern的配置与servlet中的配置一样:
url-pattern--
Servlet:访问路径
Filter:拦截路径
* 三种配置:
* 完全路径匹配:以 / 开始 /aaa /aaa/bbb
* 目录匹配: 以 / 开始 /* /aaa/*
* 扩展名匹配: 不能以 / 开始 *.do *.jsp *.action
分模块过滤:
用户模块: /user/
过滤:/user/*
商品模块:/product/
过滤:/product/*
一个过滤器可以设置多个url-pattern
一个url-pattern被多个过滤器设置。
Servlet的url-pattern不能重复
Filter的url-pattern可以重复
- servlet-name的配置,通过url-pattern拦截一个Servlet的资源.也可以通过servlet-name标签进行拦截.
- dispatcher的配置 (拦截类型)
* REQUEST :拦截浏览器发来的请求。(默认值)
* FORWARD :拦截请求转发
* ERROR :拦截跳转到错误页面.全局错误页面.
* INCLUDE :拦截在一个页面中包含另一个页面.
五.FilterConfig对象
Servlet----ServletConfig
存储了Servlet的配置信息
ServletConfig相当于Servlet的身份证
Filter----FilterConfig
存储了Filter的配置信息
FilterConfig相当于Filter的身份证
代码:
public void init(FilterConfig config) throws ServletException {
System.out.println(config.getFilterName());
System.out.println(config.getInitParameter("uname"));
ServletContext sc = config.getServletContext();
}
六.过滤器中的程序跳转
程序跳转:
Servlet:
请求转发:return “forward:/路径?参数”;
重定向:return “redirect:/路径?参数”;
- Filter:
请求转发:
- 重定向:
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!
注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~