如何在spring mvc 3中通過註釋設置頭部沒有緩存?不是如何在spring mvc 3中通過註釋設置頭部無緩存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
如何在spring mvc 3中通過註釋設置頭部沒有緩存?不是如何在spring mvc 3中通過註釋設置頭部無緩存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
沒有這樣的選擇。您可以使用攔截器:
<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>
(從here拍攝)
一方面它是合乎邏輯不是有這樣的註解。 spring-mvc方法的註釋主要是讓容器決定調用哪個方法(通過請求頭,請求url或方法限制它)。控制響應不屬於這一類。
另一方面 - 是的,這會很方便,因爲當控制器經過單元測試時,它與測試http頭文件(或是否?)無關。有@ResponseBody
和@ResponseStatus
,它們確實指定了一些響應屬性。
要針對特定的控制器的映射,使用屬性對象的cacheMappings上WebContentInterceptor
<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>
覆蓋設置我知道這是舊的,但,這可能有助於一些。
如果您想在緩存時添加更多的邏輯,當您不需要時,還可以編寫自定義攔截器。
例如,如果您希望僅在瀏覽器爲IE或僅來自特定網址的情況下禁用緩存,則還可以通過擴展接口來禁用緩存。
通過這樣做,您可以對發生的事情有很多控制權。這並不像一次爲所有內容設置標題,或者只是在每個控制器中輸入對響應的更改,但這並不困難,而且在我看來,這是一個更好的長期解決方案。一般來說,知道如何在春季做這也是一件好事。
這是它的一個相當不錯的教程:
http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/
好問題,但我懷疑有沒有辦法用註解做到這一點(但) – skaffman 2010-12-06 09:03:48
爲什麼你選擇不直接使用設置響應頭但使用攔截器,我認爲這不是表現友好? – hakunami 2015-09-15 06:13:35