Java 在SpringMVC中,在哪里开始和结束计数器以测试速度执行时间?
我想知道渲染一个特定页面需要多长时间,SpringMVC框架中可以启动和停止计时器的各个部分在哪里 顺便说一句,我应该使用哪个java类来获得以毫秒为单位的最准确时间?Java 在SpringMVC中,在哪里开始和结束计数器以测试速度执行时间?,java,performance,spring,servlets,spring-mvc,Java,Performance,Spring,Servlets,Spring Mvc,我想知道渲染一个特定页面需要多长时间,SpringMVC框架中可以启动和停止计时器的各个部分在哪里 顺便说一句,我应该使用哪个java类来获得以毫秒为单位的最准确时间? 创建一个javax.servlet.Filter并将其映射到web.xml中,而不是所有其他过滤器。在doFilter(…)中,将您的coutner代码放在链的周围。doFilter(请求、响应) 使用System.currentTimeMillis,或System.nanoTime()(更准确),或 这将显示服务器生成响应所
- 创建一个
并将其映射到web.xml中,而不是所有其他过滤器。在javax.servlet.Filter
中,将您的coutner代码放在doFilter(…)
链的周围。doFilter(请求、响应)
- 使用
,或System.currentTimeMillis
(更准确),或System.nanoTime()
关于
过滤器如何操作的说明。一个请求进入,并作为参数传递给中的第一个过滤器。现在,筛选器可能决定继续执行或停止执行。如果选择继续,则调用.chain.doFilter(..)
。现在,为该资源定义的所有过滤器也会发生同样的情况,最终流到达目标Servlet
(在本例中为DispatcherServlet
)。当doGet(..)
/doPost(..)
方法完成时,程序流在逻辑上返回给调用者,即链中的最后一个过滤器。当它完成时-程序流返回到上面的一个,直到它们到达调用chain.doFilter(..)
的第一个过滤器。这是你计算时间的地方。当第一个过滤器返回时,流进入servlet容器内部,并且很快将响应发送到浏览器。因此,您的代码将是:
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain) {
long start = System.nanoTime();
chain.doFilter(request, response);
long end = System.nanoTime();
// log end-start
}
我需要两个过滤器,一个在顶部,一个在底部,然后不?不。将计算放在链上。doFilter(…)
-它开始整个过程,然后页面准备好。我想我不懂过滤器,一个过滤器怎么知道需要多长时间?像这里的hitcounter样品吗?您的筛选代码应该是这样的:start=System.currentTimeMillis;链式过滤器(…);结束=System.currentTimeMillis;/*保存结束开始位置*/。所有其他过滤器和实际页面呈现都是在doFilter(…)中完成的。如果要测量经过的时间,确实应该使用nanoTime()
。看凯文的。