设计问题 - Web 应用程序会话中的持久数据

2023-12-29

我正在使用 servlet 和 jsp 开发一个 Web 应用程序。我有一个关于存储登录会话中多个 servlet 需要使用的数据的问题。例如,当用户登录时,我从数据库获取用户对象,并希望将其存储在某个地方,并让后续的 servlet 和 jsps 使用它,而不必再次查询数据库。我知道我必须将对象存储在全局数组中,但无法找出执行此操作的最佳方法。

我正在考虑在 web 应用程序加载时创建一个静态哈希图或其他一些数据结构,我可以使用它来存储用户对象,并将 sessionID 作为哈希图的键。

有没有更好的办法?任何帮助表示赞赏。

谢谢, - 瓦斯


您不需要自己管理会话。 servletcontainer 会以透明的方式为你完成这件事HttpSession http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html。你通常使用HttpSession#setAttribute() http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html#setAttribute%28java.lang.String,%20java.lang.Object%29在会话范围内存储对象并HttpSession#getAttribute() http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html#getAttribute%28java.lang.String%29从会话范围中获取对象。您可以使用HttpServletRequest#getSession() http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28%29获取对HttpSession.

例如。在登录 servlet 中:

User user = userDAO.find(username, password);
if (user != null) {
    request.getSession().setAttribute("user", user);
} else {
    // Show error?
}

您可以稍后在同一会话中的任何 servlet 或过滤器中取回它

User user = (User) request.getSession().getAttribute("user");
if (user != null) {
    // User is logged in.
} else {
    // User is not logged in!
}

您甚至可以在 JSP 中通过 EL 访问它:

<p>Welcome, ${user.username}!

