我希望我对 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 处理。是普通的firstPartJavaScript 文件,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 来实现这一点,但它不起作用。