Фильтры сервлетов - определение вызываемого сервлета / JSP - PullRequest
3 голосов
/ 04 октября 2011

Я пишу Servlet Filter, который измеряет http запрос и время ответа.

Фильтр развернут на веб-сервере Apache Tomcat 7.

Мне было интересно, есть ли способ определить, какой сервлет или JSP вызывается при каждом запросе, кроме анализа URI запроса (и, например, проверки суффикса .jsp)?

1 Ответ

4 голосов
/ 04 октября 2011

Не без изменения сервлетов / JSP, чтобы они устанавливали определенный атрибут запроса, который вы, в свою очередь, получаете после вызова FilterChain#doFilter().

Я могу только дать подсказку, что HttpServletRequest#getServletPath(), вероятно, является более хорошим способом получения фактически запрашиваемого ресурса. Он делает это независимо от контекста, поэтому вам не нужно возиться с getRequestURI(), чтобы обрезать путь к контексту. Кроме того, если есть сервлет, который сопоставлен, например, /foo/*, то он вернет только /foo вместо /foo/bar/baz. На всякий случай, если вам интересно.

Поскольку вы используете Tomcat, вас может заинтересовать его встроенный Access Log Valve , который предлагает вам возможность регистрировать запросы меньше или больше так же, как хорошо известный Apache HTTPD, включая время , Это, конечно, только в том случае, если вы имеете полный административный контроль над экземпляром Tomcat.

...