【问题标题】:Keep a Java object alive for the duration of a session在会话期间保持 Java 对象处于活动状态
【发布时间】:2014-09-04 16:26:50
【问题描述】:

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

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

UserManager 类根据检索到的用户信息(即他们的姓名、年龄、照片等)构造一个 User 实例对象。

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

问题是,我不知道如何在与用户的整个会话期间保持这个User 对象处于活动状态。比如他去别的页面,我还是希望能够调用

user.getPhoto()

user.getLastName()

无需每次都进行复杂的数据库查询。

有什么办法吗?

【问题讨论】:

  • 您是在使用任何框架还是仅使用 servlet?
  • 无框架。只是 Servlet

标签: java jsp session servlets


【解决方案1】:

将对象存储在会话中。在您的 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();

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2018-11-26
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2014-06-12
    相关资源
    最近更新 更多