การจัดการข้อยกเว้นใน JSP

⚡ สรุปอย่างชาญฉลาด

การจัดการข้อยกเว้นใน JSP จะจัดการข้อผิดพลาดที่เกิดขึ้นระหว่างการประมวลผลโค้ด คล้ายกับการจัดการข้อผิดพลาดอื่นๆ Java บล็อก try-catch ข้อยกเว้นแบ่งออกเป็นสามประเภท ได้แก่ ข้อยกเว้นที่ตรวจสอบได้ ข้อยกเว้นขณะรันไทม์ และข้อยกเว้นข้อผิดพลาด หน้า JSP ใช้แอตทริบิวต์ errorPage และ isErrorPage เพื่อเปลี่ยนเส้นทางและแสดงข้อยกเว้น

  • ⚠️ ข้อยกเว้นที่กำหนดไว้: เกิดข้อผิดพลาดระหว่างการประมวลผล JSP ซึ่งได้รับการจัดการดังนี้ Java try-catch.
  • 🗂️ สามประเภท: ข้อยกเว้นที่ตรวจสอบแล้ว ข้อยกเว้นขณะรันไทม์ และข้อยกเว้นข้อผิดพลาด
  • 🧾 ตรวจสอบแล้ว: ต้องจัดการกับข้อผิดพลาด FileNotFoundException, IOException และ SQLException
  • 🧨 Runtime: ArrayIndexOutOfBounds, ArithmeticException และ NullPointerException
  • 🛟 errorPage / isErrorPage: เปลี่ยนเส้นทางข้อผิดพลาดไปยังหน้าเว็บที่แสดงรายละเอียดข้อผิดพลาดทั้งหมด trace.

การจัดการข้อยกเว้นใน JSP

ข้อยกเว้นใน JSP คืออะไร

ข้อยกเว้น ใน JSP เกิดขึ้นเมื่อมีข้อผิดพลาดในโค้ดไม่ว่าจะโดยผู้พัฒนาหรือข้อผิดพลาดภายในจากระบบ การจัดการข้อยกเว้นใน JSP จะเหมือนกับใน Java โดยที่เราจัดการข้อยกเว้นโดยใช้บล็อก Try Catch ไม่เหมือน Javaมีข้อยกเว้นใน JSP เมื่อไม่มีข้อผิดพลาดในโค้ด

ประเภทของข้อยกเว้นใน JSP

ข้อยกเว้นใน JSP มีสามประเภท:

  1. ตรวจสอบข้อยกเว้น
  2. ข้อยกเว้นรันไทม์
  3. ข้อผิดพลาดข้อยกเว้น

ตรวจสอบข้อยกเว้น

โดยปกติแล้วข้อผิดพลาดของผู้ใช้หรือปัญหาที่นักพัฒนาไม่เห็นนั้นเรียกว่าข้อยกเว้นที่ตรวจสอบแล้ว ตัวอย่างข้อยกเว้นที่ตรวจสอบแล้วมีดังนี้:

  1. FileNotFoundException: นี่เป็นข้อยกเว้นที่ได้รับการตรวจสอบ (โดยที่พยายามค้นหาไฟล์เมื่อไม่พบไฟล์บนดิสก์)
  2. ข้อยกเว้น IO: นี่จะถูกตรวจสอบข้อยกเว้นด้วย หากมีข้อยกเว้นเกิดขึ้นระหว่างการอ่านหรือเขียนไฟล์ ข้อยกเว้น IO จะเพิ่มขึ้น
  3. SQLException: นี่ถือเป็นข้อยกเว้นที่ถูกตรวจสอบเมื่อไฟล์เชื่อมต่อกับ SQL ฐานข้อมูล และมีปัญหากับการเชื่อมต่อของฐานข้อมูล SQL จากนั้น SQLException จะถูกยกขึ้น

ข้อยกเว้นรันไทม์

ข้อยกเว้นรันไทม์คือข้อยกเว้นที่โปรแกรมเมอร์สามารถหลีกเลี่ยงได้ โดยจะถูกละเว้นในระหว่างการคอมไพล์ ตัวอย่างข้อยกเว้นรันไทม์บางส่วนมีดังนี้:

  1. ArrayIndexOutOfBoundsException: นี่คือข้อยกเว้นรันไทม์เมื่อขนาดอาร์เรย์เกิน องค์ประกอบ.
  2. เลขคณิตข้อยกเว้น:นี่ถือเป็นข้อยกเว้นรันไทม์ด้วยเช่นกันเมื่อมีการดำเนินการทางคณิตศาสตร์ใดๆ ที่ไม่ได้รับอนุญาตภายใต้เงื่อนไขปกติ เช่น การหารตัวเลขด้วย 0 จะทำให้เกิดข้อยกเว้น
  3. ข้อยกเว้น NullPointer: นี่เป็นข้อยกเว้นรันไทม์ซึ่งเกิดขึ้นเมื่อตัวแปรหรือวัตถุเป็นโมฆะเมื่อเราพยายามเข้าถึงสิ่งเดียวกัน นี่เป็นข้อยกเว้นที่พบบ่อยมาก

ข้อผิดพลาด:

ปัญหาเกิดขึ้นเนื่องจากการควบคุมของผู้ใช้หรือโปรแกรมเมอร์ หากเกิดการล้นของสแต็ก อาจเกิดข้อผิดพลาดได้ ตัวอย่างข้อผิดพลาดบางส่วนแสดงไว้ด้านล่าง:

  1. ความผิดพลาด: ข้อผิดพลาดนี้เป็นคลาสย่อยของ Throwable ซึ่งบ่งชี้ถึงปัญหาร้ายแรงที่แอปพลิเคชันไม่สามารถตรวจจับได้
  2. ข้อผิดพลาดในการสร้างอินสแตนซ์: ข้อผิดพลาดนี้เกิดขึ้นเมื่อเราพยายามสร้างอินสแตนซ์ของวัตถุแต่ล้มเหลวในการทำเช่นนั้น
  3. ข้อผิดพลาดภายใน: ข้อผิดพลาดนี้เกิดขึ้นเมื่อมีข้อผิดพลาดเกิดขึ้นจาก JVM เช่น Java เครื่องเสมือน.

