我怎样才能添加一个响应头 - 比如X-Time看起来像
X-Time:112
给定的值是响应处理的时间(以毫秒为单位)?有没有一种非常简单的方法将其添加到Grails应用程序?不是我想永久留下的东西,但在开发我的应用程序时会很高兴。
答案 0 :(得分:32)
要简单地在回复中添加标题,您可以使用after
过滤器。
// grails-app/conf/MyFilters.groovy
class MyFilters {
def filters = {
addHeader(uri: '/*') {
after = {
response.setHeader('X-Time', value)
}
}
}
}
修改强>
要实际计算时间,使用javax.servlet.Filter
代替Grails过滤器可能更合适。
<强>的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中强> (如果源树中不存在src / templates,则运行grails install-templates)
<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
的原因是您不必将“之前”和“之后”操作分开,因此可以保留整个过滤器链中的开始时间&amp; servlet执行。
补充说明:
对我来说,想要将服务器已用执行时间作为响应头返回似乎很奇怪。也许你有一个合理的理由这样做,但在大多数情况下我会A)要么更关心总往返时间(如客户所观察到的),要么B)记录服务器上经过的执行时间为我自己的系统管理/指标目的。