使用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. Oracle笔记 二、常用dba命令行

    1.给用户解锁 alter user scott account unlock; 2.注销.断开.切换当前用户连接 quit conn scott/tiger 3.用户权限查询 A .查看所有用户: ...

  2. .net读取ini配置文件的操作

    #region 读取和写入ini文件的操作   string inipath = System.Windows.Forms.Application.StartupPath + @"\conf ...

  3. nc命令学习

    监测端口是否存在 nc -z 127.0.0.1 9100 扫描端口 nc -z -v 127.0.0.1 8000 9999 发送http nc www.baidu.com 80 GET / HTT ...

  4. JavaScript根据CSS的Media Queries来判断浏览设备的方法

    CSS 部分 首先随便新建一个用来做判断的类,然后通过 Media Queries 来对这个类的 z-index 属性赋予不同的值.这个类仅作为 JavaScript 读取使用,所以需要将其移出屏幕窗 ...

  5. 软件工程 speedsnail 第二次冲刺5

    20150522 完成任务:蜗牛帧数变化已经实现,行走的蜗牛具有了动态的视觉效果: 遇到问题: 问题1 帧数大小根据人眼来设置 解决1 除29余0到14的为第一帧 明日任务: 蜗牛碰撞身体翻转

  6. canvas 绘制矩形和圆形

    canvas绘制有两神方法:1).填充(fill)填充是将图形内部填满. 2).绘制边框 (stroke)绘制边框是不把图形内部填满,只是绘制图形的外框. 当我们在绘制图形的时候,首先要设定好绘制的样 ...

  7. android学习视频分享

    最近整理了大量的安卓开发学习资料,有书籍有视频有代码,老罗的第一季有点老了, 这里就给大家分享下老罗的第二季的视频教程吧,还有源码,初级到高级程序猿都有用. 下载地址:http://51pansou. ...

  8. php输出utf-8格式

    header("Content-type:text/html;charset=utf-8"); 输出数据前插入以上代码,以utf-8格式输出,避免乱码

  9. WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法

    写Android程序的时候一般用WindowManager就是去获得屏幕的宽和高,来布局一些小的东西.基本上没有怎么看他的其他的接口. 这两天想写一个简单的类似于Toast的东西,自定义布局,突然发现 ...

  10. php的swoole扩展中onclose和onconnect接口不被调用的问题

    在用swoole扩展写在线聊天例子的时候遇到一个问题,查了不少资料,现在记录于此. 通过看swoole_server的接口文档,回调注册接口on中倒是有明确的注释: * swoole_server-& ...