Latest web development tutorials

بريمج معالجة استثناء

عندما يلقي بريمج استثناء، والحاويات على الانترنت تستخدمه في البحث عن عنصر استثناء من نوعفي web.xml والقيت يطابق النوع من التكوين.

يجب استخدام عنصرالخطأ الصفحات في web.xml لتحديد المكالمات وفقا لذلك بريمج لاستثناءاتمحددة أورمز حالة HTTP.

تكوين web.xml

لنفترض أن هناك ما يسمى ServeltErrorHandlerعند أي أخطاء غير عادية أو محددة. سيتم إنشاء العناصر التالية في web.xml.

<! - تعريفات بريمج ->
<بريمج>
        <بريمج اسم> ErrorHandler </ بريمج اسم>
        <من الدرجة بريمج> ErrorHandler </ بريمج الدرجة>
</ بريمج>
<! - رسم الخرائط بريمج ->
<بريمج رسم الخرائط>
        <بريمج اسم> ErrorHandler </ بريمج اسم>
        <رابط نمط> / ErrorHandler </ رابط نمط>
</ بريمج رسم الخرائط>

<- صفحة الخطأ المتعلقة خطأ رمز -!>
<خطأ الصفحات>
    <خطأ رمز> 404 </ خطأ رمز>
    <الموقع> / ErrorHandler </ الموقع>
</ خطأ الصفحات>
<خطأ الصفحات>
    <خطأ رمز> 403 </ خطأ رمز>
    <الموقع> / ErrorHandler </ الموقع>
</ خطأ الصفحات>

<! - استثناء من نوع صفحة الخطأ ذات الصلة ->
<خطأ الصفحات>
    <استثناء من نوع>
          javax.servlet.ServletException
    </ استثناء من نوع>
    <الموقع> / ErrorHandler </ الموقع>
</ خطأ الصفحات>

<خطأ الصفحات>
    <استثناء من نوع> java.io.IOException </ استثناء من نوع>
    <الموقع> / ErrorHandler </ الموقع>
</ خطأ الصفحات>

إذا كنت تريد جميع الاستثناءات لديها معالج خطأ عام، يجب أن تحدد ما يلي خطأ الصفحة، بدلا من تعريف منفصل عنصر استثناء خطأ صفحة لكل:

<خطأ الصفحات>
    <استثناء من نوع> java.lang.Throwable </ استثناء من نوع>
    <الموقع> / ErrorHandler </ الموقع>
</ خطأ الصفحات>

النقاط التالية على معالجة الاستثناء web.xml أعلاه لا بد من التنويه:

  • Servelt ErrorHandler مع Servelt البعض تعريف بنفس الطريقة، وتم تكوينه في web.xml.
  • إذا كان هناك يظهر رمز حالة الخطأ بغض النظر عن 404 (لم يتم العثور لم يتم العثور على) أو 403 (حظر المحرمة)، ErrorHandler سيتم استدعاء بريمج.
  • إذا كان تطبيق ويب أوServletExceptionيلقيIOException،ثم الحاوية الويب سيدعو ErrorHandler في بريمج.
  • يمكنك تحديد مختلف معالج خطأ للتعامل مع أنواع مختلفة من أخطاء أو استثناءات. في المثال أعلاه متعددة جدا، وآمل أن يفهم المفاهيم الأساسية من خلال الأمثلة.

طلب خصائص - الخطأ / الاستثناء

وفيما يلي قائمة من طلب سمات بريمج معالجة الأخطاء يمكن الوصول، وتستخدم لتحليل طبيعة الخطأ / الاستثناء.

序号属性 & 描述
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 数据类型后可被分析。

بريمج المثال معالج الأخطاء

وفيما يلي أمثلة من بريمج، والتعامل مع أية أخطاء في معالج الأخطاء الخاصة بك محددة أو عند حدوث استثناء.

هذا المثال يسمح لك لبريمج استثناء التعامل مع فهم أساسي، يمكنك استخدام نفس المفهوم لكتابة أكثر تعقيدا تطبيقات معالجة الاستثناء:

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

الطريقة المعتادة لتجميعErrorHandler.java، وضع الملفات صفك في <القط-تركيب الدليل> / webapps / الجذر / WEB-INF / دروس في.

دعونا نضيف التكوين التالية في ملف web.xml لمعالجة الاستثناءات:

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

الآن، في محاولة لاستخدام المنتجات بريمج غير طبيعي، أو إدخال عنوان خاطئ، والتي سوف تؤدي الى حاوية الويب تحتجErrorHandler على بريمج، وتعرض الرسالة المناسبة.على سبيل المثال، إذا قمت بإدخال عنوان URL غير صحيح (على سبيل المثال: HTTP: // المضيف المحلي: 8080 / TomcatTest / UnKonwPage)، فإنه يعرض النتائج التالية: