监听器(Listener)就是监听对象的创建、销毁等状态的变化以及定义一些事件发生后接下来要进行的动作。主要监听的三个域对象为:ServletRequest域、HttpSession域 和ServletContext域。本文通过几个简单的例子介绍一下监听器的用法。
成都创新互联公司服务项目包括吉首网站建设、吉首网站制作、吉首网页制作以及吉首网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,吉首网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到吉首省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
监听 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);
}
执行效果如下:
@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,控制台显示。
@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) -- 删除属性时执行
指一个URL请求,当发送一个请求时被创建,当一个响应返回时,即被销毁。
当一个客户端访问一个WEB应用时创建,标记一个用户与服务器之间的多次请求。session失效有以下几个情况:
贯穿于当前的 WEB 应用的生命周期,当前 WEB 应用被加载时创建 application 对象,当前 WEB 应用被卸载时销毁 application 对象。
网站栏目:SpringBoot监听器的使用方法
当前地址:http://www.shufengxianlan.com/qtweb/news3/241453.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联