1.

总结一下tomcat 服务器里的三种监听

ServletContextListener

HttpSessionListener

ServletRequestListener

这是我要做的三个自定义重写 类 分别继承上面三个接口

2具体源码

(1) ServletContextListener

用于监听服务器的启动与关闭

 1 package cn.cen2guo.clinic.listener;
2
3
4 import javax.servlet.ServletContextEvent;
5 import javax.servlet.ServletContextListener;
6
7
8 /**
9 * 用于监听服务器的启动与关闭
10 */
11 public class MyServletContextListener implements ServletContextListener {
12 @Override
13 public void contextInitialized(ServletContextEvent sce) {
14 // System.out.println("创建ServletContext对象");
15 }
16
17 @Override
18 public void contextDestroyed(ServletContextEvent sce) {
19 // System.out.println("销毁ServletContext对象");
20 }
21 }

MyServletContextListener

(2) HttpSessionListener

用于监听session的创建与销毁

 1 package cn.cen2guo.clinic.listener;
2
3
4 import javax.servlet.http.HttpSessionEvent;
5 import javax.servlet.http.HttpSessionListener;
6
7 /**
8 * 用于监听session的创建于销毁,目前没啥用处
9 */
10
11 public class MyHttpSessionListener implements HttpSessionListener {
12
13 @Override
14 public void sessionCreated(HttpSessionEvent se) {
15 // System.out.println("session 被创建了");
16 // System.out.println(se.getSession().getId());
17 }
18
19 @Override
20 public void sessionDestroyed(HttpSessionEvent se) {
21 // System.out.println("session 被销毁了");
22 // System.out.println(se.getSession().getId());
23 // System.out.println("销毁结束");
24 }
25
26
27 }

MyHttpSessionListener

(3)ServletRequestListener

用于监听每一次请求 的开始【初始化】 与结束【销毁】

package cn.cen2guo.clinic.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener; /**
* 用于监听每一次请求,
*/
//使用注解@WebListener 和 @Component ,则不需要去web.xml文件里注册监听 ,
//同时spring扫面也不需要特意设定可以扫描到这里 ,但是仍然可以识别,这就很舒服了
//@WebListener
//@Component
public class MyServletRequestListener implements ServletRequestListener { @Override
public void requestInitialized(ServletRequestEvent sre) {
// System.out.println("requestInitialized 初始化");
} @Override
public void requestDestroyed(ServletRequestEvent sre) {
// System.out.println("requestDestroyed 销毁");
} }

MyServletRequestListener

3.  注册监听有两种,任意一种都可以:

  方法一:使用spring注解

  

  方法二 : 去web.xml文件注册监听标签

4.心得

(1) 服务器开启,servletcontextListener首先被使用。servletcontext被创建了;

服务器关闭的前一刻才会触发其销毁监听内容

(2)  网页向controller请求,ServletRequestListener 首先检测出来,
执行了他的requestInitialized 方法,即初始化request;等待contronller事务结束后,才出发servletRequestListener的销毁事件

(3)并不是每次前端向服务器请求 都会 验证要不要创建Session  ,而是当服务器调用了HttpServletRequest.getSession(true) 后,

才会创建一个服务器内独一无二的session会话  ,其session id 则是自动分配一个无序的字符串,[得到两个一样的几率非常低]

然后才保存在前端[一般在cookie里面]。

(4)session 可以设置存活时间,到期后自动注销 ,但往往都是默认值,每当前端浏览器关闭后,session才开始以默认期限倒计时,

等待时间到后才销毁,并不是浏览器一关闭,就会销立马销毁 ,当然,也没必要手动对其销毁,让其自毁自灭就行,

根据这一特性,就无法让服务器判断前端用户是否仍在,想要实现这个功能,只能使用websocket 或者长轮询,长轮询太消耗资源了,不建议使用,

websocket则是最好的方式!!!

(5) 从Tomcat设置的cookie路径来看,它对不同的应用程序设置的cookie路径是不同的,这样不同的应用程序所用的session id是不同的,因此即使在

同一个浏览器窗口里访问不同的应用程序,发送给服务器的session id也可以是不同的。

