2014-09-04 111 views
1

在我的JSP应用程序的时间,我想跟踪的是在登录的用户的。保持Java对象存活会话

当用户试图登录,我用的数据库事务的UserManager类来验证条目是否存在(我不打算构建一个非常安全的网站,大部分是为了学习)。

UserManager类从检索到的用户信息(即他们的名字,年龄,照片等)中构造实例对象。

我使用此对象在登录成功后有效地调用在用户主页上准备演示文稿。

问题是,我不知道如何在整个会话期间保持这个User对象与用户一起保持活动状态。举例来说,如果他去到其他页面,我还是希望能够调用

user.getPhoto() 

user.getLastName() 

没有复杂的数据库中的每个查询时间。

有没有办法做到这一点?

+1

你使用任何框架或仅小服务程序? – Dici 2014-09-04 16:28:11

+0

没有框架。 Just Servlets – CodyBugstein 2014-09-04 16:45:29

回答

4

将对象存储在会话中。里面你的servlet,只需拨打这个:

User user = ... //use your UserManager or something else to get the user 
if (<valid user>) { 
    //store the user object in session 
    request.getSession().setAttribute("user", user); 
} 
//forward to the next view... 

然后你就可以在您的视图中检索数据(JSP,Facelets的),使用表达式语言:

<!DOCTYPE html> 
<html lang="en"> 
    <!-- tags... --> 
    <div> 
     Welcome ${user.name} 
     <!-- ${user.name} will call session.getAttribute("user").getName() for you --> 
    </div> 
</html> 

更多信息:

没有提供使用scriptlets的示例,因为您不应该使用它们。上面的链接说明。


执行日志外出时不要忘记清除会话:

request.getSession().invalidate(); 
+0

+1非常感谢您的全面解释 – CodyBugstein 2014-09-04 16:47:01