2011-09-30 113 views
1

我剛開始學習前幾天開發的Java Web應用程序(JSF),到目前爲止,一切都很清楚。但現在我有一個問題,我真的不知道如何繼續下去。 我使用Glassfish服務器3.1.1,併成功配置我的用戶組領域。Java Web應用程序多用戶會話處理

儘管只有1個用戶登錄,但一切正常,但是當我從另一個瀏覽器(或甚至另一臺計算機)登錄另一個帳戶時,第一個會話被清除並顯示上次登錄的用戶數據在每個以前的會議。

對不起,我的無知,也許這是一個簡單的問題,但我不知道從哪裏開始。 我正在使用Netbeans,並讓它從postgreSQL數據庫生成我的實體類,然後從實體生成JSF頁面。 我讀過關於HttpSessions的內容,但沒有一切都清楚。我應該繼續這種方式,還是解決方案在不同的方向?如果這是正確的方式,任何人都可以給我一個樣本源?

這裏是我的代碼:

Login.xhtml:

<h:inputText id="email" size="25" value="#{login.email}" maxlength="30"/> 
<h:inputSecret id="password" size="25" value="#{login.password}" maxlength="100"/> 
<h:commandLink value="Bejelentkezés" action="#{login.loginAction}"/> 

這是我的登錄類看起來像:

@ManagedBean(name="login") 
@RequestScoped 
public class LoginBean 
{ 

private String email; 
private String password; 

public String loginAction() 
{ 
    HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance() 
      .getExternalContext().getRequest(); 
    try 
    { 
     System.out.println("login with: " + email + ", " + password + "."); 
     req.login(email, password); 
    } 
    catch(ServletException e) .... 

任何幫助將不勝感激!
在此先感謝

Atesh

回答

2

到目前爲止發佈的代碼看起來不錯。

但我從不同的瀏覽器(甚至是不同的計算機),另一個帳戶登錄,第一個會話將被清除,最後登錄的用戶的數據在每一個前幾屆所示。

此問題是在迄今爲止發佈的代碼中引起的。該會話不應該被清除。這可能是對事件的誤解。也許你不明白「會話」的概念。這些症狀表明,您顯然已經在某些static變量或@ApplicationScoped受管bean中獲取了登錄用戶。確保你沒有這樣做。至於如何「會議」的作品,請閱讀:How do servlets work? Instantiation, sessions, shared variables and multithreading