范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SpringBoot监听器的使用方法

  前言
  监听器(Listener)就是监听对象的创建、销毁等状态的变化以及定义一些事件发生后接下来要进行的动作。主要监听的三个域对象为:ServletRequest域、HttpSession域 和ServletContext域。 本文通过几个简单的例子介绍一下监听器的用法。ServletContextListener监听 Servlet上下文
  监听 Servlet 上下文对象可以在系统启动的时候初始化一些数据,方便在使用的时候直接调用。监听器实现代码如下: @Component public class MyServletContextListener implements ServletContextListener {     @Override    //在 ServletContext 对象创建之后马上调用,做初始化     public void contextInitialized(ServletContextEvent event) {         event.getServletContext().setAttribute("name","九天银河聊编程");         System.out.println("ServletContext 对象被创建了");     }     @Override  // 在 ServletContext 对象销毁之后调用     public void contextDestroyed(ServletContextEvent event) {         System.out.println("ServletContext 对象被销毁了");     } }    @GetMapping("/getServletContext")     public String getServletContext(HttpServletRequest request) {         ServletContext servletContext = request.getServletContext();         Object name = servletContext.getAttribute("name");         return String.valueOf(name);     }
  执行效果如下:
  HttpSessionListener获取在线用户数量@Component public class MyHttpSessionListener implements HttpSessionListener {     public static Integer count = 0;     @Override     public void sessionCreated(HttpSessionEvent event) {         count++;         ServletContext application = event.getSession().getServletContext();         application.setAttribute("UserCount", count);         System.out.println("有人上线了,现在在线人数为:" + count + "人");     }     @Override     public void sessionDestroyed(HttpSessionEvent event) {         count--;         ServletContext application = event.getSession().getServletContext();         application.setAttribute("UserCount", count);         System.out.println("有人下线了,现在在线人数为:" + count + "人");     } }@GetMapping("/online") public String getOnlinePersoncount(HttpServletRequest request) {     Integer userCount = (Integer) request.getServletContext().getAttribute("UserCount");     return (userCount == null ? "0" : userCount + ""); } @GetMapping("/login") public String logined(HttpSession session) {     //相同的session,如果sessionid一致,只会被监听一次。     session.setAttribute("username", "九天银河聊编程");     return "success"; } @GetMapping("/logout") public String logout(HttpSession session) {     session.invalidate();//将session设置为失效     return "success"; }
  执行 127.0.0.1:8090/login,控制台显示:
  执行 127.0.0.1:8090/online,返回
  执行 127.0.0.1:8090/logout,控制台显示
  ServletRequestListener统计网站访问次数@Component public class MyServletRequestListener implements ServletRequestListener {     @Override     public void requestInitialized(ServletRequestEvent servletRequestEvent) {         Object countObject = servletRequestEvent.getServletContext().getAttribute("count");         System.out.println("历史访问次数:" + countObject);         Integer count = 0;         if (countObject != null)             count = Integer.valueOf(countObject.toString());         count++;         servletRequestEvent.getServletContext().setAttribute("count", count);     }      @Override     public void requestDestroyed(ServletRequestEvent servletRequestEvent) {         System.out.println("当前访问次数:" + servletRequestEvent.getServletContext().getAttribute("count"));     } }
  随便执行一个接口请求,控制台打印如下:
  再次执行:
  自定义监听方式
  定义监听事件ublic class ListenerEvent extends ApplicationEvent {     String name = null;      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public ListenerEvent(Object source, String value) {         super(source);         name = value;     } }
  定义监听器@Component public class MySpringBootListener implements ApplicationListener {      @Override     public void onApplicationEvent(ListenerEvent listenerEvent) {         String eventInfo = listenerEvent.getName();         System.out.println(eventInfo);     } }
  发布事件@RestController public class ListenerController {     @Resource     private ApplicationContext applicationContext;     @GetMapping("/listener")     public String listener() {         ListenerEvent event =new ListenerEvent(this,"九天银河聊编程");         applicationContext.publishEvent(event);         return "";     } }
  执行 127.0.0.1:8090/listener,控制台显示
  监听器说明
  在目前的Servlet API中提供的web事件监听器接口有以下几个:ServletContextListener -- 监听servletContext对象的创建以及销毁     contextInitialized(ServletContextEvent event) -- 创建时执行     contextDestroyed(ServletContextEvent event) -- 销毁时执行  HttpSessionListener -- 监听session对象的创建以及销毁     sessionCreated(HttpSessionEvent event) -- 创建时执行     sessionDestroyed(HttpSessionEvent event) -- 销毁时执行  ServletRequestListener -- 监听request对象的创建以及销毁     requestInitialized(ServletRequestEvent event) -- 创建时执行     requestDestroyed(ServletRequestEvent event) -- 销毁时执行  ServletContextAttributeListener -- 监听servletContext对象中属性的改变     attributeAdded(ServletContextAttributeEvent event) -- 添加属性时执行     attributeReplaced(ServletContextAttributeEvent event) -- 修改属性时执行     attributeRemoved(ServletContextAttributeEvent event) -- 删除属性时执行  HttpSessionAttributeListener --监听session对象中属性的改变     attributeAdded(HttpSessionBindingEvent event) -- 添加属性时执行     attributeReplaced(HttpSessionBindingEvent event) -- 修改属性时执行     attributeRemoved(HttpSessionBindingEvent event) -- 删除属性时执行  ServletRequestAttributeListener --监听request对象中属性的改变     attributeAdded(ServletRequestAttributeEvent event) -- 添加属性时执行     attributeReplaced(ServletRequestAttributeEvent event) -- 修改属性时执行     attributeRemoved(ServletRequestAttributeEvent event) -- 删除属性时执行生命周期
  request
  指一个URL请求,当发送一个请求时被创建,当一个响应返回时,即被销毁。
  session
  ​ 当一个客户端访问一个WEB应用时创建,标记一个用户与服务器之间的多次请求。session失效有以下几个情况: session 过期,即用户长时间不访问服务器造成过期  用户退出系统,即执行session 的 invalidate 方法,清理session  当前 web 应用被卸载(session 未被持久化)
  application
  ​ 贯穿于当前的 WEB 应用的生命周期,当前 WEB 应用被加载时创建 application 对象,当前 WEB 应用被卸载时销毁 application 对象。
  每天一个小知识,每天进步一点点!!![加油][加油][加油]

饭店18元一份的凉拌西兰花,颜色翠绿不变色,清淡爽口开胃解腻大家好,我是舒晨,每天在这里分享各种家常美食,今天给大家分享下酒佐餐都很受欢迎的凉拌西兰花。西兰花是很受欢的食材,可凉拌,可热炒。凉拌西兰花是最常见的吃法,但要想既好看又好吃,还是ToryBurch上架2023兔年限定系列包包萌兔造型,像素兔图案美国包厂ToryBurch刚刚上架2023农历新春瑞兔(LuckyRabbit)胶囊系列手袋,即将迎来本命年的生肖兔化身为淘气欢脱的像素兔,抱着食来运转的胡萝卜,跃上迷你托特包水桶李玟与年轻型男亲密搂抱,穿挂脖吊带亲吻身材火辣,不见富豪老公饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!12月23日下午,李玟在社交平台上更新了一则动态,晒出她与好友聚会的照片,称她和好朋友们一起共度了很快乐的时光,文末她还阿什利穿小金裙赴派对!200斤身材藏不住,超模界天花板近日,美国大码超模阿什利格雷厄姆现身洛杉矶比弗利山庄的半岛酒店外,她参加完朋友的聚会,靓丽地走在洛杉矶的街头上,这引起了很多网友的关注。从现场拍摄到的画面来看,阿什利身穿一件金色的新年一起赢好运!球王梅西幸运金球夺冠纪念版隆重发布!随着2022卡塔尔世界杯落下帷幕,新的一年即将开启之际,12月22日下午1400,球王梅西幸运金球夺冠纪念版暨国金黄金品牌大使发布会在京举行。体坛周报及体坛总编辑中国金球奖唯一评委陈红黑色丝袜搭配花裙子,重现当年貂蝉,真正的东方古典美女我们大家都知道,陈红当年可以说是名噪一时的大明星,凭借三国演义中貂蝉一角儿大红大紫,一举成为家喻户晓的大美女,名气也是越来越大,当初的陈红更是成为很多网友心目中的女神。如今的陈红已疯狂元素城曝剧照火女与水男触不可及的爱情1905电影网讯皮克斯旗下的新片疯狂元素城,曝光了一张全新的剧照。在剧照上,男女主角正在站在路口,它们四目相对,觉得有千言万语要说,但最终,只是在目光中流露出了爱恋和不舍。原因无二县委大院5大结局1人意难平,2人升职2人被查,小林小萍结婚喜欢看县委大院的朋友,一定会感觉到这剧播得太快了,正是意犹未尽之际呢,这就大结局了!照县委大院的人物架构和演员阵容来看,这部剧怎么也得拍个四五十集吧?可是孔笙导演就是这样的简约派,小米集团管理层大换血,前总裁功成身退,卢伟冰成功上位江山代有才人出,各领风骚数百年。这句老话用来形容如今的商业市场再合适不过,小米从互联网品牌发展到如今全球前三的规模,其中自然少不了老一辈高管的付出与努力。就在昨天,雷锋网报道显示,南都民调年度报告告诉你Z世代是一种怎样的存在南都民调年终盘点报道之二Z世代指的是19952009年间出生的年轻人(即95后00后)。作为互联网原住民的他们,在生活工作社交消费等方面都显示出了这个群体的独特性,逐渐成为当下新生全国首家奥特曼主题酒店即将开业上海海昌海洋公园全国首家奥特曼主题酒店即将开业,包含6大尊享主题全球首创105间盲盒式客房,集住宿互动娱乐餐饮于一体,将于春节期间与游客见面。图说奥特曼主题酒店采访对象供图(下同)
发烧必须喝粥,吃鸡蛋喝牛奶后果很严重!发烧要多喝粥,砖家可以胡说,但身体是自己的,发烧通常伴有食欲不振,胃肠不适,牛排肘子红烧肉就算能吃得下,也吸收不了,最好的食物还就是粥。何况,葱白粥可以退热,杏仁川贝百合粥可以润肺七味药教你乌发固发今天跟大家分享一个乌发固发的中药,全方有七味药,却可以调制因肝肾不足导致的脱发,白发,头发干枯无光泽。由何首乌,茯苓,牛膝,当归,枸杞子,菟丝子,补骨脂等七味药物组成,所以叫七宝美喝茶丨为什么不能代替喝水?疫情当下,我们要时刻保持良好的身体状态,来抵抗疫情的侵袭,除了人体所需的蛋白质维生素,还有极其重要的水分。正常情况下,人体每天所需20003000ml之间的水分,而这些水分要除去从202111!生涯第一次!差点内讧,哈哥你是真敢抢啊东西部强强对决,75人主场119114逆转拿下快船。打了不到20分钟就最多领先20分,这也能被翻,只能说真有你的啊快船。也难怪快船球迷对自家球队总是没什么信心,实力不弱,但强得有限17亿调节费去哪了?媒体人李铁只是背锅,部分费用已被足协挪用最近一段时间,前国足主教练李铁的案件是中国足球的热点,球迷都关注着案件的最新进展。据媒体人冉雄飞日前在直播时,就透露了李铁案件的最新进展,其中有几点直指足协,令人震惊。原来,足协的卡卡和梅西一样忠于爱情,前妻为事业离去,小13岁嫩模为他续爱阿根廷足球巨星梅西不仅在事业上获得巨大的成功,还和爱妻安东内拉你侬我侬,爱情甜如蜂蜜,让人嫉妒上天宠儿。9岁,梅西种下了对安东内拉爱的种子,到现在已整整26年。在这26年里,爱的种黯然退役?本赛季在大家视野消失的球员24岁场均20都无球可打在NBA新赛季开始之后给人最直观的感受就是年轻球员开始当家做主了,虽然杜兰特和库里仍旧处于巅峰,但是年轻一代统治联盟的洪流也是滚滚而来,本赛季米切尔布克亚历山大东契奇等年轻球员都打今日NBA得分井喷,球员数据炸裂,下面一起看看最佳球员花落谁家NBA今日一共14场比赛,共28支球队参与。出现了很多炸裂的数据,下面我把数据一一例举出来,看看谁是今日最佳球员。我这里评选的最佳球员不光要数据好,还要带队赢球。当然了数据特别好的快船2换1报价班巴!伦纳德迎来内线帮手,快船要起飞了?报价背景快船114119不敌76人,半场领先12分被逆转,本场比赛可以说是,恩比德和伦纳德的对轰大战,哈登的助攻之战,两边都使出了全力,胜利就看角色球员谁能战出来,显然76人这边的浓眉最新伤情更新!湖人球迷最不想看到的事情,还是发生了!湖人官方今日更新了浓眉伤情。经过和队医以及外部专家的广泛协商,确定戴维斯右脚存在应力性损伤,将无限期缺阵,进一步的伤情更新将在适当的时候公布。Woj也更新了浓眉的情况他的脚部的疼痛中超倒计时!调节费和李铁事件,俱乐部退赛而八冠王保级举白旗2022赛季中超第23轮联赛结束,各种乱象也在此刻爆发。同分的两支争冠球队武汉三镇和山东泰山,均在此刻无法获胜。而八冠王广州队在对方派出年轻阵容的情况居然没有获胜,郑智在中超保级举