JSP - अपवाद हैंडलिंग

इस पाठ में। हम चर्चा करेंगे कि कैसे JSP में अपवादों को संभालना है। जब आप एक JSP कोड लिख रहे हैं, तो आप कोडिंग त्रुटियां कर सकते हैं जो कोड के किसी भी भाग में हो सकती हैं। आपके JSP कोड में निम्न प्रकार की त्रुटियां हो सकती हैं -

अपवादों की जाँच की

एक जाँच अपवाद एक अपवाद है जो आमतौर पर एक उपयोगकर्ता त्रुटि या एक समस्या है जिसे प्रोग्रामर द्वारा पूर्वाभास नहीं किया जा सकता है। उदाहरण के लिए, यदि कोई फ़ाइल खोली जानी है, लेकिन फ़ाइल नहीं मिल रही है, तो अपवाद होता है। संकलन के समय इन अपवादों को अनदेखा नहीं किया जा सकता है।

रनटाइम अपवाद

एक रनटाइम अपवाद एक अपवाद है जिसे संभवतः प्रोग्रामर द्वारा टाला जा सकता था। चेक किए गए अपवादों के विपरीत, कंप्लीशन के समय रनटाइम अपवादों की अनदेखी की जाती है।

त्रुटियाँ

ये अपवाद नहीं हैं, लेकिन उपयोगकर्ता या प्रोग्रामर के नियंत्रण से परे उत्पन्न होने वाली समस्याएं। आपके कोड में त्रुटियों को आमतौर पर नजरअंदाज कर दिया जाता है क्योंकि आप किसी त्रुटि के बारे में शायद ही कुछ कर सकते हैं। उदाहरण के लिए, यदि स्टैक ओवरफ्लो होता है, तो एक त्रुटि उत्पन्न होगी। संकलन के समय उन्हें भी नजरअंदाज किया जाता है।

हम आपके JSP कोड में होने वाले रन टाइम अपवाद / त्रुटि को संभालने के तरीकों पर आगे चर्चा करेंगे।

अपवाद वस्तु का उपयोग करना

अपवाद ऑब्जेक्ट थ्रोएबल (जैसे, java.lang। NullPointerException) के एक उपवर्ग का एक उदाहरण है और केवल त्रुटि पृष्ठों में उपलब्ध है। निम्न तालिका थ्रेडेबल वर्ग में उपलब्ध महत्वपूर्ण विधियों को सूचीबद्ध करती है।

क्र.सं. तरीके और विवरण
1

public String getMessage()

अपवाद के बारे में एक विस्तृत संदेश देता है। यह संदेश थ्रेडेबल कंस्ट्रक्टर में आरंभिक है।

2

public Throwable getCause()

अपवाद का कारण देता है जैसा कि एक थ्रोबेबल ऑब्जेक्ट द्वारा दर्शाया गया है।

3

public String toString()

के परिणाम के साथ समाप्‍त वर्ग का नाम देता है getMessage()

4

public void printStackTrace()

के परिणाम प्रिंट करता है toString() स्टैक ट्रेस के साथ System.err, त्रुटि आउटपुट स्ट्रीम।

5

public StackTraceElement [] getStackTrace()

स्टैक ट्रेस पर प्रत्येक तत्व युक्त एक सरणी देता है। इंडेक्स 0 का तत्व कॉल स्टैक के शीर्ष का प्रतिनिधित्व करता है, और सरणी में अंतिम तत्व कॉल स्टैक के निचले भाग में विधि का प्रतिनिधित्व करता है।

6

public Throwable fillInStackTrace()

स्टैक ट्रेस में किसी भी पिछली जानकारी को जोड़कर, वर्तमान स्टैक ट्रेस के साथ इस थ्रेडेबल ऑब्जेक्ट के स्टैक ट्रेस को भरता है।

JSP आपको निर्दिष्ट करने का विकल्प देता है Error Pageप्रत्येक JSP के लिए। जब भी पृष्ठ एक अपवाद फेंकता है, JSP कंटेनर स्वचालित रूप से त्रुटि पृष्ठ को आमंत्रित करता है।

