Как сделать фильтр для обнаружения, если пользователь запросил страницу, которая не найдена? - PullRequest
5 голосов
/ 01 декабря 2010

Я хочу создать фильтр в своем приложении, чтобы перед каждым запросом он обнаруживал, существует ли запрошенная страница.Если он не существует, он перенаправит пользователя на страницу с ошибкой.

Как определить, что страница существует?

Мне нужно решение с фильтром, а не с помощью Интернета..xml метод меток.

Ответы [ 3 ]

7 голосов
/ 01 декабря 2010

Если у вас нет аутентификации, вы можете.

  1. Сделать Filter
  2. Использовать HttpServletResponseWrapper и переопределить sendError() и setStatus()
  3. Пропустите завернутый ответ через chain.doFilter(req, wrapper)
  4. Если вы получите sendError() в своей обертке, посмотрите, не получилось ли 404.
  5. Примите соответствующий ответ.

Возможно, вам также придется переопределить getOutputStream() и getWriter(), чтобы избежать отправки ответа клиенту, прежде чем вы получите возможность что-то делать.

4 голосов
/ 01 декабря 2010

Вы можете напрямую настроить его в web.xml

<error-page>
   <error-code>404</error-code>
   <location>/yourCustom404.jsp</location>
</error-page>

Или Создать фильтр и Используйте HTTPURLConnection для программного определения того, существует страница или нет.

2 голосов
/ 01 декабря 2010

«Страница существует» не является чем-то тривиальным. Страницы не должны существовать физически как файлы.

Помимо опции, упомянутой в org.life.java для имитации запроса с использованием HttpURLConnection, вы можете создать HttpServletResponseWrapper, переопределить метод setStatus и, когда он установлен на 404, взять дополнительные меры.

...