web.xml
<listener>
<listener-class>cyoa.page.OnlinePersons</listener-class>
</listener>
import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlinePersons implements HttpSessionListener,
ServletContextListener, ServletContextAttributeListener {
private int count;
private ServletContext context = null;
public OnlinePersons() {
count = 0;
// setContext();
}
// 创建一个session时激发
public void sessionCreated(HttpSessionEvent se) {
count++;
setContext(se);
}
// 当一个session失效时激发
public void sessionDestroyed(HttpSessionEvent se) {
count--;
setContext(se);
}
// 设置context的属性,它将激发attributeReplaced或attributeAdded方法
public void setContext(HttpSessionEvent se) {
se.getSession().getServletContext().setAttribute("onLine",
new Integer(count));
}
// 增加一个新的属性时激发
public void attributeAdded(ServletContextAttributeEvent event) {
log("attributeAdded('" + event.getName() + "', '" + event.getValue()
+ "')");
}
// 删除一个新的属性时激发
public void attributeRemoved(ServletContextAttributeEvent event) {
log("attributeRemoved('" + event.getName() + "', '"
+ event.getValue() + "')");
}
// 属性被替代时激发
public void attributeReplaced(ServletContextAttributeEvent event) {
log("attributeReplaced('" + event.getName() + "', '"
+ event.getValue() + "')");
}
// context删除时激发
public void contextDestroyed(ServletContextEvent event) {
log("contextDestroyed()");
this.context = null;
}
// context初始化时激发
public void contextInitialized(ServletContextEvent event) {
this.context = event.getServletContext();
log("contextInitialized()");
}
private void log(String message) {
System.out.println("ContextListener: " + message);
}
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
//退出时
function close(){
document.location.href="loginoutAction.do";
var ua = navigator.userAgent; var ie = navigator.appName=="Microsoft Internet Explorer"?true:false;
if(ie){
var IEversion = parseFloat(ua.substring(ua.indexOf("MSIE ")+5,ua.indexOf(";",ua.indexOf("MSIE "))));
if( IEversion< 5.5){
var str = '';
document.body.insertAdjacentHTML("beforeEnd", str);
document.all.noTipClose.Click();
} else {
top.opener =null; top.close();
}
}else{
top.close();
}
}
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginoutAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
HttpSession sess=request.getSession(true);
if(sess.getAttribute("username")!=null && !sess.getAttribute("username").equals("")){
sess.removeAttribute("username");
sess.invalidate();
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=null;
try{
out= response.getWriter();
out.print("<script language='javascript'> top.location.href='login.jsp';</script>");
} catch(Exception e){e.printStackTrace();}
return null;
}
}