Java_JSP2_Listener监听器浅谈;

与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
 */
@WebListener
public class GetConnListener implements ServletContextListener
{
	//应用启动时,该方法被调用。
	public void contextInitialized(ServletContextEvent sce)
	{
		try
		{
			//取得该应用的ServletContext实例
			ServletContext application = sce.getServletContext();
			//从配置参数中获取驱动
			String driver = application.getInitParameter("driver");
			//从配置参数中获取数据库url
			String 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值