Java web技术应用---监听器

监听器的定义

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

定义: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方式不能实现设置顺序功能

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容