Использовать JSF для создания страниц кода ошибки HTTP, а также страниц ошибок исключения?

Я понимаю, что можно обслуживать пользовательскую страницу ошибки 404, используя конфигурацию в web.xml следующим образом:

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

Однако я предполагаю, что многие веб-страницы с кодами ошибок будут очень похожими — изменятся только код ошибки и текст.

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

Я использую Apache MyFaces и читал об ExceptionHandlerFactory (здесь ), но я обнаружил, что коды ошибок не предусмотрены.

Действительно ли единственный способ настроить страницы с кодами ошибок — создать по одной для каждого кода ошибки, который я хочу настроить, и связать их с помощью web.xml? :-(


person 8bitjunkie    schedule 09.05.2012    source источник


Ответы (1)


Страница ошибки может быть просто страницей JSF. Если вы используете контейнер с поддержкой Servlet 3.0, у вас может быть глобальная страница ошибки:

<error-page>  
    <location>/error.jsf</location>  
</error-page> 

Если вы используете контейнер Servlet 2.5 или старше или используете Tomcat 7, который до сих пор не на данный момент реализована глобальная страница ошибок, тогда вам нужно указать отдельные страницы ошибок для каждого кода состояния, но все они могут указывать на одну и ту же страницу ошибок.

<error-page>  
    <status-code>404</status-code>
    <location>/error.jsf</location>  
</error-page> 
<error-page>  
    <status-code>500</status-code>
    <location>/error.jsf</location>  
</error-page> 

Код состояния и тип исключения в EL доступны следующим образом:

Status code: #{requestScope['javax.servlet.error.status_code']}
Exception type: #{requestScope['javax.servlet.error.exception_type']}

При необходимости вы можете выполнить условные проверки. Обратите внимание, что исключения по умолчанию всегда имеют код состояния 500.

Если вы используете Facelets, преемника JSP, создание шаблонов будет еще проще.

person BalusC    schedule 09.05.2012
comment
Очень полезная информация о том, что TomCat не реализует страницу глобальных ошибок. +1 за это и параметры requestScope для использования на общей странице - именно то, что мне нужно, и очень легкое. Для более целенаправленных страниц ошибок, связанных с исключениями, я могу изучить тип исключения в обработчике исключений и соответствующим образом перенаправить на специальные страницы. Еще раз спасибо BalusC. - person 8bitjunkie; 09.05.2012
comment
Что касается обработчика исключений, вам также может быть интересен FullAjaxExceptionHandler. - person BalusC; 09.05.2012
comment
FWIW: Глобальная страница ошибок, наконец, также поддерживается в Tomcat 7 в соответствии с версией 7.0.29. - person BalusC; 15.04.2013