使用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的创建的更多相关文章

  1. Java web中listener、 filter、servlet 加载顺序

    真正的加载顺序为:context-param -> listener -> filter -> servlet 加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 f ...

  2. SpringBoot系列教程web篇Listener四种注册姿势

    java web三要素Filter, Servlet前面分别进行了介绍,接下来我们看一下Listener的相关知识点,本篇博文主要内容为SpringBoot环境下,如何自定义Listener并注册到s ...

  3. 学习java web中的listener

    web.xml里的顺序为:context-param->listener->filter->servlet 监听器是需要新建一个类,然后按监听的对象继承:ServletContext ...

  4. HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)

    在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...

  5. (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(七)——eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -&g ...

  6. web中简单wcf的创建和应用

    以前做过wcf控制台作为宿主,今天回顾一下,不过公司用的web直接创建就把这种过程写下来. 第一步:创建wcf页面如图 第二步:创建wcf时候已经自动生成了接口(契约)和实现类(契约),但是我们可以修 ...

  7. 在Eclipse中使用Maven创建Web工程

    在Eclipse中使用Maven创建Web工程 1.创建maven Project工程,使用maven-archetype-webapp 2.在pom.xml文件中,设置打包类型为war <pa ...

  8. Maven学习总结(7)——eclipse中使用Maven创建Web项目

    Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如 ...

  9. Dynamics CRM 中Web API中的深度创建(Deep Insert)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

随机推荐

  1. jQuery插件开发方式

    一.jQuery扩展 1.$.extend(object) 类似于.Net的扩展方法,用于扩展jQuery.然后就可以用$.的方式调用. $(function(){ $.extend({ fun1: ...

  2. dedecms手机站要同步pc站的图片

    首先在dede目录下面找到  /include/extend.func.php  文件 //添加自定义函数 function replaceurl($newurl){ $newurl=str_repl ...

  3. CSS 之 Opacity多浏览器透明度兼容处理

    用来设定元素透明度的 Opacity 是CSS 3里的一个属性.当然现在还只有少部分浏览器支持. 不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari: IE: fil ...

  4. JavaScriptSerializer.MaxJsonLength属性问题

    JavaScriptSerializer.MaxJsonLength属性用于获取或设置接受的JSON字符串的最大长度,超出设定值时序列化或反序列化会失败.常见的出错的场景有: 1.序列化: 以下代码在 ...

  5. c# 字符串(含有汉字)转化为16进制编码(转)

    public static string Str2Hex(string s) { string result = string.Empty; byte[] arrByte = System.Text. ...

  6. iOS NSString中字符串的删除,替换

  7. 常用的MyEclipse快捷键

    在调试程序的时候,我们经常需要注释一些代码,在用Myeclipse编程时,就可以用 Ctrl+/ 为选中的一段代码加上以 // 打头的注释:当需要恢复代码功能的时候,又可以用Ctrl+/ 去掉注释.这 ...

  8. 搭建高性能计算环境(八)、应用软件的安装之gromacs

    1,下载安装新版本的gcc(高版本的gcc只是推荐使用的,系统自带的gcc4.4照样能正常编译.运行) wget http://ftp.tsukuba.wide.ad.jp/software/gcc/ ...

  9. POJ C程序设计进阶 编程题#4:Tomorrow never knows?

    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 甲壳虫的<A day ...

  10. 关于ASP.net TextBox控件的失去焦点后触发其它事件

    编写人:CC阿爸 2015-2-02 今天在这里,我想与大家一起分享如何处理的ASP.net TextBox控件的失去焦点后触发其它事件的问题,在此做个小结,以供参考.有兴趣的同学,可以一同探讨与学习 ...