2011-06-20 10 views
8

मैं एक प्रतिक्रिया हेडर कैसे जोड़ सकते हैं करने के लिए शीर्ष लेख - कहते हैं कि एक्स-समय है कि कुछ ऐसा दिखाई देगाGrails - हर प्रतिक्रिया

एक्स-समय: 112

कहाँ मान मिलीसेकंड में समय होगा दिया कि प्रतिक्रिया प्रक्रिया में ले लिया? क्या Grails ऐप में इसे जोड़ने का कोई आसान तरीका है? ऐसा कुछ नहीं है जिसे मैं स्थायी रूप से छोड़ना चाहता हूं लेकिन मेरे ऐप को विकसित करते समय अच्छा होगा।

+1

इसका एक उपयोगी अनुप्रयोग ['एक्स-यूए-संगत '' http-equiv'] से निपट रहा है (https://groups.google.com/forum/?fromgroups=#!topic/html5boilerplate/bRtrFSrKjtI) मेटा टैग आईई रेंडरर या क्रोमफ्रेम के संस्करण को सेट करने के लिए उपयोग किया जाता है, खासकर एचटीएमएल 5 बॉयलरप्लेट प्रोजेक्ट द्वारा। – cdeszaq

उत्तर

31

प्रतिक्रिया में केवल एक शीर्षलेख जोड़ने के लिए, आप after फ़िल्टर का उपयोग कर सकते हैं।

// grails-app/conf/MyFilters.groovy 
class MyFilters { 
    def filters = { 
     addHeader(uri: '/*') { 
      after = { 
       response.setHeader('X-Time', value) 
      } 
     } 
    } 
} 

संपादित करें:

वास्तव में समय की गणना करने के लिए, यह शायद एक Grails फिल्टर के बजाय एक javax.servlet.Filter उपयोग करने के लिए उचित होगा।

src/ग्रूवी/com/उदाहरण/MyProject/MyFilter.groovy

package com.example.myproject 

import javax.servlet.* 

class MyFilter implements Filter { 

    void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { 

     def start = System.currentTimeMillis() 
     chain.doFilter(request, response) 

     def elapsed = System.currentTimeMillis() - start 
     response.setHeader('X-Time', elapsed as String) 
    } 

    void init(FilterConfig config) { } 
    void destroy() { } 
} 

src/टेम्पलेट्स/युद्ध/web.xml (चलाने grails स्थापित-टेम्पलेट्स अगर src/टेम्पलेट्स 'isn टी पहले से ही अपने स्रोत पेड़ में)

<filter> 
    <filter-name>timer</filter-name> 
    <filter-class>com.example.myproject.MyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>timer</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

javax.servlet.Filter उपयोग करने का कारण तो है आप अपने "से पहले" को अलग और कार्यों "के बाद" की जरूरत नहीं है, और वजह सकते हैं ई पूरे फ़िल्टर श्रृंखला & सर्वलेट निष्पादन के दौरान प्रारंभ समय पर पकड़ लें।

पूरक ध्यान दें:

मेरे लिए

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

+0

मुझे लगता है कि काम कर सकता है ... मैं टाइमर कैसे शुरू कर सकता हूं? और इसे खत्म करो? मैं पहले फ़िल्टर में टाइमर शुरू कर सकता था लेकिन फ़िल्टर के बाद मैं उस मूल्य को कैसे प्राप्त करूं? अच्छा विचार अब तक +1 – BuddyJoe

+2

मुझे लगता है कि मैंने केवल आपके प्रश्न का अर्थ यह पूछकर किया है कि आप प्रतिक्रिया शीर्षलेख कैसे जोड़ेंगे; मुझे वास्तव में समय के लिए एक त्वरित जवाब बनाने दें। –

+0

भयानक लग रहा है। धन्यवाद। +1 और उत्तर। मेरे पास सिर्फ एक प्रणाली है जहां एक ग्राहक प्रदर्शन समस्याओं की रिपोर्ट कर सकता है। और इसमें ग्राहक से पूर्ण अनुरोध/प्रतिक्रिया समय शामिल है। लेकिन सर्वर के वास्तविक "कार्य समय"/प्रदर्शन भी शामिल है। – BuddyJoe