监听事件Servlet监听器的那些事儿

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

      Servlet监听器对象可以在事件发生前、后做一些必要的处理,这就是监听器的意思地点了。那么罕见的监听器有哪些?在什么时候,怎么运用监听器呢?

    罕见的监听器接口:

    1.ServletContextAttributeListener:监听ServletContext的属性操作,如,添加、删除、修改

    
2.ServletContextListener:        监听ServletContext,当创立的 时候触发contextInitialized(ServletContextEvent sce)事件;当销毁的时候触发contextDestroyed(ServletContextEvent sce)方法。contextDestroyed(ServletContextEvent sce)事件。

    
3.HttpSessionListener:                监听HttpSession,当创立Session时,触发sessionCreated(SessionEvent se)事件;当Session销毁时,触发sessionRemoved(SessionEvent se)事件。

    
4.HttpSessionAttributeListener:           监听HttpSession中属性的操作,增加属性,触发attributeAdded(HttpSessionBingdingEvent se)事件;删除属性,触发attributeRemoveded(HttpSessionBingdingEvent se)事件;重设HttpSession,触发attributeReplaced(HttpSessionBingdingEvent se)事件。

    

    实例加深懂得:

    实例1.使用监听器,实现在线人数的统计:

    OnlineCounter类,执行详细的人数增加或者增加的动作:

    

public class

    OnlineCounter

    { private static long online =0; public static long getOnline(){ return online; } public static void raise(){ online++; } public static void reduce(){ online--; } }

    

    OnlineCounterListener

    

    ,实现HttpSessionListener接口:(在 sessionCreated和sessoinDestroyed方法中调用OnlineCounter的执行增加和增加的方法):

    

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

public class OnlineCounterListener implements HttpSessionListener{


	public void sessionCreated(HttpSessionEvent hse){
		OnlineCounter.raise();
	}

	public void sessoinDestroyed(HttpSessionEvent hse){

		OnlineCounter.reduce();
	}
}

    

    配置web.xml 的<listener>节点:

    

<listener>
	<listener-class>sevletlistener.SecondListener</listener-class>
</listener>

    

    每日一道理
有些冷,有些凉,心中有些无奈,我一个人走在黑夜中,有些颤抖,身体瑟缩着,新也在抖动着,我看不清前方的路,何去何从,感觉迷茫,胸口有些闷,我环视了一下周围,无人的街头显得冷清,感到整个世界都要将我放弃。脚步彷徨之间,泪早已滴下……

    jsp显示人数:

<%@ page import ="xxx.OnlineCounter"%>
<%@= OnlineCounter.getOnline()%>

退出会话(提供一个注销按钮):
<form action ="exit.jsp" methd = post>

	<input type =submit value="exit">
</form>


exit.jsp:<% session.invalidate();%>

    

    比较监听和数据库字段统计,省去了打开、关闭数据库的资源消耗

    

    实例2:监听器管理同享数据库连接:

    保证每新生成一个servlet context都市有一个可用的数据库连接,并且全部的连接对会在context关闭的时候随之关闭。

     MyConnectionManager:实现ServletContextListener接口的类:

    

public class MyConnectionManager implements ServletContextListener{

	public void contextInitiallized(ServletContextEvent e){

		//创立数据库连接
		Connection con =.......;
		e.getServletContext().setAttribute("conn",con);		
		
	}

	public void contextDestroyed(ServletContextEvent e){

		Connect con =(Connection) e.getServletContext().getAttribute("con");
		
		try{

			con.close();
		}catch(SQLException ignored){

		//关闭数据库连接
		}
	}


}

    

    

    同样在web.xml中配置<listener>节点:

    

<listener>
	<listener-class>XXX.MyConnectionManager</listener-class>
</listener>

    总结:

    通过上面两个例子,看出监听的本质就是一些事件;

    监听对于性能的影响,要看监听的频率和对象资源以及处理逻辑;

    通过监听可以提高系统的安全级别。

    

    

文章结束给大家分享下程序员的一些笑话语录: 古鸽是一种搜索隐禽,在中国快绝迹了…初步的研究表明,古鸽的离去,很可能导致另一种长着熊爪,酷似古鸽,却又习性不同的猛禽类——犤毒鸟

--------------------------------- 原创文章 By
监听和事件
---------------------------------

posted @ 2013-05-31 21:57  xinyuyuanm  阅读(303)  评论(0编辑  收藏  举报