将太好了,开始不懂,捋清楚。讲得非常棒
Session钝化机制
监听器启动顺序
Web监听器
监听器定义
监听器启动顺序
优先级:监听器>过滤器>Servlet
思路:在HttpSession监听器中记录人数num,sessionCreated人数增加1,sessionDestroyed人数减1。 对于用户的访问时间,IP等信息,可以在ServletRequest监听器中,先将ServletRequest对象转为HttpServletRequest对象,获取sessionId,再判断ArrayList中是否存在此sessionId,若没有,sessionId,当前时间格式化,IP存入User对象存入ArrayList。当session销毁时要将ArrayList中的此User对象移除。注意num 和 ArrayList 都要存入ServletContext的属性中,以便下次获取。
web.xml中web-app节点下的version属性定义servlet版本号
使用servlet3.0的前提条件
使用servlet3.0新标准jar包
JDK必须在1.6以上版本
编译器的编译级别为6.0
在web.xml文件中,使用3.0规范
使用支持servlet3.0特性的web容器,比如tomcat7
注意:servlet3.0中无法去定义监听器的顺序
注册监听器无需在web.xml中注册,只需要使用@WebListener注解
HttpSession中的对象状态:
绑定:session.setAttribute
解除绑定:session.removeAttribute
钝化:将session对象持久化到存储设备上
活化:将session对象从存储设备上恢复
当多个用户同时在线时session内存的开销很大,为了提高服务器性能使用Session钝化机制。
web应用程序被重新加载情况:web.xml修改,Spring.xml修改,Tomcat reload等。
HttpSession绑定接口HttpSessionBindingListener和钝化活化接口HttpSessionListener
创建JavaBean实现接口,而不是创建监听器。因为监听的是一个对象的状态,而不是监听器状态。
当将JavaBean对象存入session中就会触发绑定方法。当保存对象的session对象被remove时,触发解除绑定方法。
钝化活化必需要实现Serializable序列化接口,才能使得session对象钝化活化生效。
监听域对象中的属性事件监听器对应接口
ServletContenxt——ServletContenxtAttributeListener
HttpSession——HttpSessionAttributeListener
ServletRequest——ServletRequestAttributeListener
第一次访问,触发监听器add方法。 再次访问触发监听器replace方法。 销毁时触发remove方法。
ServletRequest对象在请求时创建,请求结束后销毁。
第一次访问时,监听request对象创建方法调用先于session
获取request参数
session创建方式:用户第一次打开浏览器,web容器分配一个session
session销毁方式:1、关闭服务器 2、关闭浏览器直到session过期 3、不关闭浏览器,session超时
web.xml配置session超时时间,配置0表示永远不会超时,配置1表示超时时间为1分钟。超时不是定时器,没有确切的时间。
按监听的事件划分
监听域对象自身的创建和销毁的事件监听器
监听域对象中的属性的增加和删除的事件监听器
监听绑定到HttpSession域中的某个对象的状态的事件监听器
域对象的对应监听接口
ServletContext— ServletContextListener
HttpSession— HttpSessionListener
ServletRequest— ServletRequestListener
在web.xml中配置ServletContext初始化参数
获取ServletContext初始化参数
当webz中存在多个监听器时,是根据web.xml中监听器的注册顺序加载监听器。
加载优先级: 监听器>过滤器>Servlet
在web.xml中注册监听器
启动服务器时创建application(ServletContext)对象,监听器contextInitialized方法调用;关闭服务器时销毁application(ServletContext)监听器contextDestroyed方法调用。
监听器用途
统计在线人数和在线用户
系统启动时加载初始化信息
统计网站访问量
跟Spring结合
步骤:
创建一个实现监听器接口的类
配置web.xml进行注册
监听器定义
使用注解方式注册监听器的方法。
在类上加上@WebListener就可以了。
Servlet3.0下监听器的用法
Servlet3.0使用的前提,环境要求。
在Servlet3.0中,可以直接使用注解注册监听器。
注意:
在session失效前,再一次request请求,request是每次新建,可是session中的属性是执行replace方法,同样context也是执行的replace事件
属性的增加和删除的事件监听器
ServletRequest的事件监听
首先初始化request,然后创建session,然后销毁request对象。
注意request在一次请求结束后就销毁了。
session超时时间的设置。
在web.xml中配置session-config参数,如果设置为0,代表不受时间限制,单位为分钟。
但是需要注意的是,这个时间不一定准,比如配置的是1分钟,有可能不是1分钟的时间销毁。
session销毁的原因:
关闭服务器;
关闭浏览器一段时间直到session过期;
不关闭浏览器,session超时
HttpSession的事件监听器
主要用途:
统计在线人数;
记录访问日志
context监听器,监听上下文对象,容器创建时生成,容器关闭时销毁。
web监听器的用途。
系统启动时加载的初始化信息有:
缓存
定时器
公用的数据库链接
web监听器的定义