页面缓存问题

时间:2010-11-26 20:41:56

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

我使用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,表格会更新它的数据并显示正确的信息,这些信息对应于当前用户。我认为缓存问题。 如何避免这个问题?有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

doFilter()

这些响应标头将指示客户端(webbrowser)不缓存响应。在测试之前不要忘记清理浏览器缓存。

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

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);