- 监听器是Servlet规范中的一员。就像Filter一样。Filter也是Servlet规范中的一员。
二、监听器有什么用?
- 静态代码块是一个在类加载时自动执行内部代码的特殊时机,同理,监听器实际上是Servlet规范留给我们javaweb程序员的一些特殊时机。
- 监听器不需要我们自己调用,被web服务器自动调用。
- jakarta.servlet包下:
- ServletContextListener
ServletContext对象创建销毁时分别执行类中两个方法 - ServletContextAttributeListener
向ServletContext域存、删、取数据时调用分别执行类中的三个方法 - ServletRequestListener
ServletRequest对象创建销毁时分别执行类中两个方法 - ServletRequestAttributeListener
向ServletRequest域存、删、取数据时调用分别执行类中的三个方法
- jakarta.servlet.http包下:
- HttpSessionListener
session对象创建销毁时分别执行类中两个方法 - HttpSessionAttributeListener
向Session域存、删、取数据时调用分别执行类中的三个方法 - HttpSessionBindingListener
该监听器不需要使用@WebListener进行标注。
假设User类实现了该监听器,那么User对象在被放入session的时候触发bind事件,User对象从session中删除的时候,触发unbind事件。
假设Customer类没有实现该监听器,那么Customer对象放入session或者从session删除的时候,不会触发bind和unbind事件。 - HttpSessionIdListener
session的id发生改变的时候,监听器中的唯一一个方法就会被调用。 - HttpSessionActivationListener
监听session对象的钝化和活化的。
钝化:session对象从内存存储到硬盘文件。
活化:从硬盘文件把session恢复到内存。
三、实现一个监听器的步骤:
第一步:以ServletContextListener为例,编写一个类实现ServletContextListener接口。并且实现里面的方法。
void contextInitialized(ServletContextEvent event)
void contextDestroyed(ServletContextEvent event)
第二步:在web.xml文件中对ServletContextListener进行配置。
<listener>
<listener-class>com.bjpowernode.javaweb.listener.MyServletContextListener</listener-class>
</listener>
也可以使用注解@WebListener