如何在spring mvc 3中通过注释设置头文件不caching

如何设置标题没有caching在springmvc 3注释? 不是的

response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); 

没有这样的select。 你可以使用拦截器:

 <mvc:annotation-driven/> <mvc:interceptors> <bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor"> <property name="cacheSeconds" value="0"/> <property name="useExpiresHeader" value="true"/> <property name="useCacheControlHeader" value="true"/> <property name="useCacheControlNoStore" value="true"/> </bean> </mvc:interceptors> 

(从这里拿)

一方面这样做是不合逻辑的。 spring-mvc方法的注释主要是让容器决定调用哪个方法(通过请求头,请求url或方法来限制)。 控制响应不属于这个类别。

另一方面 – 是的,这将是方便的,因为当控制器进行unit testing时,它是不相关的testingHTTP标头的东西(或是否?)。 还有@ResponseBody@ResponseStatus ,它们指定了一些响应属性。

要覆盖某些控制器映射的设置,请使用WebContentInterceptor上的cacheMappings属性对象

 <bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor"> <property name="cacheSeconds" value="2100" /> <property name="useExpiresHeader" value="true" /> <property name="useCacheControlHeader" value="true" /> <property name="useCacheControlNoStore" value="true" /> <property name="cacheMappings"> <props> <prop key="/myUncachedController">0</prop> </props> </property> 

我知道这是旧的,但这可能会有所帮助。

如果你想在caching的时候添加更多的逻辑,当你不需要的时候你也可以写一个自定义的拦截器。

例如,如果您只想在浏览器是IE浏览器或仅从特定的url上禁用caching,则可以通过扩展HandlerInterceptor接口来实现。

通过这样做,你可以对发生的事情有很多的控制。 这不像一次设置所有内容的标题,或者只是在每个控制器中input对响应的更改,但这并不困难,而且在我看来,这是一个更好的长期解决scheme。 一般来说spring如何去做也是一件好事。

这是一个相当不错的教程:

http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/