JSP监听器用法分析
本文实例讲述了jsp监听器用法。分享给大家供大家参考,具体如下:
监听器也叫listener,是servlet服务的监听器。它可以监听客户端的请求,服务端的操作等。比如统计在线用户数量。每当增加一个httpsession时,就会触发sessioncreate(httpsessionevent se)方法,这样就可以给在线人数加1.常用的监听器接口如下:
1. servletcontextattributelistener监听对servletcontext属性的操作。比如增加,删除,修改属性。
2. servletcontextlistener监听servletcontext。当创建servletcontext时,激发contextinitialized(servletcontextevent sce)方法;当销毁servletcontext时,激发contextdestroyed(servletcontextevent sce)方法。
3. httpsessionlistener监听httpsession的操作。当创建一个session时,激发session created(httpsessionevent se)方法;当销毁一个session时,激发sessiondestroyed (httpsessionevent se)方法。
4. httpsessionattributelistener监听httpsession中的属性的操作。当在session增加一个属性时,激发attributeadded(httpsessionbindingevent se) 方法;
当在session删除一个属性时,激发attributeremoved(httpsessionbindingevent se)方法;
当在session属性被重新设置时,激发attributereplaced(httpsessionbindingevent se) 方法。
一个在线统计的例子:
public class online implements servletcontextlistener,httpsessionlistener,httpsessionattributelistener(){ private servletcontext application = null; public void contextinitialized(servletcontextevent arg0) { //根据响应事件参数初始化servletcontext this.application = arg0.getservletcontext(); //在servletcontext中存放一个空的用户信息列表 application.setattribute("users", new arraylist()); } public void sessiondestroyed(httpsessionevent arg0) { list list = (list)application.getattribute("users"); string name = arg0.getsession().getattribute("name").tostring(); list.remove(name); application.setattribute("users", list); } public void attributeadded(httpsessionbindingevent arg0) { list list = (list)application.getattribute("users"); if(arg0.getname().equals("name")){ list.add(arg0.getvalue().tostring()); } application.setattribute("users", list); } }
web.xml文件中配置:
<listener> <listener-class>package.classname</listener-class> </listener>
附:session在何时被创建?
常见的误解是session在有客户端访问时就被创建,然而事实是某server端调用httpservletrequest.getsession(true)这样的语句时才被创建。注意如果jsp页面没有显式的使用<%page session="false"%>来关闭session,则在jsp页面编译成servlet页面时会自动加上httpservletrequest.getsession(true)这句话。这也是jsp中隐藏对象session的来历。
希望本文所述对大家jsp程序设计有所帮助。