欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java web会话监听并使用spring注入

程序员文章站 2022-03-20 18:41:35
...

 

      在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。

      

import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class OnlineCountListener implements HttpSessionAttributeListener ,HttpSessionListener,ServletContextListener{
	/**
	 * 定义监听的session属性名.
	 */
	public final static String LISTENER_NAME = "user_name";

	/**
	 * 定义存储客户登录session的集合.
	 */
	private static List sessions = new ArrayList();
	
	private static int userSum=0;

	/**
	 * session加入某值时此方法会被调用.
	 * 
	 * @param HttpSessionBindingEvent
	 *            session事件
	 */
	public void attributeAdded(HttpSessionBindingEvent sbe) {
		if (LISTENER_NAME.equals(sbe.getName())) {
			sessions.add(sbe.getValue());
		}
	}

	/**
	 * session失效时的监听方法.
	 * 
	 * @param HttpSessionBindingEvent
	 *            session事件
	 */
	public void attributeRemoved(HttpSessionBindingEvent sbe) {
		if (LISTENER_NAME.equals(sbe.getName())) {
			sessions.remove(sbe.getValue());
		}
	
	}

	/**
	 * session覆盖时的监听方法.
	 * 
	 * @param HttpSessionBindingEvent
	 *            session事件
	 */
	public void attributeReplaced(HttpSessionBindingEvent sbe) {
		if (LISTENER_NAME.equals(sbe.getName())) {
			sessions.remove(sbe.getValue());
			sessions.add(sbe.getValue());
		}
	}
	public void sessionCreated(HttpSessionEvent arg) {
		userSum++;
	}

	public void sessionDestroyed(HttpSessionEvent arg) {
		userSum--;
	}

	/**
	 * 返回客户登录session的集合.
	 * 
	 * @return
	 */
	public static List getSessions() {
		return sessions;
	}
	
	public static int getMemberSum() {
		return sessions.size();
	}
	
	public static int getSum() {
		return userSum;
	}

	public static Boolean isExistInSessions(String username) {
		String user_name;
		for (Integer i = 0; i < sessions.size(); i++) {
			user_name = (String) sessions.get(i);
			if (user_name.equals(username)) {
				return true;
			} else {
				continue;
			}
		}
		return false;
	}

	//此方法在初始化监听器的时候会调用,用于spring注入
	public void contextInitialized(ServletContextEvent sce) {  
        WebApplicationContext applicationContext =    WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());  
        this.xxxService=(XxxService)applicationContext.getBean("xxxService"); 
      
    }  
    public void contextDestroyed(ServletContextEvent sce) {  
          
    }  
	
    private XxxService xxxService;//这里是你希望注入的服务类

    public XxxService  getXxxService(){
      return this.xxxService;
    }

   public void setxxxService(XxxService xxxService){
   this.xxxService=xxxService;
   }
}

 在web.xml中加入以下配置代码,注意必须在spring容器配置之后。

 

 

 

  <listener>
       <listener-class>  
				com.xxx.xxx.xxx.OnlineCountListener
      </listener-class>
  </listener>

 然后在spring配置

 <bean id="xxxService">xxx.xxx.xxx.xxxService</bean>

 

 

如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!
java web会话监听并使用spring注入
            
    
    博客分类: 技巧框架