
JavaWeb具有三大组件:Servlet,Filter,Listener
在之前的文章中,我们已经学习了Servlet,这篇文章我们来介绍Filter和Listener来补全这部分知识点
首先Filter的汉语意义为:过滤器
过滤器可以把对资源的请求拦截下来,并做出相应判断并考虑是否放行
过滤器通常用来实现一些特殊的功能,比如:权限控制,统一编码处理,敏感字符处理等


如上图是使用过滤器的流程,我们通过以下问题来研究过滤器的执行流程:
放行前逻辑 会被执行两次,肯定不会这样设计了;
所以访问完资源后,会回到 放行后逻辑,执行该部分代码。
通过上述的说明,我们就可以总结Filter的执行流程如下:

其中执行放行前逻辑是针对request进行;而执行放行后逻辑是针对response进行的
进行 Filter 开发分成以下三步实现:

@WebFilter 注解。而注解的 value 属性值 /* 表示拦截所有的资源

上述代码中的
chain.doFilter(request,response);就是放行,也就是让其访问本该访问的资源。
Filter和Serlvet一样,我们采用注解的格式来标记使用地址
那么我们就可以根据使用要求来设置不同的Filter使用场景,配置不同的拦截资源
拦截路径主要分为四种:
一个Web应用中,可以配置多个过滤器,这多个过滤器被称为过滤器链

其中的顺序为:
Filter1 的放行前逻辑代码Filter1 的放行代码Filter2 的放行前逻辑代码Filter2 的放行代码Filter2 的放行后逻辑代码Filter1 的放行后逻辑代码以上流程串起来就像一条链子,故称之为过滤器链。
注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序来比较
Listener 表示监听器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。
监听器可以监听在 application,session,request 三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
request 和 session 我们学习过。
而 application 是 ServletContext 类型的对象。
ServletContext 代表整个web应用,在服务器启动的时候,tomcat会自动创建该对象。在服务器关闭时会自动销毁该对象。
JavaWeb 提供了8个监听器:

这里面只有 ServletContextListener 这个监听器后期我们会接触到,ServletContextListener 是用来监听 ServletContext 对象的创建和销毁。
ServletContextListener 接口中有以下两个方法
void contextInitialized(ServletContextEvent sce):ServletContext 对象被创建了会自动执行的方法void contextDestroyed(ServletContextEvent sce):ServletContext 对象被销毁时会自动执行的方法我们只演示一下 ServletContextListener 监听器
ServletContextListener 接口@WebListener 进行配置代码如下:
@WebListener
public class ContextLoaderListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
//加载资源
System.out.println("ContextLoaderListener...");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//释放资源
}
}启动服务器,就可以在启动的日志信息中看到 contextInitialized() 方法输出的内容,同时也说明了 ServletContext 对象在服务器启动的时候被创建了。
好的,关于Filter和Listener我们就介绍到这里
该文章属于学习内容,具体参考B站黑马程序员陈老师的JavaWeb课程