监听器Listener

一、监听器

监听器是web应用程序事件模型的一部分,当web应用中的某些状态发生改变时,会产生相应的事件,监听器可以接收这些事件,并可以在事件发生时做相应的处理。

二、监听器常用的接口

2.1、javax.servlet.ServletContextListener

实现该接口可以在servlet上下文对象初始化或者销毁时得到通知

2.2、javax.servlet.ServletContextAttributeListener

实现该接口,可以 在servlet上下文的属性列表发生变化时得到通知

2.3、javax.servlet.http.HttpSessionListener

实现该接口可以在创建session后或者失效前得到通知

2.4、javax.servlet.http.HttpSessionActivationListener

实现该接口的对象,如果绑定到session中,当serssion被钝化或者激活时,servlet容器将通知该对象。

2.5、javax.servlet.http.HttpSessionAttributeListener

实现该接口,可以 在servlet上下文的属性列表发生变化时得到通知

2.6、javax.servlethttp.HttpSessionBindListener

实现该接口,可以使一个对象在绑定serssion或者从serssion中删除时得到通知。

2.7、javax.servlet.servletRequest

实现该接口,可以在请求对象初始化时或者被销毁时得到通知。

2.8、javax.servlet.ServletRequestAttributeListener

实现该接口,可以在请求对象中的属性发生变化是得到通知。

三、监听器的应用

3.1、HttpSessionBindingListener接口

 定义实现HttpSessionBindingListener接口,当有session创建是在线人数+1,当session销毁时在线人数-1.

package demo.web.listener;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class UserListener implements HttpSessionBindingListener {

	public void valueBound(HttpSessionBindingEvent arg0) {
		Constants.ONLINE_USER_COUNT ++;

	}

	public void valueUnbound(HttpSessionBindingEvent arg0) {
		Constants.ONLINE_USER_COUNT --;

	}

}

在web.xml中的简单配置

<listener>
  	<listener-class>demo.web.listener.UserListener</listener-class>
  </listener>

3.2、利用servletContextListener接口

在系统服务启动时,加载DataSource对象,获取数据库连接。

  1. 编写监听器,实现实用JNDI查找数据源。
  2. 将查找到的数据源保存在servletContext上下文中。
  3. 编写一个servlet,读取上下文,并从中查找到数据源。
  4. 在web.xml文件中配置监听器及servlet
public class DataSourceListener implements ServletContextListener{
  public void ContextInitialized(ServletContextEnvent e){
    ServletContext sc = e.getServletContext();
       Context cxt = new InitialContext();// 初始化上下文
       // 获取与逻辑名相关的数据源对象
       DataSource ds  =(DtaSource)cxt.lookup("java:comp/env/jdbc/news");  
        // 将dataSource保存到servletContext上下文中
       sc.serAttribute("DS",ds);
    }
}    

  servlet相关代码:

package demo.web.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	   DataSource ds = (DataSource)getServletContext().getAttribute("DS");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		super.doPost(req, resp);
	}

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		super.service(arg0, arg1);
	}
}

  web.xml中的配置:

<servlet>
  	<servlet-name>myServlet</servlet-name>
  	<servlet-class>demo.web.servlet.MyServlet3</servlet-class>
  	<init-param>
  		<param-name>charSerContent</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>myServlet</servlet-name>
  	<url-pattern>/demo/myServlet</url-pattern>
  </servlet-mapping>
<listener>
  	<listener-class>demo.web.listener.UserListener</listener-class>
</listener>

  

posted @ 2016-07-02 19:22  夏中伟  阅读(328)  评论(0编辑  收藏  举报