【问题标题】:Page caching problem页面缓存问题
【发布时间】:2011-05-16 08:42:35
【问题描述】:

我使用 JSP (Spring MVC) 向远程用户显示信息。我在缓存页面时遇到了一些问题。它看起来像这样:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title>My Title</title>
   </head>
   <body>
       <jsp:include page="menu.jsp" flush="true" />
       <form method="post">
           Write here
           <input type="text" name="inputTxt" value="${txt}" />
           <input type="submit" value="OK" />
       </form>

       <table border="1">
           ...
       </table>                       
    </body>
</html>

页面应该显示一个项目表。当用户按下 OK 按钮时,服务器将信息添加到数据库并在表中添加一行。一切正常。但是表格显示的信息取决于登录的用户。因此,当我第一次登录时,我的应用程序运行良好(向我显示数据,对应于当前用户)。但是当我从当前用户注销并从新用户登录时,此页面仍然显示第一个用户的数据。如果我按 F5,表格会更新它的数据并显示与当前用户相对应的正确信息。我认为缓存有问题。 如何避免这个问题?有什么想法吗?

【问题讨论】:

标签: spring jsp spring-mvc jakarta-ee webpage


【解决方案1】:

该页面确实可能被浏览器缓存。您可以在 Firefox 中使用Firebug 验证这一点。通常,您希望禁用动态内容的客户端缓存。您可以通过创建一个Filter 来实现这一点,该Filter 映射到*.jspurl-pattern,并且在doFilter() 方法中基本上完成以下工作。

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);

这些响应标头将指示客户端(网络浏览器)不缓存响应。测试前别忘了清理浏览器缓存。

在 Spring MVC 中,你可以像这样创建一个拦截器:

public class DisableBrowserCachingInterceptor extends HandlerInterceptorAdapter {

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-08
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2014-05-26
    • 2011-08-25
    相关资源
    最近更新 更多