您的位置:首页 > 其它

servlet监听小结

2012-12-04 14:54 190 查看
对于servlet监听器这一讲,相对来说还是很简单也非常容易上手的。主要是实现ServletContext,HttpSession,ServletRequest三个域对象的监听。只要在web.xml中使用了<listener>标签进行说明,web容器就自动的把配置的监听器注册到事件源上了。这些监听器对象主要分为以下三个方面展开说明。

第一,是监听三个域对象的创建和销毁。

ServletContextListener接口,HttpSessionListener接口,ServletRequestListener接口分别用来监听ServletContext对象,HttpSession对象,ServletRequest对象的创建和销毁。当这些对象创建或销毁时,对应的监听器中各自有争对创建和销毁的方法进行监听。我们只要实现这些接口,然后在web.xml中配一下。

此类监听器最典型的应用是统计当前在线人数。

当用户访问jsp页面,实际上就是创建了各自的session会话对象,这样我们就可以实现HttpSessionListener接口,重写监听创建session的方法,创建一个num变量,每监听到一次创建session,num就加1,把num存到context域中,监听到一个session被创建了,就从context中拿出num,加1后再放入context域中。同样,当用户离开,代表用户会话的session对象消失,在监听销毁session的方法中讲num减一,在其他页面中也可以拿到num,就可以粗略显示出网站当前在线人数。

由于session对象的销毁时间很难把握,我们可以创建一个session扫描器来控制session对象的销毁时间。

本程序完成当session对象1分钟没有被使用时,就销毁之。主要用到了定时器类Timer来实现。

观察定时器的方法schedule(TimerTask task, long delay, long period),也就是说每隔一分钟,我们就把进行的任务放到task对象中,它有一个run方法,实际上是启动了一个线程。写一个类继承TimerTask,在run方法中得到所有的session对象,sessio有个getLastAccess方法,与当前时间比较,当发现一分钟未访问此session对象,就摧毁之。我们要写一个类同时实现ServletContextListener和HttpSession接口,在监听ServletContext创建的方法中定义定时器,这样web工程一启动定时器就启动了,同时在监听session创建的方法中得到新的session,放到集合中,传给定时器的任务,进行判断。

第二,是监听三个域对象属性的变化。

这三个监听属性变化的接口分别是ServletContextAttributeListener,HttpSessionAttributeListener,ServletRequestAttributeListener。实现它们就可以在方法attributeAdded,attributeReplaced,attributeRmoved中监听属性增加,属性替换和属性被销毁三个事件。

第三,JavaBean 对象本身如果实现了HttpSessionBindingListener,HttpSessionActivationListener接口就可以感知自己被绑定到session中,从session删除和随session对象持久化到存储设备中,从存储设备中恢复。而且不用再web.xml中注册监听器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: