session代表客户的会话过程,客户登录时,往session中传入一个对象,即可跟踪客户的会话。在servlet中,传入session的对象如果是个实现httpsessionbindinglistener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用httpsession对象的setattribute方法的时候)和移去的时候(即调用httpsession对象的removeattribute方法的时候或session time out的时候)session对象会自动调用监听器的valuebound和valueunbound方法(这是httpsessionbindinglistener接口中的方法)。 由此可知,登录日志也就不难实现了。 另外一个问题是,怎么统计在线人数,这个问题跟实现登录日志稍微有点不同,统计在线人数(及其信息),就是统计目前有多少个session实例存在,我们能增加一个计数器(如果想存储更多的信息,能用一个对象来做计数器,随后给出的实例中,简单起见,用一个整数变量作为计数器),通过在valuebound方法中给计数器加1,valueunbound方法中计数器减1,即可实目前线人数的统计。当然,这里面要利用到servletcontext的全局特性。(有关servletcontext的叙述请参考servlet规范),新建一个监听器,并将其实例存入servletcontext的属性中,以确保此监听器实例的唯一性,当客户登录时,先判断servletcontext的这个属性是否为空,如果不为空,证实已创建,直接将此属性取出放入session中,计数器加1;如果为空则创建一个新的监听器,并存入servletcontext的属性中。