title: 在SpringBoot中使用Listener
data: 2022年1月5日16:57:46
tags: [SpringBoot]
使用注解注册Listener
/**
* SpringBoot使用 Listener
*/
@WebListener
public class OneListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("OneListener init ...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
@SpringBootApplication
//在 springBoot 启动时会扫描@WebListener并实例化
@ServletComponentScan
public class OneListenerApp {
public static void main(String[] args) {
SpringApplication.run(OneListenerApp.class, args);
}
}
以下是简单的实现了在线人数统计的功能
-
import com.yhd.ssm.dto.IPDTO; import com.yhd.ssm.utils.IPUtil; import org.springframework.stereotype.Controller; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Map; @RestController public class HelloController { private static long num = 0; @RequestMapping("/hello") public Map hello(HttpServletRequest request,Map<String, Object> map) { String onlineNum=""; //request.getSession()触发监听器的sessionCreated HttpSession session=request.getSession(); session.setMaxInactiveInterval(10*1);//以秒为单位,即在没有活动30分钟后,session将失效 ServletContext app=session.getServletContext(); int count= (int) app.getAttribute("count"); onlineNum=String.format("当前%d人在线",count); //通过 map 向前台页面传递数据 map.put("name", "dapangdong.top"); map.put("url", "http://www.baidu.com"); map.put("onlineNum", onlineNum); return map; } }
OnlineListener.java
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.*;
@WebListener()
public class OnlineListener implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener {
private static int count=0;
public OnlineListener() {//构造函数
}
@Override
public void contextInitialized(ServletContextEvent sce) {//应用初始化完成
System.out.println("应用初始化完成");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("应用销毁");
}
@Override
public void sessionCreated(HttpSessionEvent se) {//创建
/* Session is created. */
count++;
HttpSession session = se.getSession();
ServletContext app = session.getServletContext();
app.setAttribute("count",count);
System.out.println("OnlineListener:"+count);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {//销毁
/* Session is destroyed. */
count--;
ServletContext app = se.getSession().getServletContext();
app.setAttribute("count",count);
System.out.println("OnlineListener销毁:"+count);
}
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
HttpSessionAttributeListener.super.attributeAdded(se);
}
}