JavaWeb中,监听器是一种组件,能够监听项目的启动和停止,用户会话的创建和销毁,以及各种组件的添加、更新和删除,能够通过监听对象的状态改变,自动做出反应执行响应代码。
应用场景:
启动网站后进行初始化、检测用户的数量等。
常用的监听器接口:
ServletContextListener 监听项目的启动和停止
方法:
contextInitialized 项目加载完成
contextDestroyed 项目停止
HttpSessionListener 监听用户会话的创建和销毁
sessionCreated 每一个用户第一次访问时调用
sessionDestroyed 每个用户退出系统后调用
监听器的配置:
方式1 web.xml
方式2 注解
@WebListener
案例:监听网站的启动
/**
* 项目的监听器
* @author chenheng
*
*/
@WebListener
public class WebApplicationListener implements ServletContextListener{
//项目启动
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("项目启动了!!!!");
//保存一些数据到项目中
sce.getServletContext().setAttribute("money", 999999);
}
//项目停止
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("项目停止了!!!!!");
}
}
案例:监听网站的用户数
/**
* 会话监听器
* @author chenheng
*
*/
@WebListener
public class UserListener implements HttpSessionListener{
//用户会话创建
@Override
public void sessionCreated(HttpSessionEvent se) {
//把用户的数量保存到ServletContext(application)中
ServletContext application = se.getSession().getServletContext();
//获得用户的总数
Object count = application.getAttribute("count");
if(count == null){
//如果是第一个用户,没有总数,添加总数
application.setAttribute("count", 1);
System.out.println("第一个用户");
}else{
//如果不是第一个,就用户数量加1
application.setAttribute("count", (int)count + 1);
System.out.println("新用户来了");
}
}
//用户会话销毁
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext application = se.getSession().getServletContext();
Object count = application.getAttribute("count");
if(count != null && (int)count > 0){
application.setAttribute("count", (int)count - 1);
System.out.println("用户走了");
}
}
}
/**
* 关闭Session的Servlet
*/
@WebServlet("/close.do")
public class CloseSessionServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//关闭Session
req.getSession().invalidate();
}
}
JSP页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
当前网站在线人数:${count}