【问题标题】:Refresh JSP after Servlet Changes in DatabaseServlet 更改数据库后刷新 JSP
【发布时间】:2013-01-08 19:07:33
【问题描述】:

我的 Java EE 项目中有一个关于刷新 jsp 页面的问题。 每次 Servlet 在我的项目中修改数据库时,这些更改都不会出现在 jsp 页面中。它们仅在用户注销后出现。

有没有办法在数据库 MySQL 发生更改后刷新会话? (我用的是服务器JBoss)。

【问题讨论】:

  • 如果我是你,我会检查从数据库中读取的值是否以某种方式被缓存。如果是这样,您需要找到某种方法在需要时使缓存无效。或者您可以取消缓存并在每次请求页面时重新读取数据库值。
  • 值是否存储在会话中?你能提供一段代码来了解你在做什么吗?
  • 检查所有级别的缓存。
  • 如果您正在更新也存储在会话中的数据库,那么您需要修改您的代码以实际执行正确的操作。缓存可以在多个级别影响您的应用,通常是页面和数据库层。
  • ...必须更新会话中的对象,如果它与你用来更新数据库的对象是分开的实体。 Web 浏览器缓存控件易于搜索。您的 DB 层的缓存应该正确处理更新,但没有提及任何缓存、ORM 等,因此不可能提供有关这些的有用输入。

标签: java jsp jakarta-ee servlets refresh


【解决方案1】:

不要将从数据库检索到的数据存储在会话范围内。将其存储在请求范围内。这样,最终用户将获得每个 HTTP 请求的最新数据。

如果您担心性能问题,请寻找另一种解决方案,而不是将 HTTP 会话用作某种低效且难以管理的缓存。例如,为了在 1ms 而不是 200~500ms 内与 DB 建立连接,一个 DB 连接池,或者一个基于 Java 的 2 级 DB 缓存,例如 Terracotta 和 Ehcache,以便拥有一个健全且可管理的共享缓存,而不是低效地复制与您现在所做的不同 HTTP 会话中的所有用户的数据完全相同。

如果您使用 JPA 而不是“普通的旧”JDBC,这一切都会变得更容易。

【讨论】:

    【解决方案2】:

    我是这样解决的: 当我为我的个人资料设置新参数时,我会在创建getRequestDispatcher(myPage.jsp); 之前创建一个新的request.getSession.setAttribute(user);。非常感谢!!

    【讨论】:

      【解决方案3】:
      • 我已删除需要更新的数据库条目
      • 我复制了数据库条目的所有字段
      • 我添加了应该更新的字段的数据点
      • 我添加了新的数据库条目

      【讨论】:

        猜你喜欢
        • 2019-05-13
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 2017-02-12
        • 2013-02-23
        • 2016-07-25
        相关资源
        最近更新 更多