浏览器显示过时的JSP页面,用户必须手动刷新

Browser shows stale JSP page, user has to refresh manually

本文关键字:刷新 用户 过时 显示 JSP 页面 浏览器      更新时间:2023-09-26

我正在用JSP做一个网站。有一个名为Agency的页面是公开可见的,并显示了一个机构的详细信息。但是,当"代理管理员"登录时,将呈现相同的代理页面,并添加/编辑链接以修改页面上的数据。

问题是:

  • 用户访问代理页面(此时未登录)

  • 该用户以代理管理员身份登录,并再次导航到代理页面

  • 代理页面不显示添加/编辑链接,直到用户手动刷新浏览器

到代理页面的链接是这样的:

<a href="agency.do?agencyId=<core:out value="${agency.agencyId}" />">
    <core:out value="${agency.name}" />
</a>

我一直在使用这个作为解决方案:

<a href="javascript:void(0)" onclick="javascript:window.location = 'home.do?agencyId=<core:out value="${agency.agencyId}" />&rnd=' + Math.random()">
    <core:out value="${agency.name}" />
</a>

我使用javascript将随机数附加到URL。但是用onclick代替href感觉不像是正确的做法。如果用户想在新选项卡中打开链接该怎么办?

我认为这将是一个相当普遍的问题。有更好的解决办法吗?

您的浏览器或代理必须缓存该页面。尝试将这些标头添加到缓存页面的响应中,而不应该是:

response.setDateHeader("Expires", 0);
response.setHeader("Cache-control", "no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");

关于JSTL的使用,我有两点要说:

  1. 核心库的前缀通常是c,而不是core
  2. URL应该使用<c:url>标签组成。这个标签负责

    • 获取绝对url(从/开始)并预先挂起应用程序的上下文根(/agency.do变成/myApp/agency.do)
    • 如果需要重写URL,将会话ID添加到URL中
    • 正确编码URL参数

例如:

<c:url var="agencyUrl" value="agency.do">
    <c:param name="agencyId" value="${agency.agencyId}" />
</c:url>
<a href="${fn:escapeXml(agencyUrl)}"><c:out value="${agency.name}" /></a>