tomcat 服务器的几个重要监听 方法 与 使用
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 服务器的几个重要监听 方法 与 使用的更多相关文章
- 简述Java中Http/Https请求监听方法
一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...
- jquery 事件监听方法
一.事件监听方法 mouseover() 鼠标移入事件方法 mouseout() 鼠标移出事件方法 mouseenter() 鼠标移入事件方法 mouseleave() 鼠标移出事件方法 ...
- Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法
时隔一个多月我又回来啦! 坚持真的是很难的一件事,其它事情稍忙,就很容易说服自己把写博客的计划给推迟了. 好在终于克服了自己的惰性,今天又开始了. 本篇继续我的Luaframework学习之路. 一. ...
- 重启服务器后,启动oracle监听报错 The listener supports no services The command completed successfuslly
启动监听报错如下图所示: 远程连接报错如下图所示: 问题原因:数据库实例没注册到listener中 解决方法: (1)登录数据库:$sqlplus / as sysdba (2)显示服务名:sql& ...
- 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)
http://ask.dcloud.net.cn/question/28090 https://blog.csdn.net/qq_37508970/article/details/86649703 各 ...
- jquery 监听常用监听方法
最近在做网站开发,需要用到不少js的知识.之前学过现在重新来看,发现还真忘了不少~~ 在使用基于bootstrap,或者基于 jquery 的插件时,如过没有出现预期效果 请最先检查下是否优先载入的 ...
- Android View中的控件和监听方法...
PS:居然三天没写博客了...今天补上...东西虽多,但是都是一些基础...代码多了一些,有人可能会这样问,粘这么多代码有毛用..其实对于一个Android的初学者来说,一个完整的代码是最容易帮助理解 ...
- AngularJS路由变化 监听方法
#使用AngularJS时,当路由发生改变时,我们需要做某些处理,此时可以监听路由事件,常用的是$routeStartChange, $routeChangeSuccess ##使用场景:在路由配置文 ...
- Android修行之路------List view无法获取监听方法
注意: 1.在list view自定义布局中如果添加滚动布局,会导致自定义布局无法获取监听. 2.如果ListView的每项布局里有像Button,ImageButton之类View的控键时,这些Vi ...
随机推荐
- 机器学习——sklearn中的API
import matplotlib.pyplot as pltfrom sklearn.svm import SVCfrom sklearn.model_selection import Strati ...
- 『学了就忘』Linux系统管理 — 84、Linux中进程的管理
目录 1.Linux系统中的信号 2.杀掉进程的命令 (1)kill命令 (2)killall命令 (3)pkill命令 1.Linux系统中的信号 Linux系统中可以识别的信号较多,我们可以使用命 ...
- [BUUCTF]PWN——ciscn_2019_n_3
ciscn_2019_n_3 附件 步骤 例行检查,32位,开启了nx和canary保护 本地试运行一下,经典的堆题的菜单 3.32位ida载入 new(),申请了两个chunk,第一个chunk(1 ...
- YonBuilder低代码开发实践:4行代码实现跨实体列表数据同步
提到增.删.改.查等数据维护,后端开发者们再熟悉不过了.传统的数据维护通过操作数据库的方式实现,步骤比较繁琐,需要通过Java代码实现数据库链接,然后编写SQL语句.编写实体,将想要的数据存到相应的数 ...
- SourceTree Git可视化管理工具通过 ssh 密钥登录
整个流程分三步:① 生成SSH密钥:② Github/Gitee/Coding 代码托管平台绑定公钥:③ SourceTree 拉取代码 1.生成 SSH 密钥 这里直接使用 SourceTree 来 ...
- Docker从入门到精通(七)——容器数据共享
什么是容器数据共享?简单来说就是容器与容器之间数据共享,容器与宿主机数据共享. 1.为什么需要数据共享? ①.数据持久化 比如我们有一个MySQL集群,通过容器启动,那么项目运行过程中的数据是保存在容 ...
- TensorFlow.NET机器学习入门【1】开发环境与类型简介
项目开发环境为Visual Studio 2019 + .Net 5 创建新项目后首先通过Nuget引入相关包: SciSharp.TensorFlow.Redist是Google提供的TensorF ...
- ACwing1216. 饮料换购
题目: 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账). 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于 ...
- 使用docker创建含有FFmpeg的自定义镜像
Dockerfile文件 FROM openjdk:8-jre-alpine MAINTAINER "yvioo" RUN echo "http://mirrors.al ...
- Back to Underworld(lightoj 1009)
1009 - Back to Underworld PDF (English) Statistics Forum Time Limit: 4 second(s) Memory Limit: 32 ...