张老师对Servlet事件监听器的三个接口做了详细的说明,并举例用
ServletContextListener事件监听器对象的contextInitialized()方法和contextDestoryed方法来控制数据库的连接和关闭来形象的说明了Servlet事件处理器的用处,有助于理解其原理。
ServletContextListener接口
它用于监听代表Web应用程序的ServletContext对象的创建和销毁的事件,当在Web应用程序中注册一个或多个实现了ServletContextListener接口的事件监听器后,Web容器在创建和销毁ServletContext对象时就会产生一个ServletContextEvent事件对象,接着依次调用每个ServletContext事件监听器中相应的处理方法,并将ServletContextEvent事件对象传递给这些方法。在
ServletContextListener接口中定义了两个事件处理方法,contextInitialized()和contextDestroyed()方法,他们分别用于处理ServletContext对象的创建事件和销毁事件。
contextInitialized()方法
public void contextInitialized(ServletContextEvent sce)
当ServletContext对象创建时,web容器会调用ServletContextListener的
contextInitialized方法,contextInitialized方法接受到一个ServletContextEvent对象的参数,通过这个参数可以获得当前被创建的
ServletContext对象。
contextDestroyed方法
public void contextDestroyed(ServletContextEvent sce)
当ServletContext对象销毁时,web容器会调用ServletContextListener的
contextDestoryed方法,并将ServletContextEvent对象传递给contextDestoryed方法。
可以利用ServletContextListener事件监听器的编写一些实现特殊功能的程序,例如创建全局共享的数据库链接。
1.当Web应用程序被加载时,其对应的ServletContext对象被创建,Web服务器将调用ServletContextListener事件监听器对象的contextInitialized()方法,在此方法中编写获得数据库链接的代码,并把这个获得连接的对象保存到ServletContext对象中,所有的Servlet程序和JSP页面中就可以直接从ServletContext对象中取出被保存的链接对象来访问数据库,避免每个Servlet程序和JSP页面都去创建新的数据库链接,提高了程序运行效率。
2.当Web应用程序被卸载时,其对应的ServletContext对象被销毁,Web服务器将调用web容器会调用ServletContextListener监听器对象的contextDestoryed方法,在此方法中编写关闭数据库连接的代码,这样就可以确保数据库链接对象在Web应用程序卸载时被销毁,从而避免浪费数据库链接资源的现象。
HttpSessionListener接口
它用于监听Web应用程序中的用户会话对象HttpSession的创建和销毁事件,当在Web应用程序中注册一个或多个实现了HttpSessionListener接口的事件监听器后,Web容器在创建或销毁每个HttpSession对象时就会产生一个HttpSessionEvent对象,然后依次调用每个HttpSession事件监听器中的相应处理方法,并将HttpSessionEvent对象传递给这些方法,在HttpSessionListener接口中定义了两个事件处理方法:sessionCreated()和sessionDestroy(),他们分别在HttpSession对象被创建和销毁时被调用。
HttpRequestListener接口
它用于监听Web应用程序中的ServletRequest对象的创建和销毁事件,其原理类似月前两个接口。HttpRequestListener接口中定义了两个方法,requestInitialized()和requestDestroy()方法,他们分别用于处理ServletRequest对象的创建事件和销毁事件。