استثناء التعامل في JSP يتم عبر صفحات استثناء JSP.
التعامل مع الاستثناءات في JSP
قبل فترة من الزمن، قمت بكتابة مقال حول التعامل مع استثناء Servlet ولماذا نحتاج إليه. نفس التفسير ينطبق أيضًا على صفحات JSP، ولهذا السبب يوفر Java EE نهجًا واضحًا للتعامل مع الاستثناءات في JSP باستخدام صفحات الخطأ في JSP. للتعامل مع الاستثناءات التي تتم طرحها بواسطة صفحة JSP، كل ما نحتاجه هو صفحة خطأ وتعريف صفحة الخطأ في JSP باستخدام توجيه صفحة JSP.
صفحة خطأ JSP
لإنشاء صفحة خطأ JSP، نحتاج إلى تعيين قيمة خاصية isErrorPage في توجيه الصفحة إلى true، ثم يمكننا الوصول إلى كائن jsp الضمني في JSP واستخدامه لإرسال رسالة خطأ مخصصة إلى العميل.
تكوين صفحة خطأ JSP
نحتاج إلى تعيين سمة الصفحة errorPage لتحديد صفحة JSP التي ستتعامل مع أي استثناء يتم إلقاؤه بواسطة طريقة خدمة JSP. عند ترجمة صفحة خطأ JSP إلى كود سيرفلت، فإنها تمتد من org.apache.jasper.runtime.HttpJspBase
في Tomcat.
تكوين وصف نشر صفحة الخطأ
في معظم الأحيان، لدينا صفحة خطأ مشتركة نريد استخدامها لجميع صفحات JSP، لذلك بدلاً من تكوينها في جميع صفحات JSP بشكل فردي، يمكننا تعريف صفحة الخطأ في ملف web.xml باستخدام عنصر error-page. يمكننا تكوين صفحة خطأ JSP لمعالجة رموز الخطأ الأخرى مثل 404 أيضًا. دعنا نرى كيف تتناسب كل هذه العناصر معًا في تطبيق ويب. سنقوم بإنشاء تطبيق ويب بسيط لمعالجة الاستثناءات JSP يبدو تركيب مشروعه مثل الصورة أدناه. نقطة الدخول إلى التطبيق هي
index.jsp
وهو موضح أدناه.
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<form action="login.jsp" method="post">
<strong>User ID</strong>:<input type="text" name="id"><br>
<strong>Password</strong>:<input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
عندما نقوم بإرسال النموذج، سيتم إرسال الطلب إلى login.jsp
، والكود كما يلي.
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII" errorPage="error.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>User Home Page</title>
</head>
<body>
<%
String user = request.getParameter("id");
String pwd = request.getParameter("password");
if(user == null || "".equals(user) || pwd == null || "".equals(pwd)){
throw new ServletException("Mandatory Parameter missing");
}
%>
<%-- do some DB processing, not doing anything for simplicity --%>
Hi <%=user %>
</body>
</html>
لاحظ أنه إذا كانت المعلمات المدخلة فارغة أو فارغة، فإنه يقذف ServletException
مع رسالة مناسبة وتم تعريف errorPage
كـ error.jsp
والذي يبدو كما يلي.
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<% if(response.getStatus() == 500){ %>
<font color="red">Error: <%=exception.getMessage() %></font><br>
<%-- include login page --%>
<%@ include file="index.jsp"%>
<%}else {%>
Hi There, error code is <%=response.getStatus() %><br>
Please go to <a href="/index.jsp">home page</a>
<%} %>
</body>
</html>
لاحظ قيمة سمة توجيه الصفحة isErrorPage
هي true
. عندما تقذف موارد التطبيق استثناءات، يكون رمز الخطأ 500، تم كتابة الكود للتعامل مع استثناءات مستوى التطبيق وأخطاء مثل 404 – الصفحة غير موجودة. كما لاحظ استخدام توجيه الإدراج لتقديم صفحة تسجيل الدخول للمستخدم في حالة حدوث أي استثناء. فيما يلي ملف web.xml حيث نقوم بتعريف صفحة الخطأ للتطبيق.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>JSPExceptionHandling</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
</web-app>
الآن عند تشغيل التطبيق أعلاه، نحصل على الصفحات التالية كاستجابة. صفحة تسجيل الدخول صفحة خطأ JSP للاستثناء
صفحة خطأ JSP لرمز الخطأ 404
هذا كل شيء بخصوص معالجة الاستثناءات في صفحات JSP، فمن السهل جدًا تنفيذها ويجب علينا استخدامها للتأكد من معالجة جميع الاستثناءات ورموز الأخطاء وإرسال استجابة مفيدة إلى العميل بدلاً من صفحة الخطأ الافتراضية للحاوية.
Source:
https://www.digitalocean.com/community/tutorials/jsp-exception-handling-jsp-error-page