English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Обработка исключений Servlet

Когда Servlet выбрасывает исключение, веб-контейнер использует element exception-type для поиска конфигураций. web.xml для поиска конфигураций, соответствующих выброшенному исключению.

Вы должны использовать в web.xml error-page элемент для указания обработки конкретныхисключение или HTTP статус код осуществляет соответствующий вызов Servlet.

конфигурация web.xml

Предположим, что есть 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, обрабатывающих ошибки, которые можно использовать для анализа свойств ошибки/исключения.

НомерСвойства и описание
1javax.servlet.error.status_code
Эта свойственность предоставляет код состояния, код состояния может быть сохранен и анализирован после хранения в типе данных java.lang.Integer.
2javax.servlet.error.exception_type
Эта свойственность предоставляет информацию о типе исключения, тип исключения может быть сохранен и анализирован после хранения в типе данных java.lang.Class.
3javax.servlet.error.message
Эта свойственность предоставляет информацию о точном сообщении об ошибке, информация может быть сохранена и анализирована после хранения в типе данных java.lang.String.
4javax.servlet.error.request_uri
Эта свойственность предоставляет информацию о URL, вызывавшем Servlet, информация может быть сохранена и анализирована после хранения в типе данных java.lang.String.
5javax.servlet.error.exception
Эта свойственность предоставляет информацию о возникновении исключения, информация может быть сохранена и анализирована после хранения в типе данных java.lang.Throwable.
6javax.servlet.error.servlet_name
Эта свойственность предоставляет имя Servlet, имя может быть сохранено и анализировано после хранения в типе данных java.lang.String.

Пример обработчика ошибок Servlet

Ниже приведен пример 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