成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot監聽器的使用方法

開發 架構
主要監聽的三個域對象為:ServletRequest域、HttpSession域 和ServletContext域。本文通過幾個簡單的例子介紹一下監聽器的用法。

前言

監聽器(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<ListenerEvent> {

@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 對象。

責任編輯:姜華 來源: 今日頭條
相關推薦

2010-04-23 18:00:31

2009-07-08 17:39:23

Servlet監聽器

2011-03-21 16:21:49

Oracle監聽口令監聽器

2009-09-27 17:46:22

Hibernate監聽

2010-04-22 09:52:28

Oracle監聽器

2009-11-18 18:28:27

Oracle監聽器

2011-05-16 10:14:11

Hibernate

2010-04-23 10:13:18

Oracle監聽

2010-01-13 09:49:09

注釋監聽器Listener

2011-06-01 14:55:24

Android Service 監聽器

2009-07-06 13:48:53

Servlet監聽器

2009-01-03 13:37:26

Oracle監聽器Oracle服務器Oracle網絡配置

2010-02-22 15:06:31

WCF信道監聽器

2009-11-09 10:03:09

WCF通道監聽器

2010-11-19 13:48:18

2010-04-22 15:46:58

Oracle監聽

2012-02-03 13:27:16

2010-08-09 09:47:34

Flex事件機制

2010-08-11 08:58:51

無線路由器使用

2010-08-11 13:40:31

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视频网站在线看 | 婷婷中文字幕 | 国产日韩欧美在线播放 | 黄色大片免费观看 | 日韩2020狼一二三 | 国产成人精品免费视频大全最热 | 免费一区二区 | 久久国产精品一区二区三区 | 亚洲国产精品一区二区第一页 | 午夜免费网站 | 九七午夜剧场福利写真 | 国产精品成人一区二区三区夜夜夜 | 亚洲精品自拍视频 | 视频一区中文字幕 | 国产精品精品视频一区二区三区 | 亚洲免费在线 | 五月婷婷 六月丁香 | 91精品国产一区二区在线观看 | 四虎海外| 人人爽人人草 | 久久99精品国产 | 亚洲精品888 | 日韩美女在线看免费观看 | a久久| 国产一区亚洲 | 日韩精品一区二区三区在线 | 国产精品免费观看 | 国产成人综合在线 | 亚洲免费精品 | 日韩av看片 | 中文日韩字幕 | 免费观看一级视频 | 久亚州在线播放 | 久久丁香| 欧美在线一区二区三区 | 中文字幕av在线 | 欧美三级久久久 | 日本天天操 | 久久久久久电影 | 亚洲人成网站777色婷婷 | 国产免费av网|