Listener
概述
监听器是 Servlet 中一种特殊的类,它们能帮助开发者监听 Web 中的特定事件,比如 ServletContext,HttpSession,ServletRequest 的创建和销毁;属性键值对的创建、销毁和修改等,可以在某些动作前后增加处理和操作。
作用
- 统计在线人数,利用 HttpSessionLisener 或 HttpSessionAttributeListener
- 加载初始化信息:利用 ServletContextListener
- 统计网站访问量
- 实现访问监控
常见 API
// 监听上下文对象的初始化和销毁
interface ServletContextListener {
// 通知上下文对象正在被初始化
void contextInitialized(ServletContextEvent var1);
// 通知上下文对象即将被关闭
void contextDestroyed(ServletContextEvent var1);
}
// 监听上下文对象对属性的增删改操作
interface ServletContextAttributeListener {
// 通知添加了属性键值对
void attributeAdded(ServletContextAttributeEvent var1);
// 通知移除了属性键值对
void attributeRemoved(ServletContextAttributeEvent var1);
// 通知修改了属性
void attributeReplaced(ServletContextAttributeEvent var1);
}
// 监听Session对象的创建和销毁
interface HttpSessionListener {
// session已创建
void sessionCreated(HttpSessionEvent var1);
// session已销毁
void sessionDestroyed(HttpSessionEvent var1);
}
// 监听session的属性增删改操作
interface HttpSessionAttributeListener {
// 通知session中添加了属性
void attributeAdded(HttpSessionBindingEvent var1);
// 通知session中移除了属性
void attributeRemoved(HttpSessionBindingEvent var1);
// 通知session中修改了属性
void attributeReplaced(HttpSessionBindingEvent var1);
}
// 监听请求的初始化和销毁
interface ServletRequestListener {
// 通知请求对象被销毁
void requestDestroyed(ServletRequestEvent var1);
// 通知请求对象正在初始化
void requestInitialized(ServletRequestEvent var1);
// 通知请求对象添加了属性
void attributeAdded(ServletRequestAttributeEvent var1);
// 通知请求对象移除了属性
void attributeRemoved(ServletRequestAttributeEvent var1);
// 通知请求对象修改了属性
void attributeReplaced(ServletRequestAttributeEvent var1);
}
两种配置方式
1、注解
步骤
-
实现监听器接口
-
重写抽象方法
-
声明@WebListener注解
案例代码
/**
* 通过注解配置监听器
*/
// 声明监听器注解
@WebListener
public class CreateListener implements ServletContextListener {
// 重写contextInitialized方法
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Servlet be initialized!!");
}
// 重写contextDestroyed方法
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("Servlet be destroyed!!");
}
}
2、通过 web.xml 配置文件
监听器
/**
* 通过web.xml方式配置监听器
*/
public class XMLListener implements HttpSessionListener {
// 重写sessionCreated方法
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("Session be created: " + httpSessionEvent.getSession().getId());
}
// 重写sessionDestroyed方法
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("Session be destroyed!!");
}
}
Servlet
@WebServlet("/xml")
public class XMLServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession(true);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Webxml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--声明监听器所在的位置-->
<listener>
<listener-class>com.fc.listener.XMLListener</listener-class>
</listener>
</web-app>