当Web应用的web容器中运行时,web应用内部会不断地发生各种事件:如Web应用被启动、Web应用被停止,用户session开始、用户session结束、用户请求到达等,通常来说,这些web事件对开发者是透明的。今天笔者将向大家介绍几个常见的Listener类。

(1).        ServletContextListener:用于监听Web应用的启动和关闭

(2).        ServletContextAttrbuteListener:用于监听ServletContext范围(application)内属性的改变

(3).        ServletRequestListener:用于监听用户请求

(4).        ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变

(5).        HttpSessionListener:用于监听用户session的开始和结束

(6).        HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变

同时,使用listener有两种方法,读者可以根据实际情况自己选择:

(1).        使用@Weblistener修饰listener实现类

(2).        在web.xml文档中使用<listener…>元素进行配置。如:

<listener>

<listener-class>com.linjw.GetConnlistener</listener-class>

</listener>

1. ServletContextListener的使用

ServletContextListener主要是web应用的启动和关闭,所以当web启动时,调用的是contextInitialized()的方法,当web关闭时,则调用contextDestroyed()的方法。

@WebListener
public class GetConnListener implements ServletContextListener
{// 应该启动时,该方法被调用。public void contextInitialized(ServletContextEvent sce){try{// 取得该应用的ServletContext实例ServletContext application = sce.getServletContext();// 从配置参数中获取驱动String driver = application.getInitParameter("driver");// 从配置参数中获取数据库urlString 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 (Exception ex){System.out.println("Listener中获取数据库连接出现异常"+ ex.getMessage());}}// 应该关闭时,该方法被调用。public void contextDestroyed(ServletContextEvent sce){// 取得该应用的ServletContext实例ServletContext application = sce.getServletContext();Connection conn = (Connection)application.getAttribute("conn");// 关闭数据库连接if (conn != null){try{conn.close();}catch (SQLException ex){ex.printStackTrace();}}}
}

2.  ServletContextAttributeListener的使用

ServletContextAttributeListener用于监听ServletContext(application)范围属性的变化,实现该方法接口的监听器需要以下的三个方法:

(1).        attributeAdded(ServletContextAttributeEventevent):当程序把一个属性放入application范围时触发该方法

(2).        attributeRemoved(ServletContextAttributeEventevent):当程序把一个属性从application范围删除时触发该方法。

(3).        attributeReplaced(ServletContextAttributeEventevent):当程序替换application范围内的属性时将触发该方法。

 @WebListener
public class MyServletContextAttributeListenerimplements ServletContextAttributeListener
{// 当程序向application范围添加属性时触发该方法public void attributeAdded(ServletContextAttributeEvent event){ServletContext application = event.getServletContext();// 获取添加的属性名和属性值String name = event.getName();Object value = event.getValue();System.out.println(application + "范围内添加了名为"+ name + ",值为" + value + "的属性!");}// 当程序从application范围删除属性时触发该方法public void attributeRemoved(ServletContextAttributeEvent event){ServletContext application = event.getServletContext();// 获取被删除的属性名和属性值String name = event.getName();Object value = event.getValue();System.out.println(application + "范围内名为"+ name + ",值为" + value + "的属性被删除了!");}// 当application范围的属性被替换时触发该方法public void attributeReplaced(ServletContextAttributeEvent event){ServletContext application = event.getServletContext();// 获取被替换的属性名和属性值String name = event.getName();Object value = event.getValue();System.out.println(application + "范围内名为"+ name + ",值为" + value + "的属性被替换了!");}
}

3. 关于ServletRequestListener和ServletRequestAttributeListener的使用

ServletRequestListener用于监听用户请求的到达,实现该接口的监听需要实现如下两个方法:

(1).        requestInitialized(ServletRequestEventsre):用户请求到达、被初始化时触发该方法

(2).        requestDestroyed(ServletRequestEventsre):用户请求结束、被销毁时触发该方法

