ServletContextListener和HttpSessionListener 應用
Posted on 2007-11-25 21:23 linlin yu 閱讀(1035) 評論(0) 編輯 收藏 所屬分類: servlet1,ServletContextListener
package com.soyoung.xxx.util;

import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import EDU.oswego.cs.dl.util.concurrent.SynchronizedInt;

/**
*
* @author linlinyu
* @version 1.0
* @web.listener
*/
public class XXXContext implements ServletContextListener {
private String mVersion = null;

private String mBuildTime = null;

private String mBuildUser = null;

public static final String XXX_CONTEXT = "xxxContext";

private static String version_config = "/version.properties";

private static ServletContext mContext = null;

private static Log mLogger = LogFactory.getLog(XXXContext.class);

private final SynchronizedInt mSessionCount = new SynchronizedInt(0);

public String getBuildTime() {
return mBuildTime;
}

public String getBuildUser() {
return mBuildUser;
}

public String getVersion() {
return mVersion;
}

public XXXContext() {
super();

Properties props = new Properties();
try {
props.load(getClass().getResourceAsStream(version_config));
} catch (Exception e) {
mLogger.error("version.properties not found", e);
}

mVersion = props.getProperty("xxx.version", "UNKNOWN");
mBuildTime = props.getProperty("xxx.buildTime", "UNKNOWN");
mBuildUser = props.getProperty("xxx.buildUser", "UNKNOWN");

}

public static XXXContext getXXXContextt() {
ServletContext sc = XXXContext.getServletContext();
return (XXXContext) sc.getAttribute(XXX_CONTEXT);
}

public static ServletContext getServletContext() {
return mContext;
}

public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}

public void contextInitialized(ServletContextEvent sce) {
mContext = sce.getServletContext();
mContext.setAttribute(XXX_CONTEXT, this);
}

public void sessionCreated(HttpSessionEvent se) {
mSessionCount.increment();

mLogger.debug("sessions=" + mSessionCount + ":freemem="
+ Runtime.getRuntime().freeMemory() + ":totmem="
+ Runtime.getRuntime().totalMemory());
}

public void sessionDestroyed(HttpSessionEvent se) {
mSessionCount.decrement();

mLogger.debug("sessions=" + mSessionCount + ":freemem="
+ Runtime.getRuntime().freeMemory() + ":totalmem="
+ Runtime.getRuntime().totalMemory());
}

public int getSessionCount() {
return mSessionCount.complement();
}
}
2,HttpSessionListener
package com.soyoung.xxx.util;

import java.io.Serializable;
import java.security.Principal;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
*
* @author linlinyu
* @version 1.0
* @web.listener
*
*/
public class XXXSession implements HttpSessionListener,
HttpSessionActivationListener, Serializable {
public static final String XXX_SESSION = "com.soyoung.xxx.XXXSession";

private Object userData = null;

private HttpSession httpSession = null;

private static Log mLogger = LogFactory.getFactory().getInstance(
XXXSession.class);

public static XXXSession getXXXSession(HttpServletRequest request) {
XXXSession xxxSession = null;
HttpSession session = request.getSession(false);
if (xxxSession == null) {
xxxSession = new XXXSession();
session.setAttribute(XXX_SESSION, xxxSession);
}
Principal principal = request.getUserPrincipal();
if (xxxSession.getUserData() == null && principal != null) {
// Object user = findUserByName(principal);
// if(user != null){
// xxxSession.setUserData(user);
// }
}

return xxxSession;

}

public Object getSessionAttribute(String atrribue) {
return httpSession.getAttribute(atrribue);
}

public void sessionCreated(HttpSessionEvent se) {
XXXSession xxxSession = new XXXSession();
xxxSession.setHttpSession(se.getSession());
se.getSession().setAttribute(XXX_SESSION, xxxSession);
XXXContext ctx = XXXContext.getXXXContextt();
ctx.sessionCreated(se);
}

public void sessionDestroyed(HttpSessionEvent se) {
XXXContext ctx = XXXContext.getXXXContextt();
ctx.sessionDestroyed(se);
clearSession(se);
}

public void sessionDidActivate(HttpSessionEvent arg0) {

}

public void sessionWillPassivate(HttpSessionEvent se) {
clearSession(se);

}

private void clearSession(HttpSessionEvent se) {
HttpSession session = se.getSession();
try {
session.removeAttribute(XXX_SESSION);
} catch (Throwable e) {
if (mLogger.isDebugEnabled()) {
// ignore purge exceptions
mLogger.debug("EXCEPTION PURGING session attributes", e);
}
}
}

public Object getUserData() {
return userData;
}

public void setUserData(Object userData) {
this.userData = userData;
}

public HttpSession getHttpSession() {
return httpSession;
}

public void setHttpSession(HttpSession httpSession) {
this.httpSession = httpSession;
}

}









































































































2,HttpSessionListener











































































































