Latest web development tutorials

Servlet Manipulação de exceção

Quando um Servlet lança uma exceção, recipiente Web usado na busca de elemento do tipode exceção em web.xmle jogado corresponde ao tipo de configuração.

Você deve usar o elementoerro de página no web.xml para especificar chamadas em conformidade servlet para exceçõesespecíficas oucódigo de status HTTP.

Configuração web.xml

Suponha que há umErrorHandlerServelt é chamado quando todos os erros incomuns ou definidos. Os seguintes itens serão criados no web.xml.

<! - Definições Servlet ->
<Servlet>
        <Servlet-name> ErrorHandler </ servlet-name>
        <Servlet-class> ErrorHandler </ servlet-class>
</ Servlet>
<! - Mapeamento Servlet ->
<Servlet-mapping>
        <Servlet-name> ErrorHandler </ servlet-name>
        <Url-pattern> / ErrorHandler </ url-pattern>
</ Servlet-mapping>

<- Página de erro Erro-código relacionado ->
<Error-page>
    <Error-code> 404 </ error-code>
    <Location> / ErrorHandler </ location>
</ Error-page>
<Error-page>
    <Error-code> 403 </ error-code>
    <Location> / ErrorHandler </ location>
</ Error-page>

<! - Página de erro relacionada com o tipo de exceção ->
<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 você quiser todas as excepções têm um manipulador de erro genérico, você deve definir o seguinte erro de página, em vez de definir elemento exceção erro de página separada para cada um:

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

Os seguintes são pontos na manipulação excepção web.xml acima é para ser observado:

  • Servelt ErrorHandler com outro Servelt definida da mesma maneira, e é configurado em web.xml.
  • Se houver um código de status de erro aparece, independentemente do 404 (não encontrado Não encontrado) ou 403 (proibição proibido), ErrorHandler o Servlet será invocado.
  • Se o aplicativo da Web ouServletExceptionlançaIOException,então o recipiente Web chamará ErrorHandler o Servlet.
  • Você pode definir manipulador de erro diferente de lidar com diferentes tipos de erros ou exceções. O exemplo acima é muito versátil, eu espero que você entenda os conceitos básicos através de exemplos.

Propriedades de Solicitação - Erro / exceção

O que se segue é uma lista de atributos do pedido de tratamento de erros Servlet pode ser acessado, utilizado para analisar a natureza do erro / exceção.

序号属性 & 描述
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 instância de manipulador de erro

Os seguintes são exemplos de Servlet, vai lidar com quaisquer erros no seu manipulador de erro definidos ou quando ocorre uma exceção.

Este exemplo permite que você Servlet Exceção manipulação de um entendimento básico, você pode usar o mesmo conceito para escrever aplicações de manipulação de exceção mais complexas:

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

A maneira usual para compilarErrorHandler.java, colocar os arquivos de classe em <Tomcat-installation-directory> / webapps / ROOT / WEB-INF / classes em.

Vamos adicionar a seguinte configuração no arquivo web.xml para lidar com exceções:

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

Agora, tente usar um produto Servlet anormal, ou digite uma URL errada, que irá desencadear o recipiente Web invocaErrorHandler o Servlet, e exibe a mensagem apropriada.Por exemplo, se você digitar uma URL errado (por exemplo: http: // localhost: 8080 / TomcatTest / UnKonwPage), ele exibe os seguintes resultados: