我想我的Spring MVC Controller响应被视为浏览器中的静态内容。只需获取一次,然后从浏览器缓存中获取304 Not Modified
状态码。 我用普通的方法有普通的Spring MVC控制器。 simpleService.getVariables()
正在从数据库中获取大量内容。它返回String。Spring MVC Controller响应作为静态内容缓存在浏览器中
@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
状态码到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控制器的缓存响应?我试图通过HTTP头来实现这一点,但它不起作用。