在会话期间保持Java对象处于活动状态

时间:2014-09-04 16:26:51

标签: java jsp session servlets

在我的JSP应用程序中,我想跟踪已登录的用户。

当用户尝试登录时,我使用UserManager类中的数据库事务来验证该条目是否存在(我的目标不是创建一个非常安全的站点,其中大部分用于学习)。

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

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

麻烦的是,我不知道如何在整个会话期间保持这个User对象的存活。例如,如果他去其他页面,我仍然希望能够打电话

user.getPhoto()

user.getLastName()

每次都没有复杂的数据库查询。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分: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>

更多信息:

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


执行注销时不要忘记清除会话:

request.getSession().invalidate();