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