निम्नलिखित एक के लिए एक त्रुटि पृष्ठ को निर्दिष्ट करने के लिए एक उदाहरण है main.jsp। त्रुटि पृष्ठ सेट करने के लिए, का उपयोग करें<%@ page errorPage = "xxx" %> निर्देश।

<%@ page errorPage = "ShowError.jsp" %>

<html>
   <head>
      <title>Error Handling Example</title>
   </head>
   
   <body>
      <%
         // Throw an exception to invoke the error page
         int x = 1;
         
         if (x == 1) {
            throw new RuntimeException("Error condition!!!");
         }
      %>
   </body>
</html>

अब हम एक त्रुटि हैंडलिंग JSP ShowError.jsp लिखेंगे, जो नीचे दिया गया है। ध्यान दें कि त्रुटि-हैंडलिंग पृष्ठ में निर्देश शामिल है<%@ page isErrorPage = "true" %>। यह निर्देश अपवाद उदाहरण चर उत्पन्न करने के लिए JSP संकलक का कारण बनता है।

<%@ page isErrorPage = "true" %>

<html>
   <head>
      <title>Show Error Page</title>
   </head>
   
   <body>
      <h1>Opps...</h1>
      <p>Sorry, an error occurred.</p>
      <p>Here is the exception stack trace: </p>
      <pre><% exception.printStackTrace(response.getWriter()); %></pre>
   </body>
</html>

तक पहुंच main.jsp, आपको निम्नलिखित की तरह कुछ आउटपुट प्राप्त होगा -

java.lang.RuntimeException: Error condition!!!
......

Opps...
Sorry, an error occurred.

Here is the exception stack trace:

त्रुटि पेज के लिए JSTL टैग का उपयोग करना

त्रुटि पृष्ठ लिखने के लिए आप JSTL टैग का उपयोग कर सकते हैं ShowError.jsp। इस पृष्ठ में ऊपर दिए गए उदाहरण के रूप में लगभग वही तर्क है, जिसमें बेहतर संरचना और अधिक जानकारी है -

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@page isErrorPage = "true" %>

<html>
   <head>
      <title>Show Error Page</title>
   </head>
   
   <body>
      <h1>Opps...</h1>
      <table width = "100%" border = "1">
         <tr valign = "top">
            <td width = "40%"><b>Error:</b></td>
            <td>${pageContext.exception}</td>
         </tr>
            
         <tr valign = "top">
            <td><b>URI:</b></td>
            <td>${pageContext.errorData.requestURI}</td>
         </tr>
            
         <tr valign = "top">
            <td><b>Status code:</b></td>
            <td>${pageContext.errorData.statusCode}</td>
         </tr>
            
         <tr valign = "top">
            <td><b>Stack trace:</b></td>
            <td>
               <c:forEach var = "trace" 
                  items = "${pageContext.exception.stackTrace}">
                  <p>${trace}</p>
               </c:forEach>
            </td>
         </tr>
      </table>

   </body>
</html>

Main.jsp पर पहुँचें, निम्नलिखित उत्पन्न होगा -

Opps...

Error:

java.lang.RuntimeException: Error condition!!!

URI:

/main.jsp

Status code:

500

Stack trace:

org.apache.jsp.main_jsp._jspService(main_jsp.java:65)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

ट्राई करिए ... कैच ब्लॉक

यदि आप एक ही पृष्ठ के भीतर त्रुटियों को संभालना चाहते हैं और त्रुटि पृष्ठ को हटाने के बजाय कुछ कार्रवाई करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं try....catch खंड मैथा।

निम्नलिखित एक सरल उदाहरण है जो दिखाता है कि कोशिश कैसे करें ... ब्लॉक को पकड़ें। हमें निम्नलिखित कोड main.jsp में डालते हैं -

<html>
   <head>
      <title>Try...Catch Example</title>
   </head>
   
   <body>
      <%
         try {
            int i = 1;
            i = i / 0;
            out.println("The answer is " + i);
         }
         catch (Exception e) {
            out.println("An exception occurred: " + e.getMessage());
         }
      %>
   </body>
</html>

Main.jsp पर पहुँचें, यह निम्नलिखित की तरह कुछ आउटपुट उत्पन्न करना चाहिए -

An exception occurred: / by zero