tomcat 服务器的几个重要监听 方法 与 使用的更多相关文章

  1. 简述Java中Http/Https请求监听方法

    一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...

  2. jquery 事件监听方法

    一.事件监听方法 mouseover()   鼠标移入事件方法 mouseout()    鼠标移出事件方法 mouseenter()  鼠标移入事件方法 mouseleave()  鼠标移出事件方法 ...

  3. Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法

    时隔一个多月我又回来啦! 坚持真的是很难的一件事,其它事情稍忙,就很容易说服自己把写博客的计划给推迟了. 好在终于克服了自己的惰性,今天又开始了. 本篇继续我的Luaframework学习之路. 一. ...

  4. 重启服务器后,启动oracle监听报错 The listener supports no services The command completed successfuslly

    启动监听报错如下图所示: 远程连接报错如下图所示: 问题原因:数据库实例没注册到listener中 解决方法: (1)登录数据库:$sqlplus  / as sysdba (2)显示服务名:sql& ...

  5. 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)

    http://ask.dcloud.net.cn/question/28090 https://blog.csdn.net/qq_37508970/article/details/86649703 各 ...

  6. jquery 监听常用监听方法

    最近在做网站开发,需要用到不少js的知识.之前学过现在重新来看,发现还真忘了不少~~ 在使用基于bootstrap,或者基于 jquery 的插件时,如过没有出现预期效果 请最先检查下是否优先载入的 ...

  7. Android View中的控件和监听方法...

    PS:居然三天没写博客了...今天补上...东西虽多,但是都是一些基础...代码多了一些,有人可能会这样问,粘这么多代码有毛用..其实对于一个Android的初学者来说,一个完整的代码是最容易帮助理解 ...

  8. AngularJS路由变化 监听方法

    #使用AngularJS时,当路由发生改变时,我们需要做某些处理,此时可以监听路由事件,常用的是$routeStartChange, $routeChangeSuccess ##使用场景:在路由配置文 ...

  9. Android修行之路------List view无法获取监听方法

    注意: 1.在list view自定义布局中如果添加滚动布局,会导致自定义布局无法获取监听. 2.如果ListView的每项布局里有像Button,ImageButton之类View的控键时,这些Vi ...

随机推荐

  1. 罗德与施瓦茨公司和TSN Systems公司为车载以太网提供纳秒级精度延时测量

    前言 随着毫米波雷达.激光雷达和摄像头等传感器的大量出现,并要求海量的传感器数据在几毫秒内传输完成并处理,使得网络延迟问题变得越发重要.测试和测量的专家Rohde&Schwarz(以下简称R& ...

  2. 虚拟机快照和linux基础命令

    虚拟机快照 磁盘"快照"是虚拟机磁盘文件(VMDK)在某个点及时的副本.可以通过使用恢复到快照来保持磁盘文件和系统存储. 1.拍摄快照 拍摄快照前先关机,然后右键点击虚拟机=> ...

  3. python解释器安装指导教程

    python解释器安装指导教程 1.官网下载 进入官网https://www.python.org/,在download下选择符合操作系统的版本 在找到合适的版本后选择相应的安装文件下载 2.进行安装 ...

  4. 带你尝鲜LiteOS 组件EasyFlash

    摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...

  5. 文本处理的命令,三剑客之sed

    文本处理的命令 1.sort命令 "用于将文件内容加以排序" 参数: -n :按照数值的大小排序 -r :以相反的顺序来排序 -k :以某列进行排序 -t :指定分隔符,默认是以空 ...

  6. ELK部署笔记

    ELK安装准备工作 准备3台机器,这样才能完成分布式集群的实验,当然能有更多机器更好: 192.168.0.46 192.168.0.150 192.168.0.76 角色划分: 3台机器全部安装jd ...

  7. Hibernate 批量update数据时,怎么样做可以回滚,

    Hibernate 批量update数据时,怎么样做可以回滚, 1.serviceManagerDaoImpl代码里对异常不进行try,catch抛出, 2.或者抛出throw new Runtime ...

  8. 前端实现list排序

    需求 针对list中某个字段,实现list的升序和降序 效果图 代码 我是用在angular1.X中项目的,根据list中的sort字段进行排序. # sort.html <style> ...

  9. Visual Studio Code常用快捷键

    说明 以下快捷键适用于windows环境下, Mac请将ctrl替换为command按键: 部分快捷键或不一样. 查看VSCode快捷键定义: settings -> keymaps. 目前使用 ...

  10. java源码——文件读写和单词统计

    本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和 ...