ข้อยกเว้นข้อผิดพลาด

เป็นอินสแตนซ์ของคลาส throwable และใช้ในเพจข้อผิดพลาด วิธีการบางส่วนของคลาส throwable ได้แก่:

  • สตริงสาธารณะ getMessage() – ส่งคืนข้อความข้อยกเว้น
  • โยนสาธารณะ getCause() – ส่งคืนสาเหตุของข้อยกเว้น
  • สาธารณะ printStackTracอี() – ส่งคืนสแต็กtrace ของข้อยกเว้น

วิธีจัดการกับข้อยกเว้นใน JSP

นี่คือตัวอย่างวิธีจัดการกับข้อยกเว้นใน JSP:

Exception_example.jsp

<%@ page errorPage="guru_error.jsp" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Exception Guru JSP1</title>
</head>
<body>
<%
 int num = 10;
   if (num == 10)
   {
      throw new RuntimeException("Error condition!!!");
   }
 %>
   </body>
</html>

Guru_error.jsp

<%@ page isErrorPage="true" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Exception Page</title>
</head>
<body>
<p>Guru Exception has occurred</p>
<% exception.printStackTrace(response.getWriter()); %>
</body>
</html>

คำอธิบายของรหัส:

Exception_example.jsp

Code 1 แนว: ที่นี่เรากำลังตั้งค่าหน้าข้อผิดพลาดเป็น guru_error.jsp ซึ่งจะใช้เมื่อข้อผิดพลาดจะถูกเปลี่ยนเส้นทาง

Code 15 แนว: เรากำลังใช้ตัวแปร num และตั้งค่าเป็น 10 และตรวจสอบเงื่อนไขหาก num เป็น 10 จากนั้นให้ส่ง Runtime Exception พร้อมข้อความเป็น Error Condition

Guru_error.jsp

Code 1 แนว: ในที่นี้ เราตั้งค่าแอตทริบิวต์ isErrorPage เป็น true

Code 12 แนว: เกิดข้อผิดพลาดขึ้นในไฟล์ exception_example.jsp โดยใช้ object throw และข้อผิดพลาดนั้นจะแสดงขึ้นที่นี่เนื่องจากแอตทริบิวต์ IsErrorPage ถูกตั้งค่าเป็น true เรากำลังพยายามพิมพ์ stack trace โดยใช้ object exception (ซึ่งเป็น object ที่อนุญาตให้ JSP เข้าถึงข้อมูลข้อผิดพลาดได้)trace ของข้อผิดพลาดที่เกิดขึ้นใน exception_example.jsp

เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้:

จัดการข้อยกเว้นใน JSP

Output:

เกิดข้อผิดพลาดขึ้นซึ่งถูกโยนมาจาก exception_example.jsp โดยใช้ throw object of runtime exception และเราได้โค้ดข้างต้น นอกจากนี้ยังมีการเรียกใช้ guru_error.jsp ด้วย Guru เกิดข้อผิดพลาดขึ้นกับไฟล์นี้

คำถามที่พบบ่อย

ข้อยกเว้นใน JSP แบ่งออกเป็นข้อยกเว้นแบบตรวจสอบได้ (เช่น FileNotFoundException, IOException, SQLException), ข้อยกเว้นขณะรันไทม์ (เช่น ArrayIndexOutOfBounds, ArithmeticException, NullPointerException) และข้อผิดพลาด (เช่น stack overflow และข้อผิดพลาดภายในของ JVM)

แอตทริบิวต์ errorPage ระบุชื่อหน้าเว็บที่ควรส่งต่อไปยังเมื่อเกิดข้อผิดพลาด แอตทริบิวต์ isErrorPage ซึ่งตั้งค่าเป็น true ในหน้าเว็บเป้าหมายนั้น จะทำให้สามารถเข้าถึงอ็อบเจ็กต์โดยปริยายของข้อผิดพลาดและแสดงข้อผิดพลาดได้

อ็อบเจ็กต์ข้อยกเว้นโดยปริยาย (Exception Implicit Object) เป็นอินสแตนซ์ของ Throwable ซึ่งใช้งานได้เฉพาะในหน้าแสดงข้อผิดพลาด (isErrorPage=true) เท่านั้น โดยมีเมธอดต่างๆ เช่น getMessage(), getCause() และ printStack ให้ใช้งานTrace() เพื่อรายงานข้อผิดพลาด

AI สามารถอ่านสแต็กได้ tracเช่น ระบุจุดที่เกิดปัญหา อธิบายสาเหตุที่แท้จริงด้วยภาษาที่เข้าใจง่าย และเสนอแนวทางแก้ไขping นักพัฒนาสามารถแก้ไขข้อผิดพลาดของ JSP ได้เร็วขึ้นระหว่างการทดสอบและการตรวจสอบโค้ด

ใช่แล้ว AI สามารถแนะนำตำแหน่งที่จะเพิ่มบล็อก try-catch หรือ errorPage สร้างหน้าแสดงข้อผิดพลาดที่นำกลับมาใช้ใหม่ได้ และระบุข้อยกเว้นที่ไม่ได้จัดการ ซึ่งจะช่วยเพิ่มความแข็งแกร่งของแอปพลิเคชัน JSP ได้

สรุปโพสต์นี้ด้วย: