在JSP中添加Expires或Cache-Control标头
如何在JSP中添加Expires
或Cache-Control
标头? 我想在包含页面中为我的静态组件添加远期到期日期,例如图像,CSS和JavaScript文件。
要禁用JSP页面的浏览器缓存,请创建一个映射在*.jsp
的url-pattern
上的Filter
,并在doFilter()
方法中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.
这样,您就不需要在所有JSP页面上对其进行复制,并使用scriptlet将它们混乱。
要为CSS和JS等静态组件启用浏览器缓存,请将它们全部放在像/static
或/resources
这样的公共文件夹中,并创建一个映射到/static/*
或/resources/*
的url-pattern
的Filter
,并基本完成doFilter()
方法中的以下内容:
httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // 1 week in future.
也可以看看:
- 确保所有浏览器都不会缓存网页。
- Web应用程序性能提示和技巧。
<% response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); %>
<% response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 response.setHeader("Pragma", "no-cache"); //HTTP 1.0 response.setDateHeader("Expires", 0); //prevents caching at the proxy server %>
像Tomcat这样的Servlet容器带有一组预定义的filter。 请参阅例如Expires Filter 。 使用现有的可能比创建自己的类似filter更容易。