2011-06-20 12 views
8

はどのように私はレスポンスヘッダを追加することができ、すべての応答にヘッダを追加する - ようになりますX-時間を言うGrailsの -

X-時間:112

値はミリ秒単位の時間だろう与えられました応答が処理にかかったのか?これをGrailsアプリケーションに追加する本当に簡単な方法はありますか?私は永久に残したいものではありませんが、私のアプリを開発している間に持っているといいです。

+1

これの便利なアプリケーションの1つは、['X-UA-Compatible'' http-equiv'](https://groups.google.com/forum/?fromgroups=#!topic/html5boilerplate/bRtrFSrKjtI)メタHTMLレンダラーまたはクロムフレームのバージョンを設定するために使用されるタグです。特にHTML5のBoilerplateプロジェクトで使用されます。 – 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を使用する理由は、あなたがアクション「の後に」あなた「の前に」アウト分離している必要はありませんし、そのことができそうですフィルタチェーン全体で開始時刻を保持する&サーブレットの実行。

補足事項:私に

、レスポンスヘッダーとしてサーバー実行経過時間を返すようにしたいために奇妙に思えます。おそらくあなたはそれを行うためのまともな理由がありますが、私は)クライアントの観測によると、総ラウンドトリップ時間をより重視するか、B)サーバーで実行時間を記録する独自のシステム管理/メトリクスの目的。

+0

私はそれがうまくいくと思います...どうすればタイマーを始めることができますか?そしてそれを終わらせる?私は前のフィルターでタイマーを始めることができましたが、どのように後のフィルターにその値を渡すのですか?これまでの良いアイデア+1 – BuddyJoe

+2

私はあなたの質問を、あなたがどのようにレスポンスヘッダを追加するかを尋ねるものとして解釈したと思います。実際にタイミングを取るための簡単な答えを作りましょう。 –

+0

素晴らしいですね。ありがとう。 +1と答え。私はちょうどクライアントがパフォーマンスの問題を報告できるシステムを持っています。また、クライアントからの完全な要求/応答時間のタイミングも含まれます。しかし、実際の「作業時間」/サーバーのパフォーマンスも含まれます。 – BuddyJoe