Bud*_*Joe 8 performance grails aop http-headers
我怎么能添加一个响应头 - 比如看起来像X-Time
X-Time:112
给定的值是响应处理的时间(以毫秒为单位)?有没有一种非常简单的方法将其添加到Grails应用程序?不是我想永久留下的东西,但在开发我的应用程序时会很高兴.
Rob*_*ska 32
要简单地向响应添加标头,您可以使用after过滤器.
// grails-app/conf/MyFilters.groovy
class MyFilters {
def filters = {
addHeader(uri: '/*') {
after = {
response.setHeader('X-Time', value)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
要实际计算时间,使用javax.servlet.FilterGrails过滤器代替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() { }
}
Run Code Online (Sandbox Code Playgroud)
src/templates/war/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>
Run Code Online (Sandbox Code Playgroud)
使用它的原因javax.servlet.Filter是,您不必将"之前"和"之后"操作分开,因此可以保留整个过滤器链和servlet执行的开始时间.
补充说明:
对我来说,想要将服务器已用执行时间作为响应头返回似乎很奇怪.也许你有一个合理的理由这样做,但在大多数情况下我会A)要么更关心总往返时间(如客户所观察到的),要么B)记录服务器上经过的执行时间为我自己的系统管理/指标目的.
| 归档时间: |
|
| 查看次数: |
10960 次 |
| 最近记录: |