Java_JSP2_Listener监听器浅谈;

来源:互联网 发布:外国人留学中国知乎 编辑:程序博客网 时间:2024/06/06 08:32
与AWT事件编程完全相似,监听不同Web事件的监听器也不相同;

 1、常用Web事件监听器接口

 (1)、ServletContextListener:监听Web应用的启动和关闭;

 (2)、ServletContextAttributeListener:监听ServletContext范围(application)内属性的改变;

 (3)、ServletRequestListener:监听用户请求;

 (4)、ServletRequestAttributeListener:监听ServletRequest范围(request)内属性的改变;

 (5)、HttpSessionListener:监听用户session的开始和结束;

 (6)、HttpSessionAttributeListener:监听HttpSession范围(session)内属性的改变;

 2、ServletContextListener接口方法

 (1)、contextInitialized(ServletContextEvent sce):启动Web应用时,系统调用Listener的该方法;

 (2)、contextDestroyed(ServletContextEvent sce):关闭Web应用时,系统调用Listener的该方法;

 注意:ServletContextListener的作用有点类似于load-on-startup Servlet,都可用于在Web应用启动时,回调方法来启动某些后台程序,这些后台程序负责为系统运行提供支持;

 3、ServletContextListener实例_GetConnListener.java

 说明:该Listener会在应用启动时获取数据库连接(Connection),并将获取到的连接设置成application范围内的属性;

=>GetConnListener.java

<span style="font-size:18px;">package lee;import java.sql.*;import javax.servlet.*;import javax.servlet.annotation.*;/** * GetConnListener_class * description:ServletContextListener监听器,监听web应用启动、关闭; * date:13:52 2014-10-30; * @author cyb_23 * @version  1.0 */@WebListenerpublic class GetConnListener implements ServletContextListener{//应用启动时,该方法被调用。public void contextInitialized(ServletContextEvent sce){try{//取得该应用的ServletContext实例ServletContext application = sce.getServletContext();//从配置参数中获取驱动String driver = application.getInitParameter("driver");//从配置参数中获取数据库urlString url = application.getInitParameter("url");//从配置参数中获取用户名String user = application.getInitParameter("user");//从配置参数中获取密码String pass = application.getInitParameter("pass");//注册驱动Class.forName(driver);//获取数据库连接Connection conn = DriverManager.getConnection(url, user, pass);//将数据库连接设置成application范围内的属性application.setAttribute("conn" , conn);}catch (Exception ex){System.out.println("Listener中获取数据库连接出现异常"+ ex.getMessage());}}//应该关闭时,该方法被调用。public void contextDestroyed(ServletContextEvent sce){//取得该应用的ServletContext实例ServletContext application = sce.getServletContext();Connection conn = (Connection)application.getAttribute("conn");//关闭数据库连接if (conn != null){try{conn.close();}catch (SQLException ex){ex.printStackTrace();}}}}</span>

切记:在web.xml下配置应用参数,类似
 <context-param>  
        <param-name>driver</param-name>  
        <param-value>com.mysql.jdbc.Driver</param-value>  
 </context-param>
 特别特别说明:此例将Connection实例设置成application属性,导致所有页面都使用相同的Connection实例,实际上这种做法的性能非常差;较为实用的做法是:应用启动时将一个数据源(javax.sql.DataSource实例)设置成application属性,页面通过DataSource实例来取得数据库连接,再进行数据库访问(http://blog.csdn.net/cyb_23/article/details/39924577;有关数据源配置信息);

4、配置Listener

说明:配置Listener只要向Web应用注册Listener实现类即可,无须配置参数之类;
 >配置Listener方式
 (1)、使用@WebListener修饰Listener实现类即可;
 (2)、在web.xml文档中使用<listener.../>元素进行配置;
 <listener>
<!-- 指定Listener的实现类 -->
  <listener-class>lee.GetConnListener</listener-class>
 </listener>


特别说明:如果能帮助到您,请您留下点滴痕迹,让我知道我的存在是有意义的;如果不能帮助到您,请接受我的歉意;

0 0
原创粉丝点击