首页 > 其他分享 >监听器Listener使用&Session

监听器Listener使用&Session

时间:2023-04-15 21:33:47浏览次数:51  
标签:session void Listener println Session user 监听器 Override public

使用配置 xml配置

1.编写一个监听ServletContext生命周期的Listener;实现Listener接口在当前 2.项目中注册(在web.xml)使用;

public class MyServletContextListener implements ServletContextListener {
  @Override
  public void contextInitialized(ServletContextEvent sce) {
    System.out.println("this is contextInitialized");
  }

  @Override
  public void contextDestroyed(ServletContextEvent sce) {
    System.out.println("this is contextDestroyed");
  }
}

<listener>
    <listener-class>com.it.MyServletContextListener</listener-class>
</listener>

使用配置 SpringBoot 注解

1.在implements类上@WebListener Listener改为实现ServletContextListener,还要在类上加@WebListener注解。其余可以不动: 2.SpringBoot启动类配置 只需要在SpringBoot 启动类中加上@ServletComponentScan注解即可

@WebListener
public class MyServletContextListener implements ServletContextListener {
  @Override
  public void contextInitialized(ServletContextEvent sce) {
    ServletContext servletContext = sce.getServletContext();
    System.out.println("this is contextInitialized" + servletContext);
  }

  @Override
  public void contextDestroyed(ServletContextEvent sce) {
    ServletContext servletContext = sce.getServletContext();
    System.out.println("this is contextDestroyed" + servletContext);
  }
}


@ServletComponentScan
@SpringBootApplication
public class IntervienoteApplication {}

session生命周期

  • 由于客户端与服务器之间的会话是无状态的机制,Session则可用于关联访问,因此多用与用户登录等功能上。
//引号中的"xxx"为页面中name标签里的值,逗号后面的是Servlet中的变量名。
request.getSession().setAttribute("xxx",xxx);//储存到session中

request.getSession().getAttribute("xxx",xxx);//读取session中的值
  • 若要移除Session中特定的值,可以调用removeAttribute方法,但request中的SessionID仍不变,只是其中的值发生了改变,Session还是原来的Session
request.getSession().removeAttribute("xxx");

Attribute演示 HttpSessionAttributeListener

session.setAttribute( "user", "admin" );Thread.sleep( 3eee);
session. setAttribute( "user", "zhangsan");Thread.sleep( 3eee);
session.removeAttribute( "user");

@WebListener
public class MySession implements HttpSessionAttributeListener {
  @Override
  public void attributeAdded(HttpSessionBindingEvent se) {
	  String name = se.getName();//获取属性
	  Object value = se.getValue();//获取属性数值
	  System.out.println("session添加属性");
  }

  @Override
  public void attributeRemoved(HttpSessionBindingEvent se) {
	  System.out.println("session移除属性");
  }

  @Override
  public void attributeReplaced(HttpSessionBindingEvent se) {
	  System.out.println("session修改属性");
  }
}

Session 钝化 活化 HttpSessionActivationListener

User user = new User();
httpSession.setAttribute("loginUser", user);
@Override
public void sessionDidActivate(HttpSessionEvent se) {
	HttpSession session = se.getSession();//要钝化的session
	System.out.println("user和session一起钝化了");
}

@Override
public void sessionWillPassivate(HttpSessionEvent se) {
	System.out.println("user和session 活化来");
}

Session 綁定 解绑 HttpSessionBindingListener

@Override
User user = new User();
httpSession.setAttribute("loginUser", user);
httpSession.removeAttribute("loginUser");

// 检测user对象绑定 添加就是绑定
@Override
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
Object value = event.getValue(); // 获取的绑定的数值
}

// 检测user解绑了 移除就是解绑
public void valueUnbound(HttpSessionBindingEvent event) {}

使用场景

ServletContextListener:监听服务器启动停止; HttpsessionBindingListener:监听某个对象绑定到session域中;

标签:session,void,Listener,println,Session,user,监听器,Override,public
From: https://blog.51cto.com/u_15993308/6192449

相关文章

  • 在Express中使用Cookie和Session
    如果想要通过NodeJS使用cookie,那么你需要安装"cookie-parser"包,如果是session那么需要安装"cookie-session"安装方法:npminstallcookie-parser-Snpminstallcookie-session-S然后在服务端引用varcookieParser=require('cookie-parser');//cookievarcookieSessi......
  • Django中使用session,并设置过期时间
    Django中session的使用使用背景django中自带了一个数据库,名字是djang_session,用户做用户凭证。它有三个字段session_keysession_dataexpire_data这个数字会返回给客户端存储的相关信息过期时间流程:1.用户首次输入账户名和密码,服务端判断正确之后创建一个sesi......
  • 集群中几种session同步方案
    集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景。1.客户端cookie加密这是我以前采用的方式,简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。问题:session中数......
  • python 之 session鉴权的处理
    一、session鉴权的处理1.requests的会话对象就像一个浏览器一样,它会在同一个会话中自动处理cookie信息,不需要写任何额外的代码。importrequests  session=requests.Session()#理解为就是一个浏览器  type(session)  requests.sessions.Sess......
  • vuex存储和本地存储(localstorage、sessionstorage)的区别
    1.最重要的区别:vuex存储在内存,localstorage则以文件的方式存储在本地2.应用场景:vuex用于组件之间的传值,localstorage则主要用于不同页面之间的传值。3.永久性:当刷新页面时vuex存储的值会丢失,localstorage不会。注:很多朋友觉得用localstorage可以代替vuex,对于不变的数据确实可......
  • cookies、sessionStorage与localStorage在Vue中的使用
    目录简介localStorage的使用语法示例sessionStorage的操作语法示例cookie的操作vue-cookie语法示例vue-cookies语法示例js-cookie的使用简介cookies临时存储在客户端中,并且有过期事件,到过期时间会被自动清理。sessionStorage临时存储在客户端中,关闭浏览器后......
  • 分布式session一致性方案
    当服务器不止一台,就需要session共享,避免多次登录1、客户端存储原理将session存储在浏览器cookie中优点:服务端不需要存储session,不会出现session不一致的问题缺点:存储在客户端不安全,并且每次请求都携带session,占用宽带,并且存储大小受到浏览器的限制。2、粘性session原理对于同一个用......
  • 关于浏览器sessionStorage共享问题
    今天也是闲暇之余看了点前端基础知识发现了好玩的window.open("同源页面")这种方式新开的页面会复制之前的sessionStorage通过a标签新开的页面同样也会,原理相同,在这就不赘述了。SessionStorage也有同源策略的限制,但是SessionStorage有一条更加严格的限制SessionStorage只有在......
  • sqlalchemy快速插入数据,scoped_session线程安全,加载类上的装饰器,基本增删改查,django中
    今日内容sqlalchemy快速插入数据sqlalchemy是什么orm框架,跟其他web框架没有必然联系,可以独立使用安装,快速使用,执行原生sql创建表和删除表不能创建数据库不能修改字段(增加,删除)使用orm插入第一步:生成engine对象engine=create_engine("mysql+pymysql://[email protected].......
  • flask框架06 sqlalchemy使用 scoped_session线程安全 一对多 多对多 增删改查
    今日内容详细目录今日内容详细1sqlalchemy快速插入数据2scoped_session线程安全2.1基本使用2.2加在类上的装饰器3基本增删查改3.1基本增删查改和高级查询3.2原生sql3.3django中执行原生sql4一对多4.1表模型4.2新增和基于对象的查询5多对多5.1表模型5.2增加和基于......