2012-07-10 56 views
4

沒有交互我已經寫了一個test.jsp的,web.xml和會話listener.For會話超時我使用HttpSessionListener feature.My會議是越來越無效1分鐘後,當沒有用戶與會話的交互。 技術應用於:JSP,Servlet的 JSP檢查數據庫值,當有用戶使用會話

<%@ page import="java.util.List"%> 
<%@ page import="java.util.ArrayList"%> 
<html> 
    <head> 
     <title>Servlet Session Listener example</title> 
    </head> 
    <body> 
     <h2>Add User Screen</h2> 

     <span style="float: right"> 
      <a href="DestroySession.jsp">Destroy this session</a> 
      </span> 

     <form method="post" action="AddUser.jsp"> 
      <h3>Enter Username to Add in List</h3> 
      <input type="text" name="user"/> 
      <input type="submit" value="Add User"/> 
     </form> 

    <% 
     List<String> users = (List<String>)session.getAttribute("users"); 
     for(int i=0; null!=users && i < users.size(); i++) { 
      out.println("<br/>" + users.get(i)); 
     } 
    %> 
    </body> 
</html> 

Java代碼

import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class SessionListener implements HttpSessionListener { 
    private int sessionCount = 0; 

    public void sessionCreated(HttpSessionEvent event) { 
     synchronized (this) { 
      sessionCount++; 
     } 

     System.out.println("Session Created: " + event.getSession().getId()); 
     System.out.println("Total Sessions: " + sessionCount); 
    } 

    public void sessionDestroyed(HttpSessionEvent event) { 
     synchronized (this) { 
      sessionCount--; 
     } 
     System.out.println("Session Destroyed: " + event.getSession().getId()); 
     System.out.println("Total Sessions: " + sessionCount); 
    } 
} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
    <display-name>SessionListener</display-name> 
    <distributable/> 
    <listener> 
     <listener-class>SessionListener</listener-class> 
    </listener> 
    <session-config> 
     <session-timeout>1</session-timeout> 
    </session-config> 
</web-app> 

我的要求是:當有用戶與會話沒有互動1分鐘,我想根據某些數據庫值使會話無效。如果數據庫值爲false,則不應使會話失效。如果數據庫值爲true,那麼會話應該失效。但經過1更細的(當沒有與會話用戶交互),SessionListener類的sessionDestroyed功能自動啓動,我不能夠檢查數據庫的價值。我怎樣才能做到這一點?

+0

您使用的是什麼應用程序服務器? – MaVRoSCy 2012-07-16 09:59:33

+0

@MaVRoSCy:JBOSS 5.x的 – user595014 2012-07-16 10:42:53

+0

你需要檢查會話的生命週期中可能會更改數據庫的價值? – MaVRoSCy 2012-07-18 06:39:19

回答

3

你應該試試這個:

  • 加入會話的自定義管理主題
  • 在reqular間隔的自定義管理線程應該做下面的步驟。
    • 讓自定義管理線程讀取dB值
    • 如果無效會話在DB禁用,讓管理線程使用增加的setMaxInactiveInterval會話超時值。值-1表示Never Invalidate.
    • 如果在數據庫中啓用了無效會話,則讓管理線程通過在setMaxInactiveInterval中設置較小的值來減少會話超時值。
+1

u能請告訴我一些一段代碼或U可以給我你的代碼或工作示例說明自定義管理線程(不是數據庫檢索) – user595014 2012-07-10 07:38:00

+0

嗯,給我一點時間,我會盡量給你的東西。 – 2012-07-10 09:22:22

+0

請回復.................! – user595014 2012-07-16 06:52:02

相關問題