Latest web development tutorials

Gestion des exceptions Servlet

Quand un Servlet lance une exception, le conteneur Web utilisé dans la recherche de type exception élémentdans web.xml et jetés correspond au type de configuration.

Vous devez utiliser l'élément d'erreur page web.xml pour spécifier les appels en conséquence Servlet à des exceptionsspécifiques ou lecode d'état HTTP.

Configuration web.xml

Supposons qu'il ya unErrorHandlerServelt est appelée lorsque des erreurs inhabituelles ou définies. Les éléments suivants seront créés dans web.xml.

<-! Servlet définitions ->
<Servlet>
        <Servlet-name> ErrorHandler </ servlet-name>
        <Servlet-class> ErrorHandler </ servlet-class>
</ Servlet>
<! - Servlet cartographie ->
<Servlet-mapping>
        <Servlet-name> ErrorHandler </ servlet-name>
        <Url-pattern> / ErrorHandler </ url-pattern>
</ Servlet-mapping>

<- Page d'erreur concernant les erreurs de code ->
<Erreur page>
    <Erreur-code> 404 </ error code>
    <Location> / ErrorHandler </ location>
</ Erreur page>
<Erreur page>
    <Erreur-code> 403 </ error code>
    <Location> / ErrorHandler </ location>
</ Erreur page>

<! - De type Exception page correspondante d'erreur ->
<Erreur page>
    <Exception-type>
          javax.servlet.ServletException
    </ Exception-type>
    <Location> / ErrorHandler </ location>
</ Erreur page>

<Erreur page>
    <Type Exception> java.io.IOException </ type d'exception>
    <Location> / ErrorHandler </ location>
</ Erreur page>

Si vous voulez que toutes les exceptions ont un gestionnaire d'erreur générique, vous devez définir l'erreur page suivante, plutôt que de définir élément séparé exception error-page pour chaque:

<Erreur page>
    <Type Exception> java.lang.Throwable </ type d'exception>
    <Location> / ErrorHandler </ location>
</ Erreur page>

Les points suivants sont sur le traitement web.xml d'exception ci-dessus est à noter:

  • Servelt ErrorHandler avec d'autres Servelt défini de la même façon, et est configuré dans le fichier web.xml.
  • S'il y a un code d'état d'erreur apparaît indépendamment de la 404 (non trouvé non trouvé) ou 403 (interdiction interdite), ErrorHandler Servlet sera invoqué.
  • Si l'application Web ouServletExceptionthrowsIOException,puis le conteneur Web appellera ErrorHandler Servlet.
  • Vous pouvez définir gestionnaire d'erreur différente de gérer les différents types d'erreurs ou d'exceptions. L'exemple ci-dessus est très polyvalent, j'espère que vous comprenez les concepts de base à travers des exemples.

Demander Propriétés - erreur / exception

Ce qui suit est une liste de demande attribue la gestion des erreurs Servlet peut être consulté, utilisé pour analyser la nature de l'erreur / exception.

序号属性 & 描述
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 instance de gestionnaire d'erreurs

Les exemples suivants sont de Servlet, traiteront des erreurs dans votre gestionnaire d'erreurs définies ou lorsqu'une exception se produit.

Cet exemple vous permet de servlet Exception manipulation une compréhension de base, vous pouvez utiliser le même concept pour écrire des applications de gestion des exceptions plus complexes:

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

La manière habituelle de compilerErrorHandler.java, mettez vos fichiers de classe dans <Tomcat-installation-directory> / webapps / ROOT / WEB-INF / classes dans.

Ajoutons la configuration suivante dans le fichier web.xml pour gérer les exceptions:

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

Maintenant, essayez d'utiliser un Servlet anormale de produits, ou entrer une URL erronée, ce qui déclenchera le conteneur Web appelleErrorHandler Servlet, et affiche le message approprié.Par exemple, si vous entrez une URL erronée (par exemple: http: // localhost: 8080 / TomcatTest / UnKonwPage), il affiche les résultats suivants: