Latest web development tutorials

Servlets Exception Handling

Wenn ein Servlet eine Ausnahme auslöst, Web - Container bei der Suche nach Ausnahme Typ Elementin web.xml verwendet und geworfen entspricht der Art der Konfiguration.

Sie müssen denFehler-Seitenelement in web.xml verwenden , um entsprechend Servlets Anrufe auf bestimmte Ausnahmenoder HTTP -Statuscode angeben.

web.xml Konfiguration

Angenommen , es gibt eineFehlerbehandlerServelt genannt wird , wenn es einen ungewöhnlichen oder Fehler definiert. Die folgenden Punkte werden in web.xml erstellt werden.

<! - Servlets Definitionen ->
<Servlets>
        <Servlet-name> Fehlerbehandler </ Servlet-name>
        <Servlet-Klasse> Fehlerbehandler </ Servlet-Klasse>
</ Servlet>
<! - Servletzuordnung ->
<Servlet-mapping>
        <Servlet-name> Fehlerbehandler </ Servlet-name>
        <URL-Muster> / Fehlerbehandler </ url-pattern>
</ Servlet-mapping>

<! - Fehler-Code-bezogene Fehlerseite ->
<Error-Seite>
    <Fehlercode> 404 </ error-code>
    <Location> / Fehlerbehandler </ location>
</ Error-Seite>
<Error-Seite>
    <Fehlercode> 403 </ error-code>
    <Location> / Fehlerbehandler </ location>
</ Error-Seite>

<! - Exception-Typ zugehörige Fehlerseite ->
<Error-Seite>
    <Exception-type>
          javax.servlet.ServletException
    </ Exception-type>
    <Location> / Fehlerbehandler </ location>
</ Error-Seite>

<Error-Seite>
    <Exception-type> java.io.IOException </ Ausnahme-type>
    <Location> / Fehlerbehandler </ location>
</ Error-Seite>

Wenn Sie alle Ausnahmen haben einen allgemeinen Fehler-Handler wollen, sollten Sie die folgende Fehler-Seite definieren, anstatt separat für jede Ausnahmefehler-Seitenelement definieren:

<Error-Seite>
    <Exception-type> java.lang.Throwable </ Ausnahme-type>
    <Location> / Fehlerbehandler </ location>
</ Error-Seite>

Die folgenden Punkte auf der oben web.xml Ausnahmebehandlung ist zu beachten:

  • Servelt Fehlerbehandler mit anderen Servelt definiert auf die gleiche Weise und wird in web.xml konfiguriert.
  • Wenn ein Fehlerstatuscode erscheint, unabhängig von der 404 (Not Found Not Found) oder 403 (Forbidden Verbot), Fehlerbehandler wird der Servlet aufgerufen werden.
  • Wenn die Web - Anwendung oderServletExceptionIOException wirft, dann wird der Web - Container Fehlerbehandler die Servlet aufrufen.
  • Sie können verschiedene Fehlerbehandlung definieren, um verschiedene Arten von Fehlern oder Ausnahmen zu behandeln. Das obige Beispiel ist sehr vielseitig, ich hoffe, dass Sie die grundlegenden Konzepte durch Beispiele zu verstehen.

Anfrage Eigenschaften - Fehler / Ausnahme

Im Folgenden ist eine Liste der Anfrage-Attribute Servlets Fehlerbehandlung zugegriffen werden kann, verwendet, um die Art der Fehler / Ausnahme zu analysieren.

序号属性 & 描述
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-Fehler-Handler-Instanz

Die folgenden sind Beispiele von Servlets, werden mit Fehler in der Fehlerbehandlung befassen definiert oder wenn eine Ausnahme auftritt.

In diesem Beispiel können Sie Ausnahmebehandlung ein grundlegendes Verständnis zu Servlets können Sie das gleiche Konzept verwenden komplexere Exception-Handling-Anwendungen zu schreiben:

//导入必需的 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 = "本教程 Error/Exception 信息";
	   
		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("../../localhost:8080/index.html") + 
	        	"\">主页</a>。");
	   	}else if (statusCode != null) {
	      	out.println("错误代码 : " + statusCode);
		}else{
		   	out.println("<h2>错误信息</h2>");
	      	out.println("Servlet Name : " + 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);
	}
}

Der übliche WegErrorHandler.java zu kompilieren,legen Sie Ihre Klassendateien in <Tomcat-Installationsverzeichnis> / webapps / ROOT / WEB-INF / classes in.

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

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
<servlet>
        <servlet-name>ErrorHandler</servlet-name>
        <servlet-class>com.w3big.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>  

Nun versuchen , ein Erzeugnis abnormal Servlets zu verwenden, oder eine fehlerhafte URL eingeben, die der Web - Container ruftFehlerbehandler die Servlet auslösen, und zeigt die entsprechende Meldung an .Zum Beispiel, wenn Sie eine falsche URL eingeben (zB: http: // localhost: 8080 / TomcatTest / UnKonwPage), ist es die folgenden Ergebnisse angezeigt: