Listener监听器
是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。
注解@WebListener
1.ServletContextListener
监听ServletContext域的创建与销毁
创建:服务器启动针对每一个web应用创建servletcontext,触发contextInitialized ( )方法
销毁:服务器关闭前先关闭代表每一个web应用的ServletContext,触发contextDestroyed( )方法。
2.servletRequestListener
监听ServletRequest域创建与销毁
创建:用户每一次访问都会创建request对象,触发requestlnitialized ()方法。
销毁:当前访问结束,request对象就会销毁,触发requestDestroyed方法。
3.ServletContextAttributeListener——监听ServletContext域的属性变化的
当ServletContext对象添加属性时,触发attributeAdded()方法。
当ServletContext对象修改属性时,触发attributeReplaced( )方法。
当ServletContext对象删除属性时,触发attributeRemoved()方法。
在线人数统计
过滤器Filter
Filter有3个阶段,分别是初始化,拦截和过滤,销毁。
初始化阶段:当服务器启动时,我们的服务器(Tomcat)就会读取配置文件,扫描注解,然后来创建我们的Filter。
拦截和过滤阶段:只要请求资源的路径和拦截的路径相同,那么过滤器就会对请求进行过滤,这个阶段在服务器运行过程中会一直循环。
销毁阶段:当服务器(Tomcat)关闭时,服务器创建的Filter也会随之销毁。
doFilter方法中处理完业务逻辑之后,必须添加filterchain.doFilter(servletRequest,servletResponse);否则请求/响应无法向后传递,一直停留在过滤器中。
配置过滤器
①注解@webFilter("/*")【拦截所有】
②xml中配置
<filter>
<filter-name>1</filter-name>
<filter-class>com.example.jlsystem</filter-class>
</filter>
<filter-mapping>
<filter-name>3</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
多个过滤器的先后顺序
多个过滤器之间会依次执行,这个依次就是按照过滤器名字的字典顺序来执行的,也就是说,在案例中,Filter1比Filter2的字典顺序靠前,所以就会先执行Filter1,再执行Filter2。在执行完放行前的语句之后,在执行放行后的语句的时候,是和之前的执行顺序是相反的,也就是说,多个过滤器链遵循先进先出,后进后出的原则
我们可以看见Filter01先进行过滤,然后交给Filter02,然后访问资源,然后Filter02对响应进行过滤,然后Filter01对响应进行过滤。
过滤词