2010-05-20 14 views
40

जेटी के पास CacheControl parameter (निर्दिष्ट webdefault.xml) है जो ग्राहकों के कैशिंग व्यवहार को निर्धारित करता है (ग्राहकों को भेजे गए शीर्षकों को प्रभावित करके)।टोमकैट: कैश-कंट्रोल

क्या टोमकैट का एक समान विकल्प है? संक्षेप में, मैं टॉमकैट सर्वर और/या किसी विशिष्ट वेबैप द्वारा दिए गए सभी पृष्ठों के कैशिंग को बंद करना चाहता हूं?

अद्यतन

कृपया ध्यान दें कि मैं सर्वर साइड कैशिंग की बात नहीं कर रहा हूँ। मैं चाहता हूं कि सर्वर सभी क्लाइंट (ब्राउज़र) को अपने कैश का उपयोग न करें और हमेशा सर्वर से सामग्री लाने के लिए कहें। मैं इसे सभी संसाधनों के लिए करना चाहता हूं, जिसमें स्थिर संसाधन (.css, .js, आदि) शामिल हैं।

उत्तर

31

उपरोक्त पद के समान, सिवाय इसके कि कोड के साथ कुछ समस्याएं हैं। यह सब ब्राउज़र कैशिंग अक्षम हो जाएगी:

import javax.servlet.*; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.util.Date; 

public class CacheControlFilter implements Filter { 

    public void doFilter(ServletRequest request, ServletResponse response, 
         FilterChain chain) throws IOException, ServletException { 

     HttpServletResponse resp = (HttpServletResponse) response; 
     resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT"); 
     resp.setDateHeader("Last-Modified", new Date().getTime()); 
     resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"); 
     resp.setHeader("Pragma", "no-cache"); 

     chain.doFilter(request, response); 
    } 

} 

और फिर Stu Thompson's answer में वर्णित के रूप web.xml में मैप करें।

+0

इससे मेरे लिए समस्या हल हो गई। सफारी 6 (आईओएस) डाक अनुरोधों को कैश करता है और यह मुझे मार रहा था! धन्यवाद! – cbmeeks

0

इस हो सकता है आप के लिए क्या देख रहे:

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Context%20Parameters

cachingAllowed : If the value of this flag is true, the cache for static 

resources will be used. If not specified, the default value of the flag is true. 

इसके अलावा/कार्य/कैटालिना/स्थानीय होस्ट इस ध्वज को बदलने के बाद में आवेदन कैश फ़ोल्डर को हटा दें।

+0

धन्यवाद, लेकिन इससे मेरी मदद नहीं होती है। जिस पैरामीटर का आप उल्लेख कर रहे हैं वह सर्वर-साइड कैशिंग को प्रभावित करता है। मैं चाहता हूं कि सर्वर सभी क्लाइंट (ब्राउज़र) को अपने कैश का उपयोग न करें और हमेशा सर्वर से सामग्री लाने के लिए कहें। और, मैं इसे एक ही समय में सभी संसाधनों के लिए करना चाहता हूं। –

+0

आह ठीक..फैएक फ़िल्टर को कार्यान्वित करना इसे करने का एक तरीका है। – Inv3r53

+0

ऐसा लगता है कि टोमकैट में अंतर्निहित कैश नियंत्रण नहीं है। – Inv3r53

13

मुझे विश्वास नहीं है कि ऐसा करने के लिए एक कॉन्फ़िगरेशन है। लेकिन प्रति वेबैप-आधार पर कैश-कंट्रोल हेडर सेट करने के लिए फ़िल्टर लिखने का प्रयास बहुत अधिक नहीं होना चाहिए। उदा .:

public class test implements Filter { 

     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
       throws IOException, ServletException { 

      chain.doFilter(request, response); 
      ((StatusResponse)response).setHeader("Cache-Control", 
        "max-age=0, private, must-revalidate"); 
     } 

     public void destroy() {} 

     public void init(FilterConfig arg0) throws ServletException {} 
} 

