Servlet 监听器Listener

 一.什么是监听器

     监听器可以接收事件,并完成相关的处理.

 

 二.监听器分类

  

三.如何使用监听器

   3.1>定义一个类来实现Listener不同的接口;监听不同Web事件的监听器不相同,

     常用的Web事件监听器接口有如下几个:

 

  • ServletContextListener:用于监听Web应用的启动和关闭。
  • ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变。
  • ServletRequestListener:用于监听用户请求。
  • ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变。
  • HttpSessionListener:用于监听用户session的开始和结束。
  • HttpSessionAttributeListener:用于监听HttpSesssion范围(session)内属性的改变。

 

  案例1: 创建一个Listener,用于在启动时获取数据库连接,设置到application中,关闭应用时,关闭连接。

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;



/**
 * 应用上下文所有的 :连接数据库
 * 
 * @author Administrator
 * 
 *         ServletContextListener:用于监听Web应用的启动和关闭
 * 
 */
public class ConnectionListen implements ServletContextListener {

	// 开始
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		try {
			System.out.println("contextInitialized==>数据库连接");

			// 取得应用的ServletContext实例
			ServletContext application = sce.getServletContext();
			// 从配置参数中获取数据库信息
			String driver = application.getInitParameter("driver");
			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 e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	// 结束
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		
	
		
		System.out.println("contextDestroyed==>关闭数据库连接");
		// 取得该应用的ServletContext实例
		ServletContext application = sce.getServletContext();
		Connection conn = (Connection) application.getAttribute("conn");
		// 关闭数据库连接
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

}


 3.2>配置文件web.xml

 

 

<!-- 全局参数 -->
	<context-param>
		<param-name>driver</param-name>
		<param-value>com.mysql.jdbc.Driver</param-value>
	</context-param>
	<context-param>
		<param-name>url</param-name>
		<param-value>jdbc:mysql://localhost:3306/food</param-value>
	</context-param>
	<context-param>
		<param-name>user</param-name>
		<param-value>root</param-value>
	</context-param>
	<context-param>
		<param-name>pass</param-name>
		<param-value>***</param-value>
	</context-param>

	<!-- 监听器 -->
	<listener>
		<listener-class>com.hlx.lis.ConnectionListen</listener-class>
	</listener>

 

 

 

3.3>启动Tomcate

 

    

 

 2>使用ServletContextAttributeListener

  ServletContextAttributeListener用于监听ServletContext(application)范围内属性的变化,实现该接口的监听器需要实现三个方法:

  • attributeAdded(ServletCOntextAttributeEvent event);当程序把一个属性存入application范围时出发该方法。
  • attributeRemoved(ServletContextAttributeEvent event);当程序把一个属性从application范围删除时出发该方法。
  • attributeReplaced(ServletContextAttributeEvent event);当程序替换application范围内的属性时将出发该方法。

3>使用ServletRequestListener和ServletRequestAttributeListener

  ServletRequestListener用于监听用户请求的到达,实现该接口的监听器需要实现如下两个方法:

  • requestInitialized(ServletRequestEvent sre);用户请求到底、被初始化是出发该方法。
  • requestDestroyed(ServletRequestEvent sre); 用户请求结束、被销毁时触发该方法。

  ServletRequestAttributeListener则用于监听ServletRequest(request)范围内属性的变化,

  实现该接口的监听器需要实现attributeAdded、attributeRemoved、attributeReplaced三个方法。

  应用程序完全可以采用一个监听器来监听多个事件,只要让该监听器实现类同时实现多个监听器接口即可,不如同时实现      ServletRequestListener、ServletRequesetAttributeListener。

  使用HttpSessionListener和HttpSessionAttributeListener与使用ServletRequestListener和ServletRequestAttributeListener非常相似。

4>HttpSessionListener用于监听用户session的创建和销毁,实现该接口的监听器需要实现:

  •   sessionCreate(HttpSessionEvent se);用户与服务器的会话开始、创建时触发该方法。
  •   sessionDestroyed(HttpSessionEvent se);用户与服务器的会话断开、销毁时触发该方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值