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

Servlet-Fehlerbehandlung

Online-Tools-Wenn ein Servlet eine Ausnahme wirft, wird der Web-Container den Servlet mit exception verwendet des Elements type web.xml

Sie müssen in web.xml nach der Konfiguration suchen, die dem ausgelösten Ausnahme-Typ entspricht. error-seite Element, um die Konfiguration für eine spezifischeAusnahme oder HTTP Statuscode entsprechende Servlet-Aufrufe durchzuführen.

web.xml-Konfiguration

Angenommen, es gibt eine ErrorHandler Der Servlet wird aufgerufen, wenn eine definierte Ausnahme oder ein Fehler auftritt. Folgendes ist ein Element, das in web.xml erstellt wird.

<!-- Servlet-Definition -->
<servlet>
        <servlet-name>ErrorHandler</servlet-name>
        <servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- Servlet-Mapping -->
<servlet-mapping>
        <servlet-name>ErrorHandler</servlet-name>
        <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<!-- error-Fehlerseite, die mit dem Code verbunden ist -->
<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-Fehlerseite, die mit dem Typ verbunden ist -->
<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>

Wenn Sie einen allgemeinen Fehlerbehandlungsprogramm für alle Ausnahmen definieren möchten, dann sollten Sie die folgende error definieren-page, anstatt für jede Ausnahme eine separate error zu definieren-page-Element:

<error-page>
    <exception-type>java.lang.Throwable</exception-type >
    <location>/ErrorHandler</location>
</error-page>

Hier sind einige Punkte, die bei der Fehlerbehandlung in web.xml beachtet werden müssen:

  • Servlet ErrorHandler wird auf die gleiche Weise wie andere Servlets definiert und in web.xml konfiguriert.

  • wenn ein Fehlerstatuscode auftritt, egal ob 404(Nicht gefunden nicht gefunden)oder 403(Verboten verboten),ruft der Servlet ErrorHandler auf.

  • Wenn die Web-Anwendung eine Ausnahme wirft ServletException oder IOExceptiondann ruft der Web-Container den Servlet ErrorHandler auf.

  • Sie können verschiedene Fehlerbehandlungsprogramme definieren, um verschiedene Arten von Fehlern oder Ausnahmen zu behandeln. Der obige Beispiel ist sehr allgemeingültig und hoffentlich können Sie durch das Beispiel die grundlegenden Konzepte verstehen.

Anfrageattribute - Fehler/Ausnahme

Hier ist eine Liste der Anfrageattribute, die der Servlet zur Fehleranalyse zugänglich sind, der Fehlerbehandlung/Die Eigenschaften der Ausnahme.

NummerEigenschaft & Beschreibung
1javax.servlet.error.status_code
Diese Eigenschaft gibt den Statuscode an, der gespeichert und nach dem Speichern als java.lang.Integer-Datentyp analysiert werden kann.
2javax.servlet.error.exception_type
Diese Eigenschaft gibt Informationen über den Typ der Ausnahme an, der gespeichert und nach dem Speichern als java.lang.Class-Datentyp analysiert werden kann.
3javax.servlet.error.message
Diese Eigenschaft gibt Informationen über die genaue Fehlermeldung an, die gespeichert und nach dem Speichern als java.lang.String-Datentyp analysiert werden können.
4javax.servlet.error.request_uri
Diese Eigenschaft gibt Informationen über die URL-Aufrufe an, die Servlets aufrufen, und diese Informationen können gespeichert und nach dem Speichern als java.lang.String-Datentyp analysiert werden.
5javax.servlet.error.exception
Diese Eigenschaft gibt Informationen über die von der Ausnahme verursachten Informationen an, die gespeichert und nach dem Speichern als java.lang.Throwable-Datentyp analysiert werden können.
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 = "Unknown";
        }
        String requestUri = (String)
        request.getAttribute("javax.servlet.error.request_uri");
        if (requestUri == null) {
            requestUri = "Unknown";
        }
        // 设置响应内容类型
        response.setContentType("text"/html; charset=UTF-8");
    
        PrintWriter out = response.getWriter();
        String title = "Grundlagen-Tutorial-Website Fehler/Exception Informationen";
       
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
            "<html>\n" +
             "<head><title>" + title + "</title></head>\n" +
             "<body bgcolor="#f0f0f0">\n");
           out.println("<h1>Beispiel einer Fehlermeldung der Grundlagen-Tutorial-Website</h1>");
           if (throwable == null && statusCode == null) {
              out.println("<h2>Fehlernachricht fehlt</h2>");
              out.println("Bitte kehren Sie zurück zu <a href=\ + 
            response.encodeURL("http://localhost:8080/)", + 
                "\">Startseite</a>.");
           } else if (statusCode != null) {
              out.println("Fehlercode: ", + statusCode);
        } else {
               out.println("<h2>Fehlerinformationen</h2>");
              out.println("Servlet Name: ", + servletName + 
                              "</br></br>");
              out.println("Fehlerart: ", + 
                              throwable.getClass().getName()) + 
                              "</br></br>");
              out.println("Anfrage URI: ", + requestUri + 
                              "<br><br>");
              out.println("Fehlermeldung: ", + 
                                  throwable.getMessage());
           }
           out.println("</body>");
           out.println("</html>");
    }
    // Methode zum Verarbeiten von POST-Anfragen
    public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
       throws ServletException, IOException {
        doGet(request, response);
    }
}

wie gewohnt kompilieren ErrorHandler.javaLegen Sie Ihre Klassendatei in <Tomcat-Installation-Verzeichnis>/webapps/ROOT/WEB-INF/in den

Lassen Sie uns die folgende Konfiguration in der Datei web.xml hinzufügen,um Ausnahmen zu verarbeiten:

<?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>

Versuchen Sie nun, einen Servlet zu verwenden, der eine Ausnahme verursacht, oder geben Sie eine falsche URL ein,dies wird den Web-Container veranlassen, ErrorHandler servlet,und eine angemessene Nachricht wird angezeigt。Beispielsweise wenn Sie eine falsche URL (wie:http:) eingeben,//localhost:8080/TomcatTest/UnKonwPage),dann wird der folgende Ergebnis angezeigt:

Fehlercode:404