採用了jass的方法以後(代碼如下),現在我如果打開首頁,會顯示a user coming!
可是當我關閉首頁以後,並沒有destroy Session啊!這是爲什麼呢?請高手解答!如何才能比較準確的一點把關閉IE或者通過其他方式已經離開網站的用戶從列表種清除呢??
/**監聽器,監聽用戶的在線信息*/
public class UserSessionListener
implements HttpSessionListener {
public UserSessionListener() {
}
public static int onlineUserCount = 0;
public static ArrayList onlineUsersList = new ArrayList();
/* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
onlineUserCount++;
System.out.println(onlineUserCount + " A users coming!");
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
// TODO Auto-generated method stub
onlineUserCount--;
SysUser sysUser = (SysUser) httpSessionEvent.getSession().getAttribute(
"com.hhsoft.beans.elearning.model.user.SysUser");
if (sysUser != null){
int i = onlineUsersList.indexOf(sysUser.getUserId());
onlineUsersList.remove(i);
System.out.println("Session Destroyed!Session ID:" + sysUser.getUserId());
}
System.out.println("Session Destroyed!A user left!");
}
}
好像各個Element的順序是有要求的,
你最好是按照icon?,display-name?,description?,distributable?,context-param*,filter*,filter-
mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welco
me-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-const
raint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*
的順序,listener好像就必須放在filter-mapping的後面,servlet的前面,
你把session-config放到servlet-mapping後面試試。
下面是我的一個config,就沒有問題:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>servlet2</filter-name>
<filter-class>servletexam.Servlet2</filter-class>
</filter>
<filter>
<filter-name>servlet3</filter-name>
<filter-class>servletexam.Servlet3</filter-class>
</filter>
<filter-mapping>
<filter-name>servlet2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>servlet3</filter-name>
<servlet-name>servlet1</servlet-name>
</filter-mapping>
<listener>
<listener-class>servletexam.MySessionListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>servletexam.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>