2011-06-20 39 views
8

Làm thế nào tôi có thể thêm một tiêu đề phản ứng - nói X-Time rằng sẽ giống nhưGrails - thêm tiêu đề cho tất cả các phản ứng

X-Thời gian: 112

Trường hợp giá trị nhất định sẽ là thời gian trong mili giây rằng phản ứng đã xử lý? Có một cách thực sự đơn giản để thêm này vào một ứng dụng Grails? Không phải cái gì tôi muốn để lại trên vĩnh viễn nhưng sẽ là tốt đẹp để có trong khi phát triển ứng dụng của tôi.

+1

Một ứng dụng hữu ích của việc này là xử lý ['X-UA-Tương thích'' http-equiv'] (https://groups.google.com/forum/?fromgroups=#!topic/html5boilerplate/bRtrFSrKjtI) meta các thẻ được sử dụng để đặt phiên bản trình kết xuất đồ hoạ hoặc chromeframe của IE, đặc biệt là bởi dự án HTML5 Boilerplate. – cdeszaq

Trả lời

31

Để chỉ cần thêm tiêu đề vào phản hồi, bạn có thể sử dụng Bộ lọc after.

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

Edit:

Để thực sự tính toán thời điểm đó, nó muốn có lẽ là thích hợp hơn để sử dụng một javax.servlet.Filter thay vì một bộ lọc Grails.

src/groovy/com/example/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/templates/chiến tranh/web.xml (grails chạy cài đặt-templates nếu src/templates isn' t đã có trong cây nguồn của bạn)

<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> 

lý do cho việc sử dụng javax.servlet.Filter là, do đó bạn không cần phải tách ra của bạn "trước" và "sau khi" hành động, và có thể therefor e giữ thời gian bắt đầu trong toàn bộ chuỗi lọc & thực hiện servlet.

lưu ý bổ sung:

Đối với tôi, nó có vẻ xa lạ đối với muốn quay trở lại máy chủ trôi qua thời gian thực hiện như một phản ứng tiêu đề. Có lẽ bạn có lý do chính đáng để làm điều đó, nhưng trong hầu hết các trường hợp tôi muốn A) hoặc quan tâm nhiều hơn đến tổng thời gian khứ hồi (như được quan sát bởi khách hàng), hoặc B) ghi nhật ký thời gian thực hiện trên máy chủ của tôi mục đích quản trị/số liệu hệ thống của riêng mình.

+0

Tôi đoán rằng có thể làm việc ... Làm thế nào tôi có thể bắt đầu hẹn giờ? và kết thúc nó? Tôi có thể bắt đầu một bộ đếm thời gian trong một bộ lọc trước nhưng làm thế nào tôi sẽ nhận được giá trị đó cho bộ lọc sau? Ý tưởng hay cho đến nay +1 – BuddyJoe

+2

Tôi đoán tôi chỉ giải thích câu hỏi của bạn khi hỏi bạn sẽ thêm tiêu đề phản hồi như thế nào; hãy để tôi xây dựng một câu trả lời nhanh để thực sự định thời gian. –

+0

Trông tuyệt vời. Cảm ơn. 1 và trả lời. Tôi chỉ có một hệ thống mà khách hàng có thể báo cáo các vấn đề về hiệu năng. Và nó bao gồm thời gian yêu cầu hoàn thành/thời gian phản hồi từ khách hàng. Nhưng cũng bao gồm "thời gian làm việc" thực tế/hiệu suất của máy chủ. – BuddyJoe

Các vấn đề liên quan