监听事件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
监听和事件
---------------------------------