HttpSession 相关的监听

在前面我们学习了servletconfig和servletContext 知道了他们的应用方式,以及servletcontext 相关的监听后我们下面来看看httpsession 相关的监听

 

Httpsession 相关的监听有: HttpSessionListener,HttpSessionAttributeListener,HttpSessionBindingListener以及HttpSessionActivationListener 下面我们就来一个个看看相关实现:

一、HttpSessionListener 会话生命周期的监听

 

1、HttpSessionListener  实现这个接口并实现sessionCreated(HttpSessionEventarg0)和sessionDestroyed(HttpSessionEvent arg0)这两个方法就可以实现session 生命周期的监听,也就是在session创建的时候会调用sessionCreated(HttpSessionEvent arg0) 方法而通过HttpSessionEvent 这个类可以获取session对象。同样在session过期时会调用sessionDestroy(HttpSessionEvent arg0)通过方法的参数HttpSessionEvent对象可以获取session对象

 

2、配置方式有两种:第一使用java的注解:javax.servlet.annotation.WebListener 

   第二种就是web.xml 配置文件中配置监听

<listener>

 <listener-class>soufun.com.HttpSessionL</listener-class>

  </listener>

 

3、实例:在session创建或销毁时会调用这个类的相应方法
 

package soufun.com;

 

importjavax.servlet.http.HttpSession;

importjavax.servlet.http.HttpSessionEvent;

importjavax.servlet.http.HttpSessionListener;

 

/**

 *@author WHD

 *data 2015年8月5日

 */

public classHttpSessionL implements HttpSessionListener{

privatestatic int count=0;

 

@Override

publicvoid sessionCreated(HttpSessionEvent arg0) {

//TODO Auto-generated method stub

System.out.println("getthe  session object");

HttpSessionsession=arg0.getSession();

HttpSessionL.count++;

session.setAttribute("count",count);

System.out.println("sessionstart:"+count);

}

 

@Override

publicvoid sessionDestroyed(HttpSessionEvent arg0) {

//TODO Auto-generated method stub

System.out.println("get out of session ");

HttpSessionL.count--;

HttpSessionsession= arg0.getSession();

session.setAttribute("count",count);

System.out.println("sessionconfigsessiontimeout:"+count);

}

 

publicstatic int getCount() {

returncount;

}

 

publicstatic void setCount(int count) {

HttpSessionL.count= count;

}

 

}

 

二、HttpSessionAttributeListener :

1、session属性变化的监听,也就是session中添加,修改,删除的时候会触发这个监听类,并且会调用相应的方法。

2、监听的配置:第一种使用java注释配置,javax.servlet.annotation.WebListener

第二种使用web.xml配置文件进行配置:

 <listener>

 <listener-class>soufun.com.HttpSessionAL</listener-class>

  </listener>

 

 

3、实例:

 

(1)、使用javax.servlet.annotation.WebListener实现监听

package soufun.com;

 

importjavax.servlet.http.HttpSessionAttributeListener;

importjavax.servlet.http.HttpSessionBindingEvent;

importjavax.servlet.http.HttpSession;

importjavax.servlet.annotation.WebListener;

/**

 *@author WHD

 *data 2015年8月16日

 */

@WebListener()

public classHttpSessionAL implements HttpSessionAttributeListener {

 

@Override

publicvoid attributeAdded(HttpSessionBindingEvent arg0) {

   System.out.println("session 中添加了属性-----");

}

 

@Override

publicvoid attributeRemoved(HttpSessionBindingEvent arg0) {

System.out.println("session 中移除了属性----");

}

 

@Override

publicvoid attributeReplaced(HttpSessionBindingEvent arg0) {

System.out.println("session 中替换了属性-----");

}

}

 

(2)、使用web.xml配置文件进行配置

package soufun.com;

importjavax.servlet.http.HttpSessionAttributeListener;

importjavax.servlet.http.HttpSessionBindingEvent;

importjavax.servlet.http.HttpSession;

/**

 *@author WHD

 *data 2015年8月16日

 */

public classHttpSessionAL implements HttpSessionAttributeListener {

 

@Override

publicvoid attributeAdded(HttpSessionBindingEvent arg0) {

   System.out.println("session 中添加了属性");

}

 

@Override

publicvoid attributeRemoved(HttpSessionBindingEvent arg0) {

System.out.println("session 中移除了属性");

}

 

@Override

publicvoid attributeReplaced(HttpSessionBindingEvent arg0) {

System.out.println("session 中替换了属性");

}

}

 

 

三、HttpSessionBindingListener

1、监听session中绑定实现这个接口的类的时候触发响应函数

 

2、HttpSessionBindingListener是session中添加实例了这个接口的类的时候会调用这个类的相关方法

 

3、实例,注意这个和之前的不同不用配置监听,而是向session中添加,移除实现了这个接口的类的时候,就会执行这个类ValueBound(HttpSessionBindingEvent arg0) 和 valueUnbound(HttpSessionBindingEvent arg0) 这两个方法

package soufun.com;

importjavax.servlet.http.HttpSessionBindingEvent;

importjavax.servlet.http.HttpSessionBindingListener;

 

/**

 *@author WHD

 *data 2015年8月10日

 */ 

// 注意这个类和其他的绑定的类不同这里不用配置,是要session中添加或移除就会触发这个类

public classUser  implementsHttpSessionBindingListener {

public  User(){};

@Override

publicvoid valueBound(HttpSessionBindingEvent arg0) {

//TODO Auto-generated method stub

System.out.print("在session中添加实现了httpsessionbindinglistener这个接口的类的时候会执行这个方法");

}

 

@Override

publicvoid valueUnbound(HttpSessionBindingEvent arg0) {

//TODO Auto-generated method stub

System.out.print("从session中移除实现了httpsessionbindinglistener这个接口的类的时候会执行这个方法");

}

 

}

// session 中添加实现了接口的类

protected voiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

        // 创建对象

User  user= new User();

//获取session

HttpSessionsession=request.getSession();

Stringid= session.getId();

System.out.println("session 中添加valuebound 属性" +"sessionid"+id);

session.setAttribute("user",user);

System.out.println("hsbl 的valueBound方法在执行");

// 从session会话中移除这个值

session.removeAttribute("user");

System.out.println("hsbl 的valueunBound 方法在执行");

}


 

你可能感兴趣的:(HttpSession 相关的监听)