前言
本文介绍servlet实现监听器的功能,文章附具体的实现代码。listener是servlet规范定义的一种特殊类,用于监听servletContext,HttpSession和ServletRequest等域对象的创建和销毁事件。监听域对象的属性发生修改的事件,用于在事件发生前、发生后做一些必要的处理。
可用于以下方面:1、统计在线人数和在线用户2、系统启动时加载初始化信息3、统计网站访问量4、记录用户访问路径。
1、代码实现
监听器类
package com.example.demo.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @Description 编写session的监听器
* @Author wangchengzhi
* @Date 2023/4/25 16:12
*/
@WebListener
public class SessionListener implements HttpSessionListener {
public static int online=0;
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("创建session");
online++;
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("销毁session");
}
}
控制层方法
package com.example.demo.controller;
import com.example.demo.listener.SessionListener;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
/**
* @Description TODO
* @Author wangchengzhi
* @Date 2023/4/24 20:29
*/
@RestController
public class HelloController {
//监听用户登录
@RequestMapping("/login")
public static String hello(HttpSession req){
req.setAttribute("","");
return "hello czing";
}
//显示在线用户
@RequestMapping("/online")
public static String online(){
return "当前在线人数:"+ SessionListener.online+"人";
}
}
如果不使用@WebListener注解,可以使用包扫描替代,启动时装载监听器类,代码如下:
package com.example.demo;
import com.example.demo.controller.MyServlet;
import com.example.demo.listener.SessionListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
/**
* @Author wangchengzhi
* @Description 监听器的创建
* @Date 16:14 2023/4/25
* @Param
* @return
**/
@Bean
public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new SessionListener());
System.out.println("listener");
return servletListenerRegistrationBean;
}
}
场景验证:
先请求登录方法:http://localhost:8080/login
然后调用在线人数方法: http://localhost:8080/online
可以换浏览器进行验证,不同session登录被监听显示的登录人数。
后语
本文介绍了监听器的写法和@WebListener注解的用法,供大家参考学习,有问题欢迎交流。