2010-12-06 12 views
39

द्वारा वसंत MVC 3 में कोई कैश हेडर एनोटेशन द्वारा हैडर वसंत MVC 3 में कोई कैश स्थापित करने के लिए कैसे स्थापित करने के लिए?कैसे एनोटेशन

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

अच्छा सवाल है, हालांकि मुझे लगता है वहाँ एनोटेशन के साथ यह करने के लिए (अभी तक) – skaffman

+0

कारण है कि आप स्थापित करने प्रतिक्रिया हेडर सीधे का उपयोग नहीं चुन कोई रास्ता नहीं है:

यह इसके लिए एक बहुत अच्छी ट्यूटोरियल है लेकिन इंटरसेप्टर का उपयोग करके, जो मुझे लगता है कि प्रदर्शन अनुकूल नहीं है? – hakunami

उत्तर

46

ऐसा कोई विकल्प नहीं है। एक ओर

<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 से लिया गया)

यह इस तरह व्याख्या नहीं तार्किक है: आप एक इंटरसेप्टर का उपयोग कर सकते हैं। वसंत-एमवीसी विधियों पर टिप्पणियां प्राथमिक रूप से कंटेनर को यह तय करने देती हैं कि कौन सी विधि का आह्वान करना है (अनुरोध हेडर द्वारा इसे सीमित करना, यूआरएल या विधि का अनुरोध करना)। प्रतिक्रिया को नियंत्रित करना इस श्रेणी में नहीं आता है।

दूसरी ओर - हाँ, यह क्योंकि जब नियंत्रक इकाई परीक्षण HTTP हेडर सामान परीक्षण करने के लिए प्रासंगिक नहीं है कर रहे हैं इन पाना उपयोगी हो जाएगा, (या यह है?)। और @ResponseBody और @ResponseStatus हैं, जो कुछ प्रतिक्रिया गुण निर्दिष्ट करते हैं।

+2

और '@ ResponseStatus' :) – skaffman

+2

आह, हाँ। खैर, शायद मेरा तर्क पूरी तरह से सही नहीं है :) – Bozho

+1

बस टिप्पणी करने के लिए बस अभी भी वसंत webmvc के साथ काम करता है 4. इस तरह के एक उपयोगी, सरल समाधान। –

19

सेटिंग को ओवरराइड करने के लिए कुछ नियंत्रक मैपिंग 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> 

1

पर cacheMappings गुण वस्तु का उपयोग करने के लिए मुझे पता है यह पुराना है, लेकिन यह कुछ करने के लिए उपयोगी हो सकता है।

यदि आपने कैश करने के लिए एक बहुत अधिक तर्क जोड़ना चाहते थे और आप भी एक कस्टम इंटरसेप्टर लिख सकते हैं जब आप ऐसा नहीं करते।

उदाहरण के लिए आप जवाब में कैशिंग निष्क्रिय करने के लिए केवल जब ब्राउज़र आईई है या केवल विशिष्ट यूआरएल से आप HandlerInterceptor इंटरफ़ेस का विस्तार करके ऐसा कर सकते हैं और साथ ही चाहते थे।

ऐसा करके आप वास्तव में क्या होता है पर बहुत अधिक नियंत्रण प्राप्त कर सकते हैं। यह केवल एक ही समय में सब कुछ के लिए हेडर सेट करना या प्रत्येक नियंत्रक में प्रतिक्रिया में परिवर्तनों में टाइप करना जितना आसान नहीं है, लेकिन यह भी मुश्किल नहीं है और मेरी राय में एक बेहतर दीर्घकालिक समाधान है। आमतौर पर बसंत में कैसे करना है यह जानना भी एक अच्छी बात है। ,

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

संबंधित मुद्दे