Latest web development tutorials

Servlet Penanganan Exception

Ketika Servlet melempar pengecualian, wadah Web yang digunakan dalam mencari unsurpengecualian-ketik web.xml dan dibuang sesuai dengan jenis konfigurasi.

Anda harus menggunakankesalahan-elemen halaman di web.xml untuk menentukan panggilan sesuai Servlet untuk pengecualiantertentu ataukode status HTTP.

Konfigurasi web.xml

Misalkan adaErrorHandlerServelt dipanggil saat kesalahan yang tidak biasa atau didefinisikan. Item berikut akan dibuat dalam web.xml.

<! - Servlet definisi ->
<Servlet>
        <Servlet-nama> ErrorHandler </ servlet-name>
        <Servlet kelas> ErrorHandler </ servlet-class>
</ Servlet>
<! - Servlet pemetaan ->
<Servlet-mapping>
        <Servlet-nama> ErrorHandler </ servlet-name>
        <Url-pola> / ErrorHandler </ url-pattern>
</ Servlet-mapping>

<! - Kesalahan-kode terkait halaman error ->
<Error-page>
    <Error-code> 404 </ error-code>
    <Lokasi> / ErrorHandler </ lokasi>
</ Error-halaman>
<Error-page>
    <Error-code> 403 </ error-code>
    <Lokasi> / ErrorHandler </ lokasi>
</ Error-halaman>

<! - Exception-jenis halaman kesalahan terkait ->
<Error-page>
    <Exception-jenis>
          javax.servlet.ServletException
    </ Exception-jenis>
    <Lokasi> / ErrorHandler </ lokasi>
</ Error-halaman>

<Error-page>
    <Exception-jenis> java.io.IOException </ exception tipe>
    <Lokasi> / ErrorHandler </ lokasi>
</ Error-halaman>

Jika Anda ingin semua pengecualian memiliki handler kesalahan umum, Anda harus menentukan kesalahan-halaman berikut, daripada mendefinisikan elemen pengecualian kesalahan-halaman terpisah untuk setiap:

<Error-page>
    <Exception-jenis> java.lang.Throwable </ exception tipe>
    <Lokasi> / ErrorHandler </ lokasi>
</ Error-halaman>

Berikut ini adalah poin tersebut di atas penanganan web.xml pengecualian adalah untuk dicatat:

  • Servelt ErrorHandler dengan Servelt lainnya didefinisikan dengan cara yang sama, dan dikonfigurasi dalam web.xml.
  • Jika ada kode status error muncul terlepas dari 404 (Tidak Ditemukan Tidak Ditemukan) atau 403 (Forbidden larangan), ErrorHandler Servlet akan dipanggil.
  • Jika aplikasi Web atauServletExceptionthrowsIOException,maka kontainer Web akan memanggil ErrorHandler Servlet.
  • Anda dapat menentukan handler kesalahan yang berbeda untuk menangani berbagai jenis kesalahan atau pengecualian. Contoh di atas sangat serbaguna, saya harap Anda memahami konsep-konsep dasar melalui contoh.

Permintaan Properti - error / exception

Berikut ini adalah daftar permintaan atribut Servlet kesalahan penanganan dapat diakses, digunakan untuk menganalisis sifat dari kesalahan / pengecualian.

序号属性 & 描述
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 error handler contoh

Berikut ini adalah contoh dari Servlet, akan menangani setiap kesalahan dalam penangan kesalahan Anda pasti atau ketika pengecualian terjadi.

Contoh ini memungkinkan Anda untuk Servlet Exception penanganan pemahaman dasar, Anda dapat menggunakan konsep yang sama untuk menulis aplikasi pengecualian penanganan yang lebih kompleks:

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

Cara biasa untuk mengkompilasiErrorHandler.java, menempatkan file kelas Anda di <Tomcat-instalasi-direktori> / webapps / ROOT / WEB-INF / kelas di.

Mari kita tambahkan konfigurasi berikut di file web.xml untuk menangani pengecualian:

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

Sekarang, cobalah untuk menggunakan produk yang abnormal Servlet, atau memasukkan URL yang salah, yang akan memicu wadah Web memanggilErrorHandler Servlet, dan menampilkan pesan yang sesuai.Misalnya, jika Anda memasukkan URL yang salah (misalnya: http: // localhost: 8080 / TomcatTest / UnKonwPage), ini akan menampilkan hasil sebagai berikut: