监听器的定义

(专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动)

定义:Servlet规范中定义的一种特殊的类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁时间,以及用于监听域对象的属性发生修改的事件,监听器对象可以在事件发生前、发生后做一些必要的处理

WEB应用中的监听器:

由Servlet规范提供的,可以监视客户端的请求以及服务端的操作,同时可以监视1.ServletContext(application,容器创建并且初始化的,范围整个Web应用,整个Web应用只有一个application对象,Web容器关闭就会销毁application对象)、

2.HttpSession(session,是一种保存上下文的机制,针对每一个会话,放在服务器端,通过session的id进行区分的,浏览器和服务器结束后,就会把session进行销毁)、

3.ServletRequest(request,客户发送请求时,容器就会创建一个ServletRequest对象,进行封装请求数据,同时会创建一个ServletResponse对象,进行封装响应数据,访问请求结束之后,request对象就会被销毁)。

image.png

image.png

第一个监听器案例

步骤1:创建一个类并实现ServletContextListener接口(javax.servlet),并且实现了contextInitialized方法和contextDestroyed方法

image.png

image.png

步骤2:web.xml配置监听对象

image.png

监听器的启动顺序

注册顺序加载监听器,如果注册含有过滤器、监听器、Servlet,

监听器优先级>过滤器优先级>Servlet优先级

监听器的分类

按监听的对象划分

【a】用于监听应用程序环境对象(ServletContext)的事件监听器。

【b】用于监听用户会话对象(HttpSession)的事件监听器

【c】用于监听请求消息对象(ServletRequest)的事件监听器

按监听的事件划分

【a】监听域对象自身的创建和销毁的事件监听器

定义:监听的对象包括ServletContext、HttpSession、ServletRequest,Servlet规范中定义了三个接口ServletContextListener、HttpSessionListener、ServletRequestListener来监听这三个对象的创建及销毁事件。

【b】监听域对象中的属性的增加和删除的事件监听器

【c】监听绑定到HttpSession域中的某个对象的状态的事件监听器

ServletContext事件监听器

ServletContext的创建及销毁:ServletContext实现了ServletContextListener接口来监听该对象的创建及销毁事件,一个Web应用下可以创建多个ServletContextListener,但是一个Web应用中只有一ServletContext对象,ServletContextListener对象的contextInitialized方法和contextDestroyed方法(主要用于数据库连接关闭时,可以释放一些资源,以免过度的占用),方法里的参数ServletContextEvent可以获取ServletContext以及获取一些初始化参数。

ServletContextListener主要用途:做一些定时器:可以加载一些全局属性对象,可以创建全局的数据库连接,以及加载一些缓存信息。

getServletContext():通过参数ServletContextEvent获取ServletContext对象,并且可以往全局变量ServletContext中存入变量,通过setAttribute方法,这样就可以在其他地方进行获取。

getInitParameter():通过ServletContext对象获取初始化参数(初始化参数在web.xml中进行配置)。

servletcontextlistener可以用于初始化各种属性,或者在结束时释放相关资源

image.png

HttpSession的事件监听器

监听域对象(HttpSession):HttpSession实现了HttpSessionListener接口,用于监听该对象的创建及销毁事件,一个HttpSession对象可以注册多个HttpSessionListener接口,一个Web应用中也可以有多个HttpSession对象,HttpSessionListener有sessionCreated(HttpSessionEvent se)和sessionDestroyed(HttpSessionEvent se),分别是session创建和销毁时调用,方法里的参数可以获取当前创建的HttpSession对象。

HttpSessionListener主要用途

统计在线人数,记录访问日志(在后台把访问人的访问时间和ip做一些统计数据)

HttpSession对象的创建和销毁:

session对象的创建是在用户第一次打开浏览器,第一次访问Wen应用时,这次对话Web容器就会分配一个session,用户可以在session里保存一些信息,session对象的销毁第一是关闭服务器,会调用销毁方法,第二种是关闭浏览器session会被销毁(session不一定会立即销毁,该时间不是一个量化的),第三种,不关闭浏览器,session超时(可以通过在web.xml中配置

image.png

ServletRequest的监听器

ServletRequest对象的创建和销毁:ServletRequest的创建和销毁是实现了ServletRequestListener接口,一个ServletRequest对象可以注册多个ServletRequestListener接口,并且实现了requestInitialized(ServletRequestEvent sre)request创建时被调用,requestDestroyed(ServletRequestEvent sre)request销毁时调用。

ServletRequestListener主要用途:读取request里的参数,记录访问历史、访问路径,都可以通过它来进行监听(监听到每一个用户的访问请求,请求结束后就会执行销毁方法,有getServletContext方法和getServletRequest方法)。

image.png

HttpSession中的对象状态

(1)绑定:通过setAttribute();

(2)解除绑定:removeAttribute();

(3)钝化:将session对象序列化到存储设备上

(4)活化:将session对象从存储设备上进行恢复

session钝化机制:

(1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。

(2)session的钝化机制由SessionManager管理

Servlet3.0下监听器的使用

Servlet2.5下可以定义监听器的顺序,通过在web.xml中定义,Servlet3.0通过注解@WebListener实现这一功能,就不需要在web.xml配置Listener。

image.png

注意:@WebListener方式不能实现设置顺序功能

java web 监听器 例子_Java web技术应用---监听器相关推荐

  1. java web 许令波_Java Web——Web概述

    已经很久没有更新博客了,过年忙着吃喝玩乐,就怠惰了一小下下?幸好这学期新开的课程都比较有趣--Java Web和Android.至少对于我自己来说,既充满挑战,又富有趣味. --[1.Web概述]-- ...

  2. java web项目测试_java web项目怎么测试?

    慕仰1329654 java web项目测试用Web的测试工具,如HtmlUnit,JWebUnit等.main()方法就可以测试,在main方法中获得connection对象将他输出就可以了.如果正 ...

  3. java线程安全例子_Java总结篇系列:Java多线程(三)

    本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 1 public classThreadTest {2 3 public static voi ...

  4. java try catch 例子_Java异常处理综合例子(try、catch、finally、throws、throw)

    Java异常处理综合例子(try.catch.finally.throws.throw) 佟强 2009年11月4日 http://blog.csdn.net/microtong package cn ...

  5. java怎么加定时器_JAVA WEB程序中添加定时器

    JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...

  6. java web应用开发_Java Web应用开发基础

    模块1 Java Web应用开发概述 1.1 Web基础知识 1.1.1 Web应用及其开发 1.1.2 动态网页 1.1.3 B/S结构 1.1.4 JSP简介 1.2 创建第一个Web项目 1.2 ...

  7. java session 永不过期_Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

  8. java web tomcat 实例_Java Web应用开发实例

    [1.GIS的概念 1.1什么是gis 地理信息系统 (GIS, Geographic Information System) 是一种基于计算机的工具,它可以对在地球上存在的东西和发生的事件进行成图和 ...

  9. java web数据库查询_Java Web开发之信息查询方式总结

    本文实例讲述了Java Web开发之信息查询方式总结.分享给大家供大家参考.具体如下: 这里介绍的查询方式有: ① 根据某个特定的字段查询: ② 在多个字段中查询: ③ 根据任意字段查询: ④ 任意字 ...

最新文章

  1. android读取xml 字符串,Android 读取本地Xml文件,并转换成String
  2. 如何使用ODBC搭配dsn链接数据库
  3. 【Tools】开源远程控制神器之RustDesk
  4. python面向对象有什么用_Python 中的面向对象没有意义
  5. ARC107——D - Number of Multisets
  6. 机器学习 | 分类评估指标
  7. [Async] [Series #1] 初识Async异步编程模型。
  8. shell-数组排序
  9. layui模板语言,渲染表格分组合并行
  10. 房产经纪龙头居安思危孵化「贝壳」,如何用数字化解找房之痛?
  11. Android M App Permissions
  12. Debian系安装rabbitmq
  13. 校园采花经历(超级爆笑)
  14. Hello ......
  15. kettle连接不上es7_kettle常见问题解决
  16. USB转多路串口 USB hub USB扩展
  17. 猴子吃桃问题【Java】
  18. 用缓动动画实现鼠标跟随
  19. Java设计模式 - 工厂模式
  20. 《C语言编程魔法书:基于C11标准》——1.6 本章小结

热门文章

  1. 无人驾驶:车道线检测,附代码
  2. MMDetection3D:新一代通用3D目标检测平台
  3. 3D U-Net:从稀疏注释中学习密集的体积分割
  4. ‘Link‘ is not exported from ‘react-router‘
  5. SpringBoot 编写ajax可以访问的接口
  6. Python3连接PostgreSQL(10.5)数据库
  7. 基于Pytorch和RDKit建立QSAR模型
  8. 苹果手机做文件服务器,iOS企业账号打包发布App到自己服务器上
  9. command对象提供的3个execute方法是_21个极大提高开发效率的VS Code快捷键
  10. 研究生新生进入实验室后,如何成长?5点建议分享