Listener是Servlet提供的一个拓展,用于监听服务器端所发生的各种事件以及请求。
常用的Listener有这么六种:
- ServletContextListener:
Web
容器事件监听; - ServletContextAttributeListener:
Web
容器的属性事件监听; - HttpSessionListener:
Session
事件监听; - HttpSessionAttributeListener:
Session
的属性事件监听; - ServletRequestListener:请求事件监听;
- ServletRequestAttributeListener:请求的属性事件监听;
ServletContext 相关监听器
ServletContextListener
ServletContextListener
用于监听Web
容器的创建与销毁。
package javax.servlet;
import java.util.EventListener;
public interface ServletContextListener extends EventListener {
// Web容器创建事件
default void contextInitialized(ServletContextEvent sce) {
}
// Web容器销毁事件
default void contextDestroyed(ServletContextEvent sce) {
}
}
ServletContextAttributeListener
ServletContextAttributeListener
监听Application
范围内的属性操作事件,举个例子,我们可以用它来监听jsp
内置对象中的application
对象的setAttribute()
、removeAttribute()
方法。
package javax.servlet;
import java.util.EventListener;
public interface ServletContextAttributeListener extends EventListener {
// 属性添加事件
default void attributeAdded(ServletContextAttributeEvent event) {
}
// 属性移除事件
default void attributeRemoved(ServletContextAttributeEvent event) {
}
// 属性更新事件
default void attributeReplaced(ServletContextAttributeEvent event) {
}
}
HttpSession 相关监听器
HttpSessionListener
HttpSessionListener
用于监听Session
的创建与销毁。
package javax.servlet.http;
import java.util.EventListener;
public interface HttpSessionListener extends EventListener {
// Session创建事件
default void sessionCreated(HttpSessionEvent se) {
}
// Session销毁事件
default void sessionDestroyed(HttpSessionEvent se) {
}
}
HttpSessionAttributeListener
HttpSessionAttributeListener
监听Session
范围内的属性操作事件。
package javax.servlet.http;
import java.util.EventListener;
public interface HttpSessionAttributeListener extends EventListener {
default void attributeAdded(HttpSessionBindingEvent event) {
}
default void attributeRemoved(HttpSessionBindingEvent event) {
}
default void attributeReplaced(HttpSessionBindingEvent event) {
}
}
ServletRequest 相关监听器
ServletRequestListener
ServletRequestListener
用于监听请求的创建与销毁。
package javax.servlet;
import java.util.EventListener;
public interface ServletRequestListener extends EventListener {
default void requestDestroyed(ServletRequestEvent sre) {
}
default void requestInitialized(ServletRequestEvent sre) {
}
}
ServletRequestAttributeListener
ServletRequestAttributeListener
监听request
范围内的属性操作事件。
package javax.servlet;
import java.util.EventListener;
public interface ServletRequestAttributeListener extends EventListener {
default void attributeAdded(ServletRequestAttributeEvent srae) {
}
default void attributeRemoved(ServletRequestAttributeEvent srae) {
}
default void attributeReplaced(ServletRequestAttributeEvent srae) {
}
}
配置
监听器Listener
的配置比Servlet
、Filter
都要简单的多,在Web.xml
中加上如下标签及内容:
<listener>
<!-- 监听器的完全限定名 -->
<listener-class>com.vingyun.Listener</listener-class>
</listener>
番外:Listener底层原理
Listener监听器底层的实现是采用回调函数的方式,观察者(Listener)向被观察者进行回调函数的注册,比如注册一个创建事件onCreate()
,那么当被观察者在执行自身创建事件的时候,就会同时调用回调函数。
大概就是这么一个样子,这个底层的实现还需要更深入的研究。