2011-09-30 97 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

相关问题