新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正
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
监听和事件
---------------------------------