और आप अपने वेब ऐप्लिकेशन की web.xml फाइल में इस अंश रखना चाहते हैं।

<filter> 
    <filter-name>SetCacheControl</filter-name> 
    <filter-class>ch.dietpizza.cacheControlFilter</filter-class> 
</filter>      
<filter-mapping> 
    <filter-name>SetCacheControl</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

क्या यह केवल servlets, या स्थिर फ़ाइलों के लिए लागू होगा, उदाहरण के लिए सीएसएस/छवियों, जो टोमकैट द्वारा परोसा जाता है? –

+0

@ClickUpvote वेबपैप में कुछ भी - servlets और स्थिर फ़ाइलें –

0

केवल परम मुझे पता है की disableProxyCaching<Valve> तत्वों पर है। here देखें।

1

वास्तव में टोमकैट कॉन्फ़िगरेशन में कई तत्व हैं जो सीधे इसे प्रभावित करते हैं। उदाहरण के लिए http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html पर दस्तावेज़ देखें।

Atlassian निम्नलिखित दो बयान सिफारिश की गई है ब्राउज़र-साइड संचय सक्षम करने के लिए इतना है कि माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर सही ढंग से डाउनलोड करने और संलग्न दस्तावेजों को देखने के लिए सक्षम हो जाएगा:

<Valve className="org.apache.catalina.authenticator.FormAuthenticator" securePagesWithPragma="false" /> 
<Valve className="org.apache.catalina.authenticator.NonLoginAuthenticator" securePagesWithPragma="false" /> 
37

बिलाव 7 के बाद से वहाँ है प्रदान की एक कंटेनर फिल्टर समाप्त हो रहा है इससे मदद मिल सकती है। देखें:

ExpiresFilter Apache mod_expires की एक जावा सर्वलेट एपीआई बंदरगाह है।यह फ़िल्टर Expires HTTP शीर्षलेख की सेटिंग को नियंत्रित करता है और max-age सर्वर प्रतिक्रियाओं में Cache-Control HTTP शीर्षलेख का निर्देश नियंत्रित करता है। समाप्ति तिथि उस समय से संबंधित हो सकती है जब स्रोत फ़ाइल को अंतिम बार संशोधित किया गया था, या ग्राहक पहुंच के समय तक।

<filter> 
    <filter-name>ExpiresFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class> 
    <init-param> 
     <param-name>ExpiresByType image</param-name> 
     <param-value>access plus 10 days</param-value> 
    </init-param> 
    <init-param> 
     <param-name>ExpiresByType text/css</param-name> 
     <param-value>access plus 10 hours</param-value> 
    </init-param> 
    <init-param> 
     <param-name>ExpiresByType application/javascript</param-name> 
     <param-value>access plus 10 minutes</param-value> 
    </init-param> 
    <!-- Let everything else expire immediately --> 
    <init-param> 
     <param-name>ExpiresDefault</param-name> 
     <param-value>access plus 0 seconds</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>ExpiresFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
+2

समाप्त हो सकता है फ़िल्टर का उपयोग कैश-कंट्रोल को "नो-कैश" और "नो-स्टोर" पर एक ही समय में सेट करने के लिए किया जा सकता है? यदि हां, तो आप उपरोक्त कोड में इसे कैसे प्राप्त करते हैं? यह बहुत मददगार होगा। –

+3

मुझे ऐसा नहीं लगता है। दस्तावेज़ीकरण से: 'अधिकतम आयु के अलावा कैश-कंट्रोल निर्देशों को संशोधित करने के लिए (आरएफसी 2616 अनुभाग 14.9 देखें), आप अन्य सर्वलेट फिल्टर या अपाचे एचटीपीडी मॉड_हेडर मॉड्यूल का उपयोग कर सकते हैं। – Jack

+0

मैंने एक्सपियरफिल्टर को टॉमकैट 6 पर पोर्ट किया। Https://github.com/bnegrao/ExpiresFilter –

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