Listener
【Listener】Listener
监听web应用是否启动,session是否有创建
一.Hello Listener
Listener的作用是用于监听web应用的创建和销毁,及其在其上attribute发生的变化,
web应用即ServletContext对象(jsp的隐式对象application)
除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。
二.监听Context
对Context的监听分生命周期的监听,和Context上Attribute变化的监听两种。
1.编写ContextListener
ublic class ContextListener implements ServletContextListener {
//对应当前web应用的销毁
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("web 应用销毁 ");
}
//对应当前web应用的初始化
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("web 应用初始化 ");
}
}
2.配置 web.xml (配置监听器)
3.测试
web应用的自动重载需要如下前提:
- 配置: server.xml中对应的
- 某个servlet 发生了变化,导致这个web应用自动重启
4.编写 ContextAttributeListener
public class ContextAttributeListener implements ServletContextAttributeListener {
//监听属性的增加
@Override
public void attributeAdded(ServletContextAttributeEvent e) {
// TODO Auto-generated method stub
}
//监听属性的移除
@Override
public void attributeRemoved(ServletContextAttributeEvent e) {
// TODO Auto-generated method stub
}
//监听属性的替换
@Override
public void attributeReplaced(ServletContextAttributeEvent e) {
// TODO Auto-generated method stub
}
}
5.配置web.xml
配置ContextAttributeListener
listener.ContextAttributeListener
6.testContext.jsp
故意造成Context属性的增加,替换和移除
7.测试
http://127.0.0.1/testContext.jsp - 某个servlet 发生了变化,导致这个web应用自动重启
1.编写 SessionListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent e) {
}
@Override
public void sessionDestroyed(HttpSessionEvent e) {
}
}
2.配置web.xml
3.测试
随意访问任意页面,如果是第一次访问,都会触发session创建,后续访问不会触发session的创建
4.编写 SessionAttributeListener
public class SessionAttributeListener implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent e) { }
public void attributeRemoved(HttpSessionBindingEvent e) { }
public void attributeReplaced(HttpSessionBindingEvent e) { }
}
5.配置web.xml
6.testSession.jsp
7.测试
访问页面http://127.0.0.1/testSession.jsp
四.监听Request
RequestListener 实现接口 ServletRequestListener和ServletRequestAttributeListener
测试
五.统计在线人数
Http协议是短链接的,所以无法在服务端根据建立多少连接来统计当前有多少人在场,可以通过session多少来估计在线人数
一旦一个用于访问服务器,就会创建一个session,如果用户持续访问,那么该session会持续有效,如果经理30分钟,对应的session也会被销毁。
1.编写 OnlineNumberListener
public class OnlineNumberListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent e) {
//application对象是ServletConntext接口的实例,可以通过reques.getServletContext()来获取,application映射的就是web应用本身
ServletContext application=e.getSession().getServletContext();
Integer online_number=(Integer) application.getAttribute("online_number");
if(null==online_number)
online_number=0;
online_number++;
application.setAttribute("online_number", online_number);
}public void sessionDestroyed(HttpSessionEvent e) {
ServletContext application=e.getSession().getServletContext();
Integer online_number=(Integer) application.getAttribute("online_number");
if(null==online_number) {
online_number=0;
}
else
online_number--;
application.setAttribute("online_number", online_number);
}
2.配置web.xml
配置 listener.OnlineNumberListener
3.checkOnlineNumber.jsp
通过EL表达式,直接获取application中的值
当前 在线人数 : ${online_number}
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长