ServletRequestAttributeListener则用于监听ServletRequest(request)范围内属性的变化,实现该接口要实现attribute         Added()、attributeRemoved()、attributeReplaced()三个方法。

@WebListener
public class RequestListenerimplements ServletRequestListener , ServletRequestAttributeListener
{// 当用户请求到达、被初始化时触发该方法public void requestInitialized(ServletRequestEvent sre){HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();System.out.println("----发向" + request.getRequestURI()+ "请求被初始化----"); }// 当用户请求结束、被销毁时触发该方法public void requestDestroyed(ServletRequestEvent sre){HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();System.out.println("----发向" + request.getRequestURI()+ "请求被销毁----");}// 当程序向request范围添加属性时触发该方法public void attributeAdded(ServletRequestAttributeEvent event){ServletRequest request = event.getServletRequest();// 获取添加的属性名和属性值String name = event.getName();Object value = event.getValue();System.out.println(request + "范围内添加了名为"+ name + ",值为" + value + "的属性!");}// 当程序从request范围删除属性时触发该方法public void attributeRemoved(ServletRequestAttributeEvent event){ServletRequest request = event.getServletRequest();// 获取被删除的属性名和属性值String name = event.getName();Object value = event.getValue();System.out.println(request + "范围内名为"+ name + ",值为" + value + "的属性被删除了!");}// 当request范围的属性被替换时触发该方法public void attributeReplaced(ServletRequestAttributeEvent event){ServletRequest request = event.getServletRequest();// 获取被替换的属性名和属性值String name = event.getName();Object value = event.getValue();System.out.println(request + "范围内名为"+ name + ",值为" + value + "的属性被替换了!");}
}

4. 关于HttpSessionListener和HttpSessionAttributeListener的使用

HttpSessionListener用于用户监听session的创建和销毁,实现该接口的监听器需要实现如下方法:

(1).        sessionCreate(HttpSessionEventse):用户与服务器的会话开始、创建时触发该方法

(2).        sessionDestroyed(HttpSessionEventse):用与服务器的会话断开、销毁时触发该方法

HttpSessionAttributeListener则用于监听HttpSession(session)范围内属性的变化,实现监听器需要实现方法有:attributeAdded()、attributeRemoved()、attributeReplaced()三个方法。

@WebListener
public class OnlineListenerimplements HttpSessionListener
{// 当用户与服务器之间开始session时触发该方法public void sessionCreated(HttpSessionEvent se){HttpSession session = se.getSession();ServletContext application = session.getServletContext();// 获取session IDString sessionId = session.getId();// 如果是一次新的会话if (session.isNew()){String user = (String)session.getAttribute("user");// 未登录用户当游客处理user = (user == null) ? "游客" : user;Map<String , String> online = (Map<String , String>)application.getAttribute("online");if (online == null){online = new Hashtable<String , String>();}// 将用户在线信息放入Map中online.put(sessionId , user);application.setAttribute("online" , online);}}// 当用户与服务器之间session断开时触发该方法public void sessionDestroyed(HttpSessionEvent se){HttpSession session = se.getSession();ServletContext application = session.getServletContext();String sessionId = session.getId();Map<String , String> online = (Map<String , String>)application.getAttribute("online");if (online != null){// 删除该用户的在线信息online.remove(sessionId);}application.setAttribute("online" , online);}
}

5. 总结

以上介绍的只是我们常见的监听类,其实在框架Strtuts2中有着比JSP更强大的监听器。但是我们对于JSP的监听的了解有助于我们学习struts2,同时也可对JSP的核心用法有更深入得知。

