Latest web development tutorials

Servlet control de excepciones

Cuando un servlet se produce una excepción, el contenedor web que se utiliza en la búsqueda de elemento de tipo excepciónen web.xml y arrojado coincide con el tipo de configuración.

Debe utilizar el elemento deerror de páginas en web.xml para especificar las llamadas en servlet para excepcionesespecíficas ocódigo de estado HTTP.

Configuración de web.xml

Supongamos que hay unManejadorErrorServelt se llama cuando los errores inusuales o definidos. Los siguientes artículos serán creados en web.xml.

<! - -> Definiciones de servlet
<Servlet>
        <Servlet-name> ManejadorError </ servlet-name>
        <Servlet-class> ManejadorError </ servlet-class>
</ Servlet>
<! - Correlación de servlet ->
<Servlet-mapping>
        <Servlet-name> ManejadorError </ servlet-name>
        <Url-pattern> / ManejadorError </ url-pattern>
</ Servlet-mapping>

<- Página de error relacionada con los errores de código ->
<Error-page>
    <Error-code> 404 </ error-code>
    <Location> / ManejadorError </ location>
</ Error-page>
<Error-page>
    <Error-code> 403 </ error-code>
    <Location> / ManejadorError </ location>
</ Error-page>

<! - Página de error relacionada con el tipo de excepciones ->
<Error-page>
    <Excepción de tipo>
          javax.servlet.ServletException
    </ Excepción de tipo>
    <Location> / ManejadorError </ location>
</ Error-page>

<Error-page>
    <Tipo de excepción> java.io.IOException </ excepción de tipo>
    <Location> / ManejadorError </ location>
</ Error-page>

Si desea que todas las excepciones tienen un controlador de error genérico, debe definir el siguiente error de página, en lugar de definir elemento de excepción de error-página distinta para cada uno:

<Error-page>
    <Tipo de excepción> java.lang.Throwable </ excepción de tipo>
    <Location> / ManejadorError </ location>
</ Error-page>

Los siguientes son los puntos en el manejo de excepciones web.xml de arriba es de notar:

  • Servelt ErrorHandler con otra Servelt define de la misma manera, y se configura en web.xml.
  • Si hay aparece un código de estado de error, independientemente de la 404 (no encontrado no encontrado) o 403 (prohibición Prohibida), ManejadorError el servlet se invocará.
  • Si la aplicación web oServletExceptionlanzaIOException,a continuación, el contenedor Web llamará ManejadorError el servlet.
  • Se pueden definir diferentes gestor de errores para manejar diferentes tipos de errores o excepciones. El ejemplo anterior es muy versátil, espero que entienda los conceptos básicos a través de ejemplos.

Propiedades de la solicitud - Error / excepción

La siguiente es una lista de los atributos de petición de gestión de errores servlet se puede acceder, utilizado para analizar la naturaleza del error / excepción.

序号属性 & 描述
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 ejemplo controlador de errores

Los siguientes son ejemplos de servlet, se ocupará de cualquier error en el controlador de errores definidos o cuando se produce una excepción.

Este ejemplo permite la gestión de excepciones servlet una comprensión básica, puede utilizar el mismo concepto para escribir aplicaciones de manejo de excepciones más complejas:

//导入必需的 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 forma habitual para compilarErrorHandler.java, poner los archivos de clases en <Tomcat-instalación-directorio> / webapps / ROOT / WEB-INF / classes en.

Vamos a añadir la siguiente configuración en el archivo web.xml para manejar excepciones:

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

Ahora, trata de utilizar un servlet anormal productos, o introduzca una URL errónea, lo que activará el contenedor Web invoca el servletManejadorError, y muestra el mensaje correspondiente.Por ejemplo, si se introduce una URL incorrecta (por ejemplo: http: // localhost: 8080 / TomcatTest / UnKonwPage), que muestra los siguientes resultados: