Web中Listener的创建
使用Listener只需要两个步骤:
- 定义Listener实现类。
- 通过Annotation或在web.xml文件中配置Listener
实现Listener类
监听不同Web事件的监听器不相同,常用的Web事件监听器接口有如下几个:
- ServletContextListener:用于监听Web应用的启动和关闭。
- ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变。
- ServletRequestListener:用于监听用户请求。
- ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变。
- HttpSessionListener:用于监听用户session的开始和结束。
- HttpSessionAttributeListener:用于监听HttpSesssion范围(session)内属性的改变。
以ServletContextListener为例,要实现这个接口,需要实现两个方法:
- contextInitialized(ServletCOntextEvent sce):启动web应用时,系统调用Listener的该方法。
- contextDestroyed(ServletContextEvent sce):关闭web应用时,系统调用Listener的该方法。
ServletContextListener的作用有点类似于load-on-startup Servlet,都可用于在Web应用启动时,回调方法来启动某些后台程序,这些后台程序负责为系统运行提供支持。
例:创建一个Listener,用于在启动时获取数据库连接,设置到application中,关闭应用时,关闭连接。
@WebListener
public class GetConnListener implements ServletContextListener{
//应用启动是,该方法被调用
public void contextInitialized(ServletContextEvent sce){
try{
//取得应用的ServletContext实例
ServletContext application = sce.getServletContext();
//从配置参数中获取数据库信息
String driver = application.getInitParameter("driver");
String url = application.getInitParameter("url");
String user = application.getInitParameter("user");
String pass = application.getInitParameter("pass");
//注册驱动
Class.forName(driver);
//获取数据库连接
Connection conn = DriverManager.getConnection(url,user,pass);
//将数据库连接设置成application范围内的属性
application.setAttribute("conn",conn);
}catch(Excetpion e){
e.printStackTrace();
}
} //应用关闭时,该方法被调用
public void contextDestroyed(ServletContextEvent sce){
//取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
Connection conn = (Connection)application.getAttribute("conn");
//关闭数据库连接
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
配置Listener
配置Listener只要向Web应用注册Listener实现类即可,无需配置参数之类的东西。为Web应用配置Listener有两种方式:
- 使用@WebListener修饰Listener实现类。
- 在web.xml文档中使用<listener.../>元素进行配置。
使用@WebListener时通常无需指定任何属性,只要使用该Annotation修饰Listener实现类即可向Web应用注册该监听器。
在web.xml中使用<listener.../>元素进行配置时只要配置其实现类即可,如:
<listener>
<!-- 指定Listener的实现类 -->
<listener-class>luxl.GetGonnListener</listener-class>
</listener>
使用ServletContextAttributeListener
ServletContextAttributeListener用于监听ServletContext(application)范围内属性的变化,实现该接口的监听器需要实现三个方法:
- attributeAdded(ServletCOntextAttributeEvent event);当程序把一个属性存入application范围时出发该方法。
- attributeRemoved(ServletContextAttributeEvent event);当程序把一个属性从application范围删除时出发该方法。
- attributeReplaced(ServletContextAttributeEvent event);当程序替换application范围内的属性时将出发该方法。
使用ServletRequestListener和ServletRequestAttributeListener
ServletRequestListener用于监听用户请求的到达,实现该接口的监听器需要实现如下两个方法:
- requestInitialized(ServletRequestEvent sre);用户请求到底、被初始化是出发该方法。
- requestDestroyed(ServletRequestEvent sre); 用户请求结束、被销毁时触发该方法。
ServletRequestAttributeListener则用于监听ServletRequest(request)范围内属性的变化,实现该接口的监听器需要实现attributeAdded、attributeRemoved、attributeReplaced三个方法。
应用程序完全可以采用一个监听器来监听多个事件,只要让该监听器实现类同时实现多个监听器接口即可,不如同时实现ServletRequestListener、ServletRequesetAttributeListener。
使用HttpSessionListener和HttpSessionAttributeListener与使用ServletRequestListener和ServletRequestAttributeListener非常相似。
HttpSessionListener用于监听用户session的创建和销毁,实现该接口的监听器需要实现:
- sessionCreate(HttpSessionEvent se);用户与服务器的会话开始、创建时触发该方法。
- sessionDestroyed(HttpSessionEvent se);用户与服务器的会话断开、销毁时触发该方法。
Web中Listener的创建的更多相关文章
- Java web中listener、 filter、servlet 加载顺序
真正的加载顺序为:context-param -> listener -> filter -> servlet 加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 f ...
- SpringBoot系列教程web篇Listener四种注册姿势
java web三要素Filter, Servlet前面分别进行了介绍,接下来我们看一下Listener的相关知识点,本篇博文主要内容为SpringBoot环境下,如何自定义Listener并注册到s ...
- 学习java web中的listener
web.xml里的顺序为:context-param->listener->filter->servlet 监听器是需要新建一个类,然后按监听的对象继承:ServletContext ...
- HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)
在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...
- (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(七)——eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -&g ...
- web中简单wcf的创建和应用
以前做过wcf控制台作为宿主,今天回顾一下,不过公司用的web直接创建就把这种过程写下来. 第一步:创建wcf页面如图 第二步:创建wcf时候已经自动生成了接口(契约)和实现类(契约),但是我们可以修 ...
- 在Eclipse中使用Maven创建Web工程
在Eclipse中使用Maven创建Web工程 1.创建maven Project工程,使用maven-archetype-webapp 2.在pom.xml文件中,设置打包类型为war <pa ...
- Maven学习总结(7)——eclipse中使用Maven创建Web项目
Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如 ...
- Dynamics CRM 中Web API中的深度创建(Deep Insert)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
随机推荐
- linux 内存使用
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 1.9G 45G 5% / tmpfs 1.9G 0 1.9G 0% ...
- jquery 设置元素内容html(),text(),val()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (笔记)angular 包含关系的controller参数父级方法
- C#正则表达式语法规则详解
正则表达式通常包含字母文本(Literaltext)和元字符(metacharacter) 字母文本指的是普通文本如"abcde"可匹配字符串中任何包含"abcde&qu ...
- 九、在动作类中访问ServletAPI
九.在动作类中访问ServletAPI .方式一:(简单,推荐使用)ServletActionContext public String execute() throws Exception { ...
- 著名的二分查找的BUG
int binarySearch(int a[], int key, int length) { int low = 0; int high = length - 1; while (low < ...
- [转载]《C++0x漫谈》系列之:多线程内存模型
<C++0x漫谈>系列之:多线程内存模型 By 刘未鹏(pongba) 刘言|C++的罗浮宫(http://blog.csdn.net/pongba) <C++0x漫谈>系列导 ...
- 华为OJ-合唱队
华为OJ-初级题-合唱队 思路与分析 本题可以用DP的方法,分别从正向和逆向的两个方向求,该数组即186 186 150 200 160 130 197 200的上升对大序列.正向为[1, 1, 1, ...
- js实现文字截断
先前用jq做了一个文字截断功能,但是不用jq的项目要实现此功能还要引如jq显得过于麻烦.这里写了一个js的文字截断功能.直接上代码. HTML(测试用的): <div>我是pox我是pox ...
- POJ C程序设计进阶 编程题#1:分配病房
编程题#1:分配病房 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 某个科 ...