`
勤业思行
  • 浏览: 82112 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

Listener开发

阅读更多

 Listener即监听器,通过Listener可以监听容器中的某一执行动作,并根据其要求做出相应的响应。

到目前Servlet2.4开始,一共包含8个Listener接口,可以分为三类:

1)、与ServletContext有关的Listener接口:ServletContextListener和ServletContextAttributeListener。

2)、与HttpSession有关的的Listener接口:HttpSessionListener,HttpSessionAttributeListener,HttpSessionBindingListener和HttpSessionActivationListener.

3)、与ServletRequest有关的接口:ServletRequestListener,ServletRequestAttributeListener.

 

自定义监听器:只需要实现相应的监听器接口并实现其相应方法即可!然后在web.xml中进行监听器的配置

<listener>
 <listener-class>package.class</listener-class>
</listener>

 

 

一、ServletContextListener类

1、ServletContextListener接口:接口中的两个方法:contextInitialized(),用来监听ServletContext的启动和初始化;contextDestroy(),用来监听ServletContext的销毁;这两个方法中都包含一个参数sce,其类型为ServletContextEvent。通过ServletContextEvent对象的getServletContext()方法可以获得ServletContext对象。

 

package listener;

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


public class MyServletContextListener implements ServletContextListener {
	//ServletContext创建时调用该方法
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("ServletContext创建");
                  //获取ServletContext对象
              SerlvetContext context= sce.getServletContext();
	}
	//ServletContext销毁时调用该方法
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext销毁");
	}
}

 

 2、ServletContextAttributeListener接口:用来监听application范围属性变化的监听。三个方法:attributeAdded(),监听application范围属性的添加;attributeReplaced(),监听application范围属性的替换;attributeRemoved(),监听application范围属性的移除。在这三个方法中有一个参数ServletContextAttributeEvent scab,通过ServletContextAttributeEvent 对象的getName()可以获取属性的名称、getValue()获取属性值。

1)、ServletContextAttributeListener监听器

package listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class MyServletContextAttributeListener implements
		ServletContextAttributeListener {
	//application范围属性添加时调用
	public void attributeAdded(ServletContextAttributeEvent scab) {
		System.out.println("添加application范围属性,属性名:" + scab.getName() + ",属性值:" + scab.getValue());
	}
	//application范围属性移除时调用
	public void attributeRemoved(ServletContextAttributeEvent scab) {
		System.out.println("移除application范围属性,属性名" + scab.getName());
		
	}
	//application范围属性替换时调用
	public void attributeReplaced(ServletContextAttributeEvent scab) {
		System.out.println("替换application范围属性,属性名" + scab.getName());
	}
}

 

 2)、页面实例 ApplicationDEmo.jsp

 

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>设置application范围属性</title>
</head>
<body>
	<%
		//添加application范围name属性
		application.setAttribute("name","James");
		//替换application范围name属性
		application.setAttribute("name","123");
		//移除application范围name属性
		application.removeAttribute("name");
	%>
</body>
</html>

 

 

二、HttpSession Listener类

1、HttpSessionListener接口:实现Session的初始化和销毁监听。

该接口有两个方法:sessionCreated(),session的创建和初始化监听;

                           sessionDestroyed(),监听session的销毁。

   两个方法中都包含一个参数: HttpSessionEvent se,调用其getSession()方法可以获取Session对象。

 

 1)、HttpSessionListener类

package listener;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener implements HttpSessionListener{
	//session创建时调用该方法
	public void sessionCreated(HttpSessionEvent se) {
		HttpSession session = se.getSession();
		System.out.println("创建session,ID为" + session.getId());
	}
	//session销毁时调用该方法
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("销毁session");
	}
}

 

 2)、JSP实例:SessionDemo.jsp

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>销毁session</title>
</head>
<body>
	<%
		session.invalidate();//销毁session
	%>
</body>
</html>

 

2、HttpSessionAttributeListener接口:用来监听session范围属性变化的监听。三个方法:attributeAdded(),监听session范围属性的添加;attributeReplaced(),监听session范围属性的替换;attributeRemoved(),监听session范围属性的移除。在这三个方法中有一个参数HttpSessionAttributeEvent se,通过HttpSessionAttributeEvent 对象的getName()可以获取属性的名称、getValue()获取属性值。

1)、HttpSessionAttributeListener监听器

package listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MyHttpSessionAttributeListener implements
		HttpSessionAttributeListener {
	//session范围属性添加时调用
	public void attributeAdded(HttpSessionBindingEvent se) {
		System.out.println("添加session范围属性,属性名:" + se.getName() + ",属性值:" + se.getValue());
	}
	//session范围属性移除时调用
	public void attributeRemoved(HttpSessionBindingEvent se) {
		System.out.println("移除session范围属性" + se.getName());
	}
	//session范围属性替换时调用
	public void attributeReplaced(HttpSessionBindingEvent se) {
		System.out.println("替换session范围属性" + se.getName());
	}
}

 

2)、JSP实例:SessionAttributeDemo.jsp

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>设置session范围属性</title>
</head>
<body>
	<%
		//添加session范围name属性
		session.setAttribute("name","James");
		//替换session范围name属性
		session.setAttribute("name","Forward");
		//移除session范围name属性
		session.removeAttribute("name");
	%>
</body>
</html>

 

 

 

0
0
分享到:
评论
1 楼 El_Nino 2012-06-26  
mark,多谢分享了

相关推荐

Global site tag (gtag.js) - Google Analytics