English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Когда Servlet выбрасывает исключение, веб-контейнер использует element exception-type для поиска конфигураций. web.xml для поиска конфигураций, соответствующих выброшенному исключению.
Вы должны использовать в web.xml error-page элемент для указания обработки конкретныхисключение или HTTP статус код осуществляет соответствующий вызов Servlet.
Предположим, что есть ErrorHandler Этот Servlet вызывается при возникновении любого определенного исключения или ошибки. Вот элементы, которые будут созданы в web.xml.
<!-- сervlet определение --> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>ErrorHandler</servlet-class> </servlet> <!-- сervlet маппинг --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern> </servlet-mapping> <!-- error-code связанные с ошибкой страницы --> <error-page> <error-code>404</error-code> <location>/ErrorHandler</location> </error-page> <error-page> <error-code>403</error-code> <location>/ErrorHandler</location> </error-page> <!-- exception-type связанные с ошибкой страницы --> <error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ErrorHandler</location> </error-page> <error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location> </error-page>
Если вы хотите определить универсальный обработчик ошибок для всех исключений, определите следующее error-page, а не отдельный error-page для каждого исключения:
<error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page>
Вот要点要注意, связанные с异常 обработкой в web.xml:
Servlet ErrorHandler настроен так же, как и другие Servlet, и конфигурируется в web.xml.
Если出现错误状态代码, независимо от того, 404 (Not Found Не найдено) или 403 (Forbidden Запрещено), вызывается Servlet ErrorHandler.
Если веб-приложение выбрасывает ServletException или}} IOExceptionв этом случае веб-контейнер вызовет Servlet ErrorHandler.
Вы можете определить различные обработчики ошибок для обработки различных типов ошибок или исключений. Приведенный выше пример очень общий, мы надеемся, что вы сможете понять основные концепции через пример.
Ниже приведен список запросов, доступных для Servlet, обрабатывающих ошибки, которые можно использовать для анализа свойств ошибки/исключения.
Номер | Свойства и описание |
---|---|
1 | javax.servlet.error.status_code Эта свойственность предоставляет код состояния, код состояния может быть сохранен и анализирован после хранения в типе данных java.lang.Integer. |
2 | javax.servlet.error.exception_type Эта свойственность предоставляет информацию о типе исключения, тип исключения может быть сохранен и анализирован после хранения в типе данных java.lang.Class. |
3 | javax.servlet.error.message Эта свойственность предоставляет информацию о точном сообщении об ошибке, информация может быть сохранена и анализирована после хранения в типе данных java.lang.String. |
4 | javax.servlet.error.request_uri Эта свойственность предоставляет информацию о URL, вызывавшем Servlet, информация может быть сохранена и анализирована после хранения в типе данных java.lang.String. |
5 | javax.servlet.error.exception Эта свойственность предоставляет информацию о возникновении исключения, информация может быть сохранена и анализирована после хранения в типе данных java.lang.Throwable. |
6 | javax.servlet.error.servlet_name Эта свойственность предоставляет имя Servlet, имя может быть сохранено и анализировано после хранения в типе данных java.lang.String. |
Ниже приведен пример Servlet, который обрабатывает ошибки или исключения, которые могут возникнуть при возникновении любого определенного вами ошибки или исключения:
Этот пример позволяет вам получить базовые знания о обработке исключений в Servlet, вы можете использовать те же концепции для создания более сложных приложений обработки исключений:
//импорт необходимых библиотек java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; //расширение класса HttpServlet public class ErrorHandler extends HttpServlet {}} // Метод обработки запросов метода GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception"); Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name"); if (servletName == null){ servletName = "Неизвестно"; } String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri"); if (requestUri == null){ requestUri = "Неизвестно"; } // Установить тип содержимого ответа response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Базовый учебник сети Ошибка/Исключение информация"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" out.println("<h1>Базовый учебник сети пример демонстрации информации об исключениях</h1>"); if (throwable == null && statusCode == null) {}} out.println("<h2>Информация об ошибке отсутствует</h2>"); out.println("Вернитесь <a href=\"" + response.encodeURL("http://localhost:8080/") + "\">Домашняя страница</a>."); } else if (statusCode != null) { out.println("Код ошибки: " + statusCode); } else { out.println("<h2>Информация об ошибке</h2>"); out.println("Имя сервлета: " + servletName + "</br></br>"); out.println("Тип исключения: " + throwable.getClass().getName() + "</br></br>"); out.println("URI запроса: " + requestUri + "<br><br>"); out.println("Информация об исключении: " + throwable.getMessage()); } out.println("</body>"); out.println("</html>"); } // Метод обработки запросов метода POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Компилируйте его обычным образом ErrorHandler.javaи поместите ваш классовый файл в <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
Давайте добавим следующую конфигурацию в файл web.xml, чтобы обрабатывать исключения:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>com.w3codebox.test.ErrorHandler</servlet-class> </servlet> <!-- servlet mappings --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/TomcatTest/ErrorHandler</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/TomcatTest/ErrorHandler</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page> </web-app>
Теперь, попробуйте использовать Servlet, который вызовет исключение, или введите неправильный URL, это вызовет вызов веб-контейнера ErrorHandler Servlet, и показать соответствующее сообщение. Например, если вы ввели неправильный URL (например: http://localhost:8080/TomcatTest/UnKonwPage), то он покажет следующий результат:
Код ошибки: 404