(假设有一个JavabeangetUsername() method)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计问题 - Web 应用程序会话中的持久数据 的相关文章

  • 在java中将RFC3339 DateTime转换为Date [重复]

    这个问题在这里已经有答案了 如何转换RFC 3339 https www rfc editor org rfc rfc3339java 中的 com google api client util DateTime 到 DateTime 例如
  • 在 Java 8 中将对象追加到列表并返回结果?

    有没有一种方法可以将对象附加到列表并以功能性非命令方式在一行中返回结果 如果原始列表也不应该被改变 你会怎么做 Java 8 是允许的 我已经知道如何将两个列表连接到一行中 Source https stackoverflow com a
  • 为什么byteArray的长度是22而不是20?

    我们尝试从字符串转换为Byte 使用以下 Java 代码 String source 0123456789 byte byteArray source getBytes UTF 16 我们得到一个长度为 22 字节的字节数组 我们不确定这个
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • IntelliJ Ultimate 在 Play 2.3 (Java) 项目测试中找不到路由

    虽然我的测试运行得很好 但 IntelliJ 抱怨它找不到路由对象 并且代码自动完成无法工作 我已经查看了所有文档 这应该可以工作 这是 IntelliJ 的报告内容 关于我的项目配置可能有什么问题有什么想法吗 这很可能与以下事实有关 ro
  • 术语“引用”的起源,如“通过引用传递”

    Java C 语言律师喜欢说他们的语言按值传递引用 这意味着 引用 是调用函数时复制的对象指针 同时 在 C 中 以及 Perl 和 PHP 中更动态的形式 引用是其他名称 或动态情况下的运行时值 的别名 我对这里的词源感兴趣 参考 一词的
  • 使用 google-api-java-client 的 2 足 OAuth

    有谁知道如何将 2 legged OAuth 与 google api java client 一起使用 我正在尝试访问 Google Apps 配置 API 以获取特定域的用户列表 以下不起作用 HttpTransport transpo
  • JFreeChart - 创建移动图表时出现问题

    我在我的 java 应用程序中使用 JFreeChart Problem 我想绘制一个XY面积图 whose 域轴 x 轴 当我们开始绘制数据时应该自动水平滚动 我在中看到了同样的事情时间序列图表但我不想要任何时间系列图表 我只想要滚动的
  • 如何使 ScheduledExecutorService 在计划任务取消时自动终止

    我正在使用一个ScheduledExecutorService如果网络连接已打开超过几个小时 则关闭该连接 然而 在大多数情况下 网络连接在超时之前就关闭了 所以我取消了ScheduledFuture 在这种情况下 我还希望执行程序服务终止
  • 将 RequestBody json 转换为对象 - Spring Boot

    我是 java 开发的初学者 但之前有 PHP 和 Python 等编程语言的经验 对于如何进行 Spring Boot 的开发几乎没有什么困惑 我正在开发一个rest API 它有以下请求 key value key1 value1 pl
  • 整数与 int 比较

    我是新来的java 我现在正在学习非原始整数类型java 我知道以下比较无效并引发编译错误 String str c Char chr c if str chr return true 上面的代码片段给了我 Test java lineNu
  • a4j:commandLink 重新渲染后停止工作

    我创建了这个测试用例来隔离我的问题 一旦轮询执行 ajax 更新 a4j commandLink 操作就不会执行 如果我们在轮询重新渲染之前关闭 modalPanel 则会执行它 有什么建议吗 提前致谢 测试 xhtml
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • 属性文件中的字符串主机名:Java

    这听起来可能是一个非常简单的问题 但我无法找到解决方法 我有一个 config properties 文件 其中包含两个键值 IP 地址和端口号 我读取此配置文件以提取字符串格式的键值 但是 当我尝试使用这些值时 我无法连接到从配置文件中检
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • java.lang.ClassCastException: [B 无法转换为 java.lang.String

    我编写了一个带有字段 LoginId 和密码的实体类 我使用 AES ENCRYPT 加密密码并将其存储在数据库中 我只想检索已解密的密码 所以 我使用 AES DECRYPT 使用本机查询是在 OPen JPA 2 0 中 我写的查询是
  • 如何在不同的班级中启动和停止计时器?

    我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间 这两个时间点都位于不同的类中 我将如何启动和停止这些不同类别的计时器 我没有看到使用 MeterRegistry 中的 命名 计时器的方法 我该怎么办呢 您可以使用 AOP 如下
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • 在没有 ODBC 的情况下从 Java 操作 Access 数据库

    我想从我的 Java 项目操作 Microsoft Access 数据库 accdb 或 mdb 文件 我不想使用 Microsoft 的 JDBC ODBC Bridge 和 Access ODBC 驱动程序 因为 JDBC ODBC 桥

随机推荐

  • PhpStorm MySQL Connector/J 更新到 5.1.40 后停止工作

    在 PhpStorm 建议更新 MySQL 驱动程序后 我与 MySQL 数据库的现有连接和工作连接已停止工作 我看到这个问题在我的 Ubuntu 和另一台 Mac 上重现 我收到的错误是 08S01 通信链路故障 我使用 SSH 隧道来访
  • Twitter API 问题:使用 GET 的 OAuth 请求令牌有效,POST 失败

    我正在使用 Twitter API 进行 OAuth 我已经使用 GET 使请求令牌操作正常工作 没有任何问题 但是 当我使用 POST 执行完全相同的操作时 它会给出错误 无法验证 oauth 签名 以下是我正在使用的各种卷曲选项 cur
  • 为什么在文件未完成加载时调度 URLStream 完成事件?

    我正在编写一个 AIR kiosk 应用程序 每天晚上都会连接到 WordPress 服务器 获取包含所有内容路径的 JSON 文件 然后下载该内容并将其保存到 kiosk 硬盘驱动器 有数百个文件 jpg png f4v xml 其中大多
  • 头文件中定义的函数的重复符号

    假设我有一个头文件file ops hpp看起来像这样 pragma once bool systemIsLittleEndian uint16 t x 0x0011 uint8 t half x uint8 t x if half x 0
  • 如何在序列图中表示循环中进行的调用?

    我正在创建一个序列图 其中一个类正在被另一个类观察 被观察的类在观察者中每 5 秒循环调用一次更新 我需要在序列图中显示这一点 有没有办法让它无限期地不按顺序循环 或者它在序列图的上下文中没有意义吗 我不应该包括它吗 或者我应该将其包含在不
  • 针对另一个域远程使用 Get-DnsServerResourceRecord

    我正在尝试运行以下命令 secpasswd Test secpasswd ConvertTo SecureString secpasswd AsPlainText Force mycreds New Object System Manage
  • Pygame显示模块初始化和退出

    有一个pygame display窗户打开 我打电话pygame display quit 为了摧毁窗户 因为我需要再次打开窗口 所以我调用pygame display init and pygame display set mode 但是
  • 如何从报表设计器调用 Acumatica 函数?

    我有一个用 Acumatica 编写的通用函数 我们在各种 Acumatica 屏幕上使用它 我们希望在报表设计器中使用此函数 以便我们可以打印该值 示例 CheckBday 如果我们传递客户代码 它应该检查此客户生日字段 如果是今天 则返
  • 非升压asio检查错误c ++

    有没有办法使用 tcp 检查非 boost asio 程序中的错误 有没有办法随机向连接添加错误 我用 C 创建了一个简单的 Echo 服务器 现在我必须为其生成随机错误 但问题是我不知道如何生成 或者 如果这有更多帮助 我需要检查二维奇偶
  • Chrome 自动播放政策中的自动播放背景视频

    因此 在最新的 chrome 中 显然自动播放策略已更改 因此这反过来又破坏了每个具有应自动播放视频背景的网站 我想知道是否有人有任何聪明的解决办法可以 解决 这个问题 我相信按钮或 进入页面 解决方案将是一种糟糕的解决方法 特别是对于背景
  • 如何获取函数内部创建的变量?

    我正在 node js 中执行 javascript 文件 并且需要访问在该文件中创建的所有变量 由于这些 javascript 文件可以根据开发人员上下文保存任何内容 因此我需要以编程方式访问变量 我的问题是 如何获取函数内创建的变量 像
  • 创建登录屏幕

    制作密码 登录屏幕的最佳方法是什么 我在某处读到最好使用弹出控件 如果是这样 我到底需要在 App xaml 中的哪里创建它 在为 Windows Phone 7 应用程序实现登录屏幕时 您需要考虑许多事项 这是一个示例 http baba
  • 通过 HTTP 访问 FTP?

    我们有一个外部安全 FTP 服务器 我们希望通过 HTTPS 访问该服务器 我们的基础设施不支持 FTP 我知道这是可能的 但我不知道怎么做 我正在寻找这样的东西 ftp ftp mozilla org pub mozilla org zz
  • 如何在浏览器控制台中查看 CORS 飞行前 OPTIONS 请求?

    我正在寻找一种在发出 CORS 请求时查看 CORS 飞行前选项请求的方法 我想查看服务器的响应标头以帮助我调试遇到的 CORS 问题 但我无法在 Chrome 或 Firefox 的 网络 选项卡或控制台中找到执行此操作的方法 我还安装了
  • Azure AD:如何获取令牌中的组信息?

    我们在 MEAN 堆栈中开发了应用程序 我们正在使用阿达尔角 https github com AzureAD azure activedirectory library for js用于天蓝色广告身份验证的库 根据文档和样本 https
  • MarginLayoutParams.setMargins() 不起作用?

    事情是这样的 我想以编程方式添加一些图像 图像应该有一个topMargin of 5dip除了第一张图片之外 LinearLayout with a vertical orientation方式 代码段下方 LinearLayout bod
  • 使用各种语言在 Hadoop 中运行作业的优缺点是什么?

    到目前为止 我一直使用 Pig 或 Java 进行 MapReduce 专门针对 Hadoop 集群运行作业 我最近尝试通过 Hadoop 流使用 Python Map Reduce 这也很酷 所有这些对我来说都有意义 但我对何时想要使用一
  • 如何将 numpy 对象数组转换为 str/unicode 数组?

    Update 在最新版本的 numpy 例如 v1 8 1 中 这不再是问题 这里提到的所有方法现在都可以按预期工作 原问题 使用对象数据类型来存储字符串数组有时很方便 特别是当需要修改大型数组的内容而不事先知道字符串的最大长度时 例如 g
  • JQuery live 或与 .change() 类似的东西?

    我想做这个 http docs jquery com Events live typefn http docs jquery com Events live typefn 只有 live 不支持更改事件 有解决方法吗 需要将函数绑定到某些动
  • 设计问题 - Web 应用程序会话中的持久数据

    我正在使用 servlet 和 jsp 开发一个 Web 应用程序 我有一个关于存储登录会话中多个 servlet 需要使用的数据的问题 例如 当用户登录时 我从数据库获取用户对象 并希望将其存储在某个地方 并让后续的 servlet 和