Я подозреваю, что время, которое я получу таким образом, не только даст мне время выполнения на стороне сервера, но также и время сети? Возможно ли это?
Это верно. По крайней мере, часть сетевого времени, включающего передачу тела запроса, включается в общее время таким образом. Код клапана / фильтра / сервлета вызывается непосредственно после того, как запрос заголовки полностью прочитан и проанализирован. Запрос body не обязательно полностью прочитан в этот момент. Тело запроса содержит все, что клиент отправляет по сети как часть запроса (например, отправленные данные формы). Только когда фильтр / сервлет начинает читать и анализировать полное тело запроса, например, getParameter()
, getReader()
, getInputStream()
и т. Д., Тогда все байты тела запроса будут фактически переданы.
Возможно, вы захотите переписать измерение времени выполнения таким образом, чтобы оно начиналось только после того, как тело запроса было полностью прочитано. Это означает, что вы действительно должны измерить его прямо внутри сервлета.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Read the request body.
String foo = request.getParameter("foo");
String bar = request.getParameter("bar");
// ...
// Now, start the stopwatch.
long startTime = System.nanoTime();
// Now, do the business job.
someService.process(foo, bar, ...);
// ...
// Now, stop the stopwatch.
long elapsedTime = System.nanoTime() - startTime;
// I don't think that you want to include JSP rendering in total time, right?
request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);
}
(обратите внимание, что я использовал System#nanoTime()
, поскольку он имеет гораздо лучшую точность)