Web监听器的用途
1.统计在线人数和在线用户
2.系统启动时加载初始化信息
3.统计网站访问量
按监听的对象划分
_________________________________________________________________________________________________________________________
1.用于监听应用程序环境对象(ServletContext)的事件监听器
ServletContext监听器需要继承ServletContextListener接口
public void contextInitialized(ServletContextEvent arg0);
public void contextDestroyed(ServletContextEvent arg0);
主要用途: 定时器 全局属性对象的设置
web.xml的配置
<listener>
<listener-class>com.my.listen.ServletContextListenerImp</listener-class>
</listener>
<context-param>
<param-name>initparam</param-name>
<param-value>mylisten</param-value>
</context-param>
context-param全局属性可通过一下方法获得
public void contextInitialized(ServletContextEvent arg0) {
arg0.getServletContext().getInitParameter("initparam");
}
_________________________________________________________________________________________________________________________
2.用于监听用户会话对象(HttpSession)的事件监听器
HttpSession监听器需要继承HttpSessionListener接口
主要用途: 统计在线人数 统计访问日志
在线实例:
<span style="color:#000000;">public class MySessionListen implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("sessionCreated:::::::");
int i = 0;
if(arg0.getSession().isNew()){
if(arg0.getSession().getServletContext().getAttribute("num")== null){
System.out.println("nullnulnull");
arg0.getSession().getServletContext().setAttribute("num", 1);
i=1;
}else{
i = (int)arg0.getSession().getServletContext().getAttribute("num");
arg0.getSession().getServletContext().setAttribute("num", i++);
}
System.out.println("在线人数:"+i);
}else{
System.out.println("老Session");
}
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("sessionDestroyed:::::::");
int i = (int)arg0.getSession().getServletContext().getAttribute("num");
arg0.getSession().getServletContext().setAttribute("num", i--);
System.out.println("在线人数:"+i);
}</span>
设置Session超时时间(分钟)
<session-config>
<session-timeout>1</session-timeout>
</session-config>
_________________________________________________________________________________________________________________________
3.用于监听请求消息对象(ServlerRequest)的事件监听器
ServlerRequest监听器需要继承ServlerRequestListener接口
主要用途: 读取参数 记录访问历史
按监听的事件划分
_________________________________________________________________________________________________________________________
1.监听域对象自身的创建和销毁的事件监听器
如上
_________________________________________________________________________________________________________________________
2.监听域对象中的属性的增加和删除的事件监听器(实现三个方法)
ServletContext 继承 ServletContextAttributeListener
HttpSession-->HttpSessionAttributeListener
ServlerRequest-->ServlerRequestAttributeListener
<span style="font-size:12px;color:#6633FF;">public void attributeAdded(ServletContextAttributeEvent arg0) {
<span style="color:#FF0000;">arg0.getName();
arg0.getValue();</span>
// TODO Auto-generated method stub
}
@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
}</span>
_________________________________________________________________________________________________________________________
3.监听绑定到HttpSession域中的某个对象的状态的事件监听器
绑定javabean到HttpSession中,javabean继承
HttpSessionBindingListener
绑定:valueBound方法
解绑 : valueUnbound
HttpSessionActivationListener 这两个接口 另外还需要继承Serializable接口
钝化 sessionWillPassivate
活化 sessionDidActivate
Tomcat中两种Session钝化管理器 Session钝化机制由SessionManager管理,使用哪种钝化管理器,在tomcat/conf/context.xml配置
org.apache.catalina.session.StandardManger
当Tomcat关闭或重启,tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中。
钝化后的文件被保存在:Tomcat安装路径/work/Catalina/hostname/applicationname/SESSION.ser
org.apache.catalina.session.Persistentmanager
可以配置主流内存的Session对象数目,将不常使用的Session对象保存到文件系统,当用时再重新加载
默认情况下,Tomcat提供两种钝化驱动类
org.apache.Catalina.FileStore和Org.apache.Catalina.JDBCStore