web 的三大组件
servlet(控制器)
filter(过滤器)
listener(监听器)
拦截器的应用场景
登录校验
统一网站编码
非法字符过滤器
拦截用户请求方法
servletRequest 请求对象,servletResponse 响应对象,filterChain 过滤器链是否放行
生命周期
初始化方法
private void init(FilterConfig config)
执行拦截方法
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
销毁方法
public void destroy();
创建
服务器启动项目加载,创建filter对象,执行init 方法(执行一次)
运行(过滤拦截)
用户访问被拦截目标资源时,执行doFilter方法
销毁
服务器关闭项目卸载时,销毁filter对象,执行destroy方法(一次)
补充
过滤器一定是优先于servlet创建的
拦截路径
精确匹配
用户访问指定目标资源(/targetServlet)时,过滤器进行拦截
目录匹配
用户访问指定目录下(/user/*)所有资源时,过滤器进行拦截
后缀匹配
用户访问只当后缀(*.html)的资源时,过滤器进行拦截
匹配所有
用户访问所有资源(/*)时,过滤器进行拦截
过滤器链
在一次请求中国,如果我们请求匹配了多个filter 通过请求就相当于把这些filter 串起来,形成了过滤器链
需求
用户访问目标资源/targetServlet时,经过filterA,filterB
过滤器链执行顺序(先进后出)
1.用户发送请求
2.filterA 拦截 放行
3.filterB拦截 放行
4.执行目标资源 show.jsp
5. filterB 增强响应
6. filterA 增强响应
7. 封装响应消息格式,返回到浏览器
过滤器中执行的先后问题
配置文件
谁先声明,谁先执行
listener
监听器,httprequest 历史记录 httpsession 统计在线人数 httpservletContext 系统配置信息 1. 创建一个类实现ServletContextListenner 接口 2. 实现ServletContextListenner的contextInitialized 和contextDestroyed 方法 3. 给这个类在xml 中配置