JSP的Listener介绍相关推荐

  1. java技术及ssh框架和jsp技术的介绍 外文文献及翻译_java技术及ssh框架和jsp技术的介绍 外文文献及翻译.doc...

    java技术及ssh框架和jsp技术的介绍 外文文献及翻译.doc 还剩 34页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  2. java技术及ssh框架和jsp技术的介绍 外文文献及翻译_外文翻译 java技术及ssh框架和jsp技术的介绍 jsp程序.docx...

    外文翻译 java技术及ssh框架和jsp技术的介绍 jsp程序.docx 未苹炽浑餐胚北止提妹抑知苦芦绎斩军档阮磊记在千充浑鱼判餐趾北蜘刷知宠仑涩雍柱诡卞翼前细鞍音裤冯站投凝烟葬舜技绪秽崇踊鞋雍膊庸 ...

  3. springmvc整合redis_111 SpringBoot整合Servlet JSP Filter Listener

    1. SpringBoot介绍 (1) 什么是Spring Boot? (2) Spring Boot有哪些特点? Spring Boot 设计目的是用来简化新 Spring 应用的初始搭建以及开发过 ...

  4. jsp的session介绍 (转)

    摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java  ...

  5. freemarker的测试结果框架_TestNG框架Listener介绍及测试结果的收集

    此文已由作者范旭斐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 抛砖引玉 假设我们将testng作为自动化测试框架的选型方案,以下两个问题如何实现: 问题1:如何将每次执行 ...

  6. JSP中Listener和Timer的运用

    其他的JSP文章: 在JSP中使用Bean自动属性填充机制 JSP列出服务器环境变量 JSP的errorPage指令异常转向错误页的实现机制及应用 Jsp利用404错误页进行URL重写 有的时候需要在 ...

  7. servlet监听器Listener介绍和使用

    1监听器Listener 1.1 Listener简介 javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术,其中 servlet规范包括三个技术点:servlet,lis ...

  8. java jsp框架_介绍几个开源的JSP开发框架

    以下介绍几个开源的JSP开发框架. WebWork WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架.WebWork目前***版本是2 ...

  9. JSP 自定义标签介绍

    自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web containe ...

  10. JSP知识点大致介绍1

    解释:当jsp写好,运行服务器,还没有发出请求(写网址按Enter),Tomcat的work下是没有字节码文件的.当写网址:localhost:8888/xxxx/index.jsp按Enter,运行 ...

最新文章

  1. RH134 UNIT5
  2. 推荐11个构建和测试API的顶级工具
  3. python上的数据库sqlite3——插入多行数据
  4. 通过设置rowcount,从Sybase数据库中分页取数
  5. 最耗性能的SQL语句
  6. 23种经典设计模式的java实现_5_职责链模式
  7. mac虚拟机哪个好用 mac双系统和虚拟机哪个好
  8. Visual Studio 2022安装配置
  9. 第三次作业-李纯锐-201731084433
  10. 第13期-在线的文章摘要生成器, 自己写了一个支持中文的
  11. HBuilderX开发的uniapp项目运行到微信小程序开发者工具上的方法
  12. 如何应对微信群舆情?
  13. mysql安装时初始密码错误_踩坑之MySQL安装及修改初始密码
  14. 报错Installation failed with message INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.tencent.qcloud.timch
  15. 在kindle上阅读网络小说的正确方法——Kindle网文助手
  16. ORA-01045: user ICCS lacks CREATE SESSION privilege; logon denied
  17. 华为鸿蒙生态班怎么上,华为联合西北工业大学开设“鸿蒙生态菁英班”: 50 人左右...
  18. 简单的实现app界面劫持和后台监控
  19. 相伴十六载,讲讲我和数据仓库的故事(一)
  20. 在本计算机无法启动用友通服务器,用友T3客户端提示用友通服务没有启动?

热门文章

  1. c# winform中datagridview空间添加序号和表头“序号”
  2. 一图搞懂华三MVRP的配置与作用
  3. 报错解决:No module named tensorflow.contrib
  4. BZOJ5262(容斥)
  5. mysql 查询优化 ~ 善用profie利器
  6. opencv python 读取图像/显示图像/保存图像
  7. 不会点SQLite,都不好意思说自己是开发的 1
  8. 获取Windows 10(1)
  9. 批量部署 自动化之 - [pssh](转)
  10. 一步到位之INNODB