Latest web development tutorials

Servlet Gestione delle eccezioni

Quando un Servlet genera un'eccezione, contenitore Web utilizzato nella ricerca di elemento eccezioni di tipoin web.xml e gettato corrisponda al tipo di configurazione.

È necessario utilizzare l'elementoerrore di pagina in web.xml per specificare le chiamate di conseguenza servlet per specifiche eccezioniocodice di stato HTTP.

Configurazione web.xml

Supponiamo c'è unErrorHandlerServelt si chiama quando gli eventuali errori insoliti o definiti. Le seguenti voci verranno creati in web.xml.

<! - -> Definizioni Servlet
<Servlet>
        <Servlet-name> ErrorHandler </ servlet-name>
        <Servlet-class> ErrorHandler </ servlet-class>
</ Servlet>
<! - Mappatura Servlet ->
<Servlet-mapping>
        <Servlet-name> ErrorHandler </ servlet-name>
        <Url-pattern> / ErrorHandler </ url-pattern>
</ Servlet-mapping>

<- Pagina di errore Error-code-correlati -!>
<Error-page>
    <Error-code> 404 </ error-code>
    <Location> / ErrorHandler </ location>
</ Error-page>
<Error-page>
    <Error-code> 403 </ codice di errore>
    <Location> / ErrorHandler </ location>
</ Error-page>

<! - Pagina di errore relativo Eccezione-tipo ->
<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>

Se si desidera che tutte le eccezioni hanno un gestore di errore generico, è necessario definire il seguente errore-pagina, piuttosto che definire elemento eccezione errore-pagina separata per ogni:

<Error-page>
    <Exception-type> java.lang.Throwable </ exception-type>
    <Location> / ErrorHandler </ location>
</ Error-page>

Quelli che seguono sono i punti sulla gestione delle eccezioni sopra web.xml è da notare:

  • Servelt ErrorHandler con altri Servelt definito allo stesso modo, ed è configurato in web.xml.
  • Se c'è un codice di stato di errore viene visualizzato indipendentemente dal 404 (non trovato non trovato) o 403 (divieto Forbidden), ErrorHandler Servlet sarà richiamato.
  • Se l'applicazione Web oServletExceptiongettaIOException,poi il contenitore Web chiamerà ErrorHandler Servlet.
  • È possibile definire diversi gestore degli errori per gestire diversi tipi di errori o eccezioni. L'esempio di cui sopra è molto versatile, spero di capire i concetti di base attraverso esempi.

Proprietà RICHIESTA - errore / eccezione

Di seguito è riportato un elenco di richiesta di attributi gestione degli errori Servlet si può accedere, utilizzato per analizzare la natura dell'errore / eccezione.

序号属性 & 描述
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 esempio gestore degli errori

I seguenti sono esempi di Servlet, si occuperà di eventuali errori nel vostro gestore di errore definiti o quando si verifica un'eccezione.

Questo esempio consente di servlet gestione delle eccezioni una conoscenza di base, è possibile utilizzare lo stesso concetto di scrivere applicazioni di gestione delle eccezioni più complesse:

//导入必需的 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);
	}
}

Il solito modo di compilareErrorHandler.java, mettere i file di classe in <Tomcat-directory-installazione> / webapps / root / WEB-INF / classes in.

Aggiungiamo la seguente configurazione nel file web.xml per gestire le eccezioni:

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

Ora, provate ad utilizzare una produzione anormale Servlet, o inserire un URL errato, che attiverà il contenitore Web invocaErrorHandler Servlet, e visualizza il messaggio appropriato.Ad esempio, se si immette un URL sbagliato (ad esempio: http: // localhost: 8080 / TomcatTest / UnKonwPage), visualizza i seguenti risultati: