Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringMVC中,在哪里开始和结束计数器以测试速度执行时间?_Java_Performance_Spring_Servlets_Spring Mvc - Fatal编程技术网

Java 在SpringMVC中,在哪里开始和结束计数器以测试速度执行时间?

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()(更准确),或 这将显示服务器生成响应所

我想知道渲染一个特定页面需要多长时间,SpringMVC框架中可以启动和停止计时器的各个部分在哪里

顺便说一句,我应该使用哪个java类来获得以毫秒为单位的最准确时间?

  • 创建一个
    javax.servlet.Filter
    并将其映射到web.xml中,而不是所有其他过滤器。在
    doFilter(…)
    中,将您的coutner代码放在
    链的周围。doFilter(请求、响应)

  • 使用
    System.currentTimeMillis
    ,或
    System.nanoTime()
    (更准确),或

这将显示服务器生成响应所花费的时间。如果您希望看到客户端看到的页面的完整加载时间,请在firefox上安装


关于
过滤器如何操作的说明。一个请求进入,并作为参数传递给中的第一个过滤器。现在,筛选器可能决定继续执行或停止执行。如果选择继续,则调用
.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()
。看凯文的。