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. 【Matlab】imagesc的使用

    imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色 imagesc(x,y,A) x,y决定坐标范围 x,y应是两个二维向量,即x=[x1 x2],y= ...

  2. Linux下安装数据库sqlite3

    目录 一.简介 二.安装 三.测试 一.简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎 ...

  3. hbuilder打包app基本流程

    声明:本文可能用到一些工具和第三方网站,都是为了达到目的而使用的工具,绝不含有广告成分 1.下载.最新的Hbuilder X貌似不能直接创建移动app了(自己不会用),建议旧版.可去腾某讯软件中心下载 ...

  4. Java值引用和对象引用区别Demo

    转自:http://blog.csdn.net/gundsoul/article/details/4927404 以前就知道JAVA对象分对象引用和值引用,并且还知道8种基础数据类型,即引用时是值引用 ...

  5. [ZJCTF 2019]EasyHeap | house of spirit 调试记录

    BUUCTF 上的题目,由于部分环境没有复现,解法是非期望的 house of spirit 第一次接触伪造堆的利用方式,exp 用的是 Pwnki 师傅的,本文为调试记录及心得体会. 逆向分析的过程 ...

  6. ASP.NET MVC 导入Excel文件(完整版)

    View视图部分: <form method="post" enctype="multipart/form-data" action="/Pos ...

  7. Linux三剑客综合练习

    1.找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写 [root@localhost ~]# grep -E '^[sS]' /proc/meminfo [root@loca ...

  8. JAVA使用netty建立websocket连接

    依赖 <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <gr ...

  9. 使用docker自定义oraclejdk启动jar包

    Dockerfile文件 FROM centos:7 #把java与tomcat添加到容器中 ADD jdk-8u161-linux-x64.tar.gz /usr/local/ #安装 vim编辑器 ...

  10. JAVA删除某个文件夹(递归删除文件夹的所有文件)

    /** * 递归删除文件夹下所有内容 最后删除该文件夹 * @param filePath 要删除的文件夹路径 * @return */ public boolean deleteFiles(Stri ...