目录
HttpSessionListener、HttpSessionBindingListener二者的区别
监听器与MVC
监听器
监听器是Web应用程序事件模型的一部分
通过使用监听器,开发者可以将应用程序的关键行为和状态抽象成事件,并在需要的时候采取相应的措施。
Web应用中的某些状态发生改变时会产生相应的事件
ServletContext、HttpSession、ServletRequest三个域对象引发的事件
域对象中的属性引发的事件
监听器可以接收这些事件,以便在事件发生时做出相关处理
创建类实现监听器接口
javax.servlet.http.HttpSessionBindingListener
在valueBound()和valueUnbound()方法中实现用户数量的统计
valueBound(HttpSessionBindingEvent arg0) {
//用户对象存入session时自动调用
//用户数量加1
}
valueUnbound(HttpSessionBindingEvent arg0) {
//用户对象从session中删除时自动调用
//用户数量减1
}
valueUnbound方法会在三种情况下自动调用:
调用使session失效的方法:session.invalidate()
session超时
调用setAttribute重新设置了别的对象,或是调用removeAttribute移除了这个属性
Listener的生命周期
监听器(Listener)在JavaWeb应用程序中起到监听和处理事件的作用。监听器的生命周期与Web应用程序的生命周期密切相关。
-
ServletContextListener会在Web应用程序启动时起作用,并在Web应用程序关闭时销毁。
-
ServletRequestListener会在每次客户端请求到达服务器时起作用,并在服务器响应完成后销毁。
-
HttpSessionListener会在每次HttpSession创建和销毁时起作用。
HttpSessionListener接口
HttpSessionListener
sessionCreated(HttpSessionEvent event)
sessionDestroyed(HttpSessionEvent event)
执行session.invalidate()方法
session会话超时
在web.xml中配置监听器
<listener>
<listener-class>监听器完全限定名</listener-class>
</listener>
HttpSessionListener、HttpSessionBindingListener二者的区别
-
HttpSessionListener只需要设置到web.xml就可以监听整个应用中的所有session
-
HttpSessionBindingListener必须实例化后放入某一个session中,才能监听
-
监听范围:
HttpSessionListener设置一次就可以监听所有session
HttpSessionBindingListener通常是一对一
ServletContextListener接口
contextInitialized(ServletContextEvent arg)
contextDestroyed(ServletContextEvent arg)
监听器分类
根据三个域对象上的具体操作,将监听器划分为三类
监听三个域对象的创建和销毁事件的监听器
监听域对象中属性的增加、删除、替换事件的
监听器监听绑定到HttpSession域中的某个对象的状态的监听器,又称为感知型监听器
常用监听器接口
监听器接口 | 说 明 |
---|---|
javax.servlet. ServletContextListener | 在Servlet上下文对象初始化或销毁时得到通知 |
javax.servlet .ServletRequestListener | 在请求对象初始化时或者被销毁时得到通知 |
javax.servlet.http. HttpSessionListener | 在session创建后或者失效前得到通知 |
javax.servlet. ServletContextAttributeListener | 在Servlet上下文中的属性列表发生变化时得到通知 |
javax.servlet. ServletRequestAttributeListener | 在请求对象中的属性列表发生变化时得到通知 |
javax.servlet.http. HttpSessionAttributeListener | 在session中的属性列表发生变化时得到通知 |
javax.servlet.http. HttpSessionActivationListener | 绑定到session中,当session被钝化或者激活时得到通知 |
javax.servlet.http.HttpSessionBindingListener | 在绑定session或从session中删除时会得到通知 |
使用监听器统计在线用户人数
创建监听器,在监听器的方法中统计人数
监听器分类和用途
感知型监听器无需配置,需要和session绑定
非感知型监听器需要在web.xml中配置
MVC![](https://i-blog.csdnimg.cn/direct/0a81e4beb3fc48bcbce894879d184ba8.png)
MVC设计模式![](https://i-blog.csdnimg.cn/direct/1061ee52a5644c8a94e9d4c4969d4f23.png)
视图(View)- JSP、HTML等:负责与用户交互
控制器(Controller)- Servlet:负责流程控制
模型(Model)- JavaBean:负责业务逻辑处理、数据库访问
MVC 优点
多视图共享一个模型,大大提高代码的可重用性
MVC三个模块相互独立,松耦合架构
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
MVC 缺点
原理复杂
增加了系统结构和实现的复杂性
视图对模型数据的低效率访问