← 返回首页
Servlet基础教程(二十)
发表时间:2020-04-09 11:56:23
讲解监听器

1.什么是监听器

监听器(Listener),监听器就是监听某个对象的的状态变化的组件。

Java Web中的监听器概念与Javase中是事件监听器概念类似,包含以下三方面: 事件源:被监听的对象 ,包括三个域对象 request、 session、 servletContext 监听器:监听事件源对象  事件源对象的状态的变化都会触发监听器 。 注册监听器:将监听器与事件源进行绑定。

2.监听器的分类

ServletContext域 HttpSession域 ServletRequest域
域对象的创建与销毁 ServletContextListener HttpSessionListener ServletRequestListener
域对象的属性变化 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

3.实例

使用HttpSessionListener统计在线人数。

1)创建com.listener包,创建OnlineNumberListener。

package com.listener;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener("onLineNumberListener")
public class OnlineNumberListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {

        System.out.println("session created...");
        Integer onlineNumber = 0;
        ServletContext application = httpSessionEvent.getSession().getServletContext();
        if(application.getAttribute("onlineNumber")!=null){
            onlineNumber = (Integer) application.getAttribute("onlineNumber");
        }
        onlineNumber++;
        application.setAttribute("onlineNumber",onlineNumber);

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("session destroyed...");
        Integer onlineNumber = 0;
        ServletContext application = httpSessionEvent.getSession().getServletContext();
        if(application.getAttribute("onlineNumber")!=null){
            onlineNumber = (Integer) application.getAttribute("onlineNumber");
        }
        onlineNumber--;
        application.setAttribute("onlineNumber",onlineNumber);
    }
}

2)创建index.jsp,在欢迎页中使用el表达式显示在线人数。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        #footer{
            margin: 0px auto;
            width: 280px;
            text-align: center;
        }
    </style>
</head>
<body>
<h1>欢迎页面</h1>
<hr>
<div id="footer">
    在线人数是:${applicationScope.onlineNumber}
</div>
</body>
</html>

3)测试

启动tomcat,测试项目首页。

注意:Tomcat服务器如果仅仅只是访问静态页面(html)或者Servlet都不认为是创建新会话(session),只有在访问了jsp页面时才认为是创建了新会话。所以,这个测试案例不可以使用静态页面(HTML)测试。