什么是Filter过滤器:
1.Filter过滤器是JavaWeb的三大组件之一。其中三大组件分别是“servlet程序”,“listener监听器”与“Filter过滤器”。
2.Filter过滤器是JavaEE的规范,也就是接口。
3.Filter过滤器的主要作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
1.权限检查
2.日记操作
3.事务管理
4.等。
在客户端与服务器交互时Filter过滤器的原理示意图:
Filter的基本使用步骤:
1.编写一个类去实现Filter接口。
2.实现过滤方法doFilter()。
3.到web.xml中配置Fliter的拦截路径。
Filter的生命周期:
Filter的生命周期包含几个方法:
1.构造器方法
2.init初始化方法
第1,2步,在web工程启动时执行(Filter已经创建)
3.doFilter过滤方法
每次兰街道请求都会执行。
4.destroy销毁方法
停止web工程时就会执行,(停止web工程,就会销毁Filter过滤器)
FilterConfig类
FilterConfig类是Filter过滤器的配置文件类。
Tomcat每次创建Filter过滤器时,同时也会创建一个FilterConfig类,包含了Filter配置文件的配置信息。
FilterConfig类的作用:
获取filter过滤器的配置内容。
1.获取Filter的名称filter-name的内容。
2.获取在web.xml中配置的init-param初始化参数。
3.获取ServletContext对象。
FilterChain过滤器链:
Filter 过滤器
Chain 链,链条
FilterChain 就是过滤器链(多个过滤器如何在一起工作)
多个Filter过滤器执行时,执行顺序由Web.xml中从上到下配置的顺序执行。
多个Filter过滤器执行特点:
1.所有filter和目标资源默认都执行在同一线程中;
2.多个filter共同执行时,他们都使用同一个request对象。
Filter的拦截路径:
- 精确匹配
<url-pattern>/xxx.jsp</url-pattern>
以上配置路径表示,请求地址为http://ip:port/工程路径/xxx.jsp
- 目录匹配
<url-pattern>/目录名/*</url-pattern>
以上配置路径表示,请求地址为http://ip:port/工程路径/目录名/*
某个目录下的全部资源
- 后缀名匹配
<url-pattern>*.html</url-pattern>
以上配置路径表示,请求地址为必须以.html结尾才会拦截到
<url-pattern>*.do</url-pattern>
以上配置路径表示,请求地址为必须以.do结尾才会拦截到
<url-pattern>*.action</url-pattern>
以上配置路径表示,请求地址为必须以.action结尾才会拦截到
Filter过滤器只关心请求的路径是否匹配,不关心请求的资源是否存在。
Listener监听器
Listener简介:
Listener是服务器三大组件之一。
- 监听者:程序员自己创建
- 监听对象:ServletContext、HttpSession、HttpServletRequest等
- 监听事件:创建、修改、销毁等
- 监听结果:项目需求
服务器组件共性
- 都需要实现某个接口
- 都需要在web.xml中注册
Listener作用
- Listener用于监听JavaWeb程序中的事件。
Listener使用:
public class TestServletContextListener implements ServletContextListener {
/**
* ServletContext【application】对象被创建时,调用
* @param sce
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("application对象被创建啦!");
}
/**
* ServletContext【application】对象被销毁时,调用
* @param sce
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("application对象被销毁啦!");
}
}
<listener>
<listener-class>com.atguigu.listener.TestServletContextListener</listener-class>
</listener>
总结三大服务器组件
- 组件加载顺序,与注册顺序无关。【Listener > Filter > Servlet】