Java Web开发——Servlet监听器
一、Servlet监听器的概念
Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
监听对象:
1、ServletContext:application,整个应用只存在一个
2、HttpSession:session,针对每一个对话
3、ServletRequest:request,针对每一个客户请求
监听内容:创建、销毁、属性改变事件
监听作用:可以在事件发生前、发生后进行一些处理,一般可以用来统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等。
二、监听器的基本使用
创建步骤:
1、创建一个实现监听器接口的类
2、配置web.xml文件,注册监听器
<listener><listener-class>完整类名</listener-class> </listener>
监听器的启动顺序:按照web.xml的配置顺序来启动
加载顺序:监听器>过滤器>Servlet
三、监听器的分类
3.1 按照监听的对象划分
1、用于监听应用程序环境对象(ServletContext)的事件监听器,实现ServletContextListener、ServletContextAttributeListener接口
2、用于监听用户会话对象(HttpSeesion)的事件监听器,实现HttpSessionListener、HttpSessionAttributeListener接口
3、用于监听请求消息对象(ServletRequest)的事件监听器,实现ServletRequestListener、ServletRequestAttributeListener接口
3.2按照监听事件划分
1、监听域对象自身的创建和销毁的事件监听器
根据监听对象不同分别实现ServletContextListener、HttpSessionListener、ServletRequestListener接口。
①ServletContext的创建和销毁:contextInitialized方法和contextDestroyed方法
public void contextInitialized(ServletContextEvent sce)//ServletContext创建时调用 public void contextDestroyed(ServletContextEvent sce)//ServletContext销毁时调用
主要用途:作为定时器、加载全局属性对象、创建全局数据库连接、加载缓存信息等
实例:
在web.xml中可以配置项目初始化信息,在contextInitialized方法中进行启动
<context-param><param-name>属性名</param-name> <param-value>属性值</param-value> </context-param>
自定义监听器
public class MyFirstListener implements ServletContextListener{public void contextInitialized(ServletContextEvent sce){ //获取web.xml中配置的属性 String value=sce.getServletContext().getInitParameter("属性名"); System.out.println(value); } public void contextDestroyed(ServletContextEvent sce){ //关闭时操作 } }
②HttpSession的创建和销毁:sessionCreated和sessionDestroyed方法
public void sessionCreated(HttpSessionEvent se)//session创建时调用 public void sessionDestroyed(HttpSessionEvent se)//session销毁时调用
主要用途:统计在线人数、记录访问日志等
【注】
web.xml配置session超时参数,单位:分,session超时的时间并不是精确的
<session-config><session-timeout>10</session-timeout> </session-config>
③ServletRequest的创建和销毁:requestInitialized和requestDestroyed方法
public void requestInitialized(ServletRequestEvent sre)//request创建时调用 public void requestDestroyed(ServletRequestEvent sre)//request销毁时调用
主要用途:读取request参数,记录访问历史
实例:
public class MySRequestListener implements SevletRequestListener{public void requestInitialized(ServletRequestEvent sre){ String value=sre.getServletRequest().getParameter("key");//获取request中的参数 System.out.println(value); } public void requestDestroyed(ServletRequestEvent sre){ System.out.println("request destroyed"); } }
2、监听域对象中的属性的增加和删除的事件监听器
根据监听对象不同分别实现ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener接口。
实现方法:attributeAdded、attributeRemoved、attributeReplaced
3、监听绑定到HttpSeesion域中的某个对象的状态的事件监听器(创建普通JavaBean)
HttpSession中的对象状态:绑定→解除绑定;钝化→活化
实现接口及方法:HttpSessionBindingListener接口(valueBound和valueUnbound方法)、HttpSessionActivationListener接口(sessionWillPassivate和sessionDidActivate方法)
【注1】①要实现钝化和活化必须实现Serializable接口
②不需要在web.xml中注册
【注2】
绑定: 通过setAttribute保存到session对象当中
解除绑定: 通过removeAttribue去除
钝化: 将session对象持久化到存储设备上
活化: 将session对象从存储设备上进行恢复
session钝化机制:
①把服务器不常使用的session对象暂时序列化到系统文件或者是数据库中,当使用时反序列化到内存中,整个过程由服务器自动完成;
②session的钝化机制由SessionManager管理,创建一个普通的JavaBean绑定和接触需要实现HttpSessionBindingListener接口
四、Servlet3.0下监听器的使用
4.1 使用条件
1、使用servlet3.0新标准的jar包
2、JDK在1.6以上版本
3、编译器的编译级别为6.0
4、在web.xml文件中,使用3.0规范
5、使用支持servlet3.0特性的web容器,比如tomcat7
4.2 servlet3.0下监听器的用法
使用注解 @WebListener 即可,无法去定义监听器的顺序
属性名 | 类型 | 是否可选 | 描述 |
value | String | 是 | 该监听器的描述信息 |
@WebListener("This is a listener") public class FirstListener impliements ServletRequestListener{}
该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:
ServletContextListener
ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionListener
HttpSessionAttributeListener
转载于:https://www.cnblogs.com/tigerui/p/6569091.html
Java Web开发——Servlet监听器相关推荐
- Java web开发——Servlet详细介绍
一.第一个Servlet程序 1.创建Servlet程序 在webapps目录下新建一个serfis的web应用,在serfis下新建一个WEB-INF\classes,在classes新建servl ...
- 名师讲坛——Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax)
[书名]<名师讲坛--Java Web开发实战经典基础篇(JSP.Servlet.Struts.Ajax)> [作者]李兴华.王月清 [ISBN]9787302231585 }:YKf: ...
- 名师讲坛—Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax)
名师讲坛-Java Web开发实战经典基础篇(JSP.Servlet.Struts.Ajax) 基本信息 作者: 李兴华 王月清 出版社:清华大学出版社 ISBN:9787302231585 ...
- Java Web开发API Boy如何进阶?
导语 | Java Web后台开发基本都离不开Spring生态这一套,Spring框架功能极其强大,会帮忙做许多工作,我们通常只需要在一个函数(包含request和response两个入参)中写处理逻 ...
- 零基础学java web开发 pdf_从零开始学Java Web开发 PDF 扫描版[69M]
java web是目前最流行的动态网页开发技术之一.本书由浅入深.循序渐进,使零基础的读者能够熟练掌握如何使用java web开发应用程序系统. 本书分为4部分,第一部分是java语言基础篇,包括ja ...
- 追新求快的时代,别让 Java Web 开发必备工具 Tomcat 变成“熟悉的陌生人”!
作者 | 码哥字节 来源 | MageByte技术团队 Tomcat 发展这么多年,已经比较成熟稳定.在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌 ...
- java web开发学习总结
java web 开发基础内容理解 解决中文乱码问题 请求参数乱码 输出乱码 jsp的运行原理 GET请求和POST请求的区别 静态包含和动态包含 静态包含 动态包含 两者的区别 Cookie和Ses ...
- java web开发实战经典 源码_李兴华 java_web开发实战经典 源码 完整版收集共享
李兴华 java_web开发实战经典 源码 完整版收集共享 01f8a7 在 2018-11-07 20:41:33 上传 10.92 MB 第1章 JAVA WEB开发简介 1.1.WEB发 ...
- 基于Stripes框架进行Java Web开发
Mark Eagle是美国乔治亚州亚特兰大市MATRIX Resources有限公司的一位资深软件工程师,拥有Sun公司的SCP和SCWCD认证.Mark本人非常喜欢使用开源软件进行软件开发,并且多次 ...
最新文章
- 备库中ORA-00600错误的简单修复
- 2010英语WCDMA,希望你也和一样!
- POJ 1410 Intersection 判断线段交和点在矩形内 【计算几何】
- 第三次小组赛解题报告
- [CODEVS1205]单词反转
- 安农大计算机调剂,2020年安徽农业大学硕士研究生调剂公告
- python脚本加密_教你如何基于python实现脚本加密
- linux用xshell编辑文件,Linux远程管理器xshell和xftp使用教程
- 【TensorFlow】TensorFlow函数精讲之tf.train.ExponentialMovingAverage()
- 机器学习降维-深度AI科普团队
- 关于CSS兼容IE与Firefox要点分析
- 最新版spark1.1.0集群安装配置
- C++ STL 学习笔记__(6)优先级队列priority_queue基本操作
- [Java] Maven 建立 Spring MVC 工程
- 城市轨道交通乘客信息系统的功能介绍
- AT4RE Patcher v0.6.3使用心得:
- 微信小程序服务器向客户端发送通知消息,微信小程序消息推送
- 微信小程序云函数操作云数据库Mysql
- mysql wait for flush,Mysql线程大量Wating For table flush问题分析
- QT openGL环境光照