我希望我对 Spring MVC 控制器的响应被视为浏览器中的静态内容。只需获取一次,然后从浏览器缓存中获取它以获取304 Not Modified
状态代码。我有简单的方法的普通 Spring MVC 控制器。simpleService.getVariables()
正在从数据库中获取大量内容。它返回字符串。
@RequestMapping(value = "/jsContent.htm")
public ModelAndView jsContent(@RequestParam("ver") String version,
HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = new ModelAndView("jsContent");
mav.addObject("variables", simpleService.getVariables());
return mav;
}
响应由 Apache Tiles 处理。是普通的firstPart
JavaScript 文件,secondPart
是String
添加到ModelAndView
对象中的。
<definition name="javascript" template="/WEB-INF/tiles/javascript.jsp" />
<definition name="jsContent" extends="javascript">
<put-attribute name="firstPart" expression="/js/content/static.js" />
<put-attribute name="secondPart" expression="${variables}" />
</definition>
为了expressions
在瓷砖中启用,我添加了这个tilesProperties
:
这是我的tiles/javascript.jsp
:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertAttribute name="firstPart" />
<tiles:insertAttribute name="secondPart" />
我只是通过304 Not Modified
将此 Spring 过滤器添加到web.xml
. 然而,内容仍然每次都在获取,并且通过Etag
标题比较,状态码是304
有任何变化的时候。
<filter>
<filter-name>etagFilter</filter-name>
<filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>etagFilter</filter-name>
<servlet-name>dispatcher</servlet-name>
</filter-mapping>
如何获取 Spring Controller 的缓存响应?我试图通过 HTTP Headers 来实现这一点,但它不起作用。