servlet中的监听器分类:
按监听的对象划分
1.用于监听应用程序环境对象(ServletContext)的事件监听器
2.用于监听用户会话对象(HttpSession)的事件监听器
3.用于监听请求消息对象(ServletRequest)的事件监听器
按监听的事件类项划分
1.用于监听域对象自身的创建和销毁的事件监听器
2.用于监听域对象中的属性的增加和删除的事件监听器
3.用于监听绑定到HttpSession 域中的某个对象的状态的事件监听器
Servlet 事件监听器的注册和调用过程都是由web 容器自动完成的,当发生被监听的对象被创建,修改和销毁等事件时,web 容器将调用与之相关的Servlet时间监听器对象的相应方法,用户在这些方法中编写的事件处理代码既被执行。另外,由于在一个web 应用中只会为每一个事件监听类创建一个实例对象,有可能出现多个线程同时调用一个事件监听对象的情况,所以要注意线程的安全问题
ServletContext容器相关的监听器
与此容器相关的监听器为ServletContextListener,可以监听servlet context的创建和销毁,当监听到servlet context创建时,将会自动执行监听器的contextInitialized方法;
当监听器监听到servlet context对象销毁时,将会自动调用contextDestroyed方法
此监听器可以用于在web应用启动时,初始化一些基础参数或创建基础数据库等内容。在结束时将这些数据清除或销毁。下面是示例小代码:
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("context对象被创建");
ServletContext context = (ServletContext)sce.getSource();
System.out.println(context.getMajorVersion());
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("context对象被删除");
}
web
servlet的监听器不需要进行注册,只需要在web.xml文件中配置,程序将自动将其注册到相关事件源上去。
<listener>
<listener-class>cn.itcast.web.listener.MyServletContextListener</listener-class>
</listener>
HttpSession相关监听器
与此容器相关的监听器接口是HttpSessionListener,此接口提供了两个方法:
sessionCreated(HttpSessionEvent se)
sessionDestroyed(HttpSessionEvent se)
只要实现此接口,便可以监听HttpSession的创建和销毁。创建和销毁将会自动调用上面对应的方法。此技术可以用在统计当前在线用户人数。同样,也许要在web.xml中配置。由于session是的有效时间默认是30分钟,可用在web.xml文件中通过<session-config>标签来配置session有效时间。如下是配置session有效时间为1分钟。一分钟过后,将会自动销毁session,从而自动调用监听器的sessionDestroyed方法
<session-config>
<session-timeout>1</session-timeout>
</session-config>
httpRequest对象监听器
只要实现ServletRequestListener接口便可以监听request对象的创建和销毁,此接口有两个方法:
requestDestroyed(ServletRequestEvent sre)
requestInitialized(ServletRequestEvent sre)
每次发起一个request请求后,都会创建一个request对象,从而导致requestInitialized被执行。此技术可以用来监控网站性能,可以统计一段时间内服务器接收多少请求。