Задача:
Установлена кастомная 404-страница для веб-приложения:
<error-page>
<error-code>404</error-code>
<location>/errorPages/404.jsp</location>
</error-page>
В теле страницы необходимо определить, какой именно URL привел к ошибке (как минимум, это необходимо, чтобы корректно подключить стили на этой странице, т.к. для этого нужно знать уровень вложенности).
Решение:
При возникновении ошибки 404 Tomcat делает forward на установленную 404-страницу, поэтому определить, какой именно URL пользователь запросил, не так просто (request.getRequestURI() возвращает /errorPages/404.jsp). Определение именно запрошенного пользователем URL`а выполняется так:
request.getAttribute("javax.servlet.error.request_uri")
Аналогичным образом можно узнать и другие параметры ошибки через следующие атрибуты:
javax.servlet.error.status_code
javax.servlet.error.exception_type
javax.servlet.error.message
javax.servlet.error.exception
Такой подход работает не только на JSP-страницах, но и в сервлетах (см. http://java.sun.com/developer/technicalArticles/Servlets/servletapi2.3/).
Теперь уровень вложенности страницы, вызвавшей 404 ошибку, относительно контекста сервлета определяется следующим образом:
Теперь уровень вложенности страницы, вызвавшей 404 ошибку, относительно контекста сервлета определяется следующим образом:
request.getAttribute("javax.servlet.error.request_uri").toString().split("/").length-3
Комментариев нет:
Отправить комментарий