Создайте javax.servlet.Filter
и отобразите его в web.xml над всеми остальными фильтрами. В doFilter(..)
поместите свой код coutner вокруг chain.doFilter(request, response)
Либо используйте System.currentTimeMillis
, либо System.nanoTime()
(точнее), либо perf4j .
Это покажет вам, сколько времени понадобилось серверу для генерации ответа. Если вы хотите видеть полное время загрузки страницы так, как ее видит клиент, установите FireBug на firefox.
Примечание о том, как работает Filter
. Запрос поступает в и передается в качестве аргумента в первый фильтр в цепочке . Теперь фильтр может решить продолжить выполнение или остановить его. Если он решает продолжить, он вызывает .chain.doFilter(..)
. Теперь то же самое происходит со всеми определенными фильтрами для этого ресурса, и в конечном итоге поток достигает цели Servlet
(в данном случае - DispatcherServlet
). Когда метод doGet(..)
/ doPost(..)
завершается, поток программы логически возвращается к вызывающей стороне, то есть к последнему фильтру в цепочке. Когда он завершается - поток программы возвращается к указанному выше, пока они не достигнут первого фильтра, который вызвал chain.doFilter(..)
. Это линия, где вы размещаете свои расчеты времени. Когда возвращается первый фильтр, поток переходит к внутренним компонентам контейнера сервлета, и вскоре ответ отправляется в браузер. Итак, ваш код будет:
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain) {
long start = System.nanoTime();
chain.doFilter(request, response);
long end = System.nanoTime();
// log end-start
}