Servlets হল Java ওয়েব অ্যাপ্লিকেশনগুলির জন্য একটি গুরুত্বপূর্ণ উপাদান যা HTTP রিকোয়েস্টের ভিত্তিতে ডায়নামিক কন্টেন্ট জেনারেট করে। যেহেতু ওয়েব অ্যাপ্লিকেশনগুলোতে প্রায়ই বিভিন্ন ধরনের এক্সসেপশন (Exception) বা ত্রুটি (Error) দেখা দেয়, তাই সার্ভলেটের মধ্যে Exception Handling এবং Error Pages কনফিগার করা খুবই গুরুত্বপূর্ণ।
এখানে আমরা সার্ভলেটের মাধ্যমে Exception Handling এবং Error Pages কনফিগারেশন করার পদ্ধতি এবং উদাহরণ দেখব।
Exception Handling সার্ভলেট অ্যাপ্লিকেশনে গুরুত্বপূর্ণ, কারণ ওয়েব অ্যাপ্লিকেশনগুলিতে বিভিন্ন কারণে এক্সসেপশন ঘটতে পারে (যেমন ডাটাবেস সংযোগে সমস্যা, ফাইল খোলার সময় ত্রুটি, নাল পয়েন্টার এক্সসেপশন)। সার্ভলেটের মধ্যে এক্সসেপশন হ্যান্ডলিং করার মাধ্যমে, আপনি ব্যবহারকারীর কাছে একটি উপযুক্ত ত্রুটি বার্তা প্রদর্শন করতে পারবেন এবং অ্যাপ্লিকেশনটি ক্র্যাশ না হয়ে কাজ চালিয়ে যেতে পারবে।
try-catch
ব্লক ব্যবহার করে এক্সসেপশন হ্যান্ডলিংআপনি সার্ভলেটে সাধারণভাবে try-catch
ব্লক ব্যবহার করে এক্সসেপশন হ্যান্ডেল করতে পারেন।
উদাহরণ:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// কনটেন্ট টাইপ সেট করা
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// কিছু কোড যা এক্সসেপশন তৈরি করতে পারে
int result = 10 / 0; // ArithmeticException (Division by zero)
out.println("<html><body>");
out.println("<h1>Result: " + result + "</h1>");
out.println("</body></html>");
} catch (ArithmeticException e) {
// এক্সসেপশন হ্যান্ডলিং
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error occurred while performing arithmetic operation.");
}
}
}
এখানে:
try-catch
ব্লকের মধ্যে একটি এক্সসেপশন (Division by zero) ধরা হয়েছে এবং এর পর response.sendError()
ব্যবহার করে একটি কাস্টম ত্রুটি বার্তা পাঠানো হয়েছে।কখনো কখনো, সার্ভলেট থেকে সোজাসুজি এক্সসেপশন হ্যান্ডলিং করা সম্ভব না, বিশেষ করে অ্যাপ্লিকেশন লেভেল এক্সসেপশন। এ ক্ষেত্রে আপনি web.xml
কনফিগারেশন ফাইল ব্যবহার করতে পারেন।
web.xml কনফিগারেশন:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Exception Handling -->
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/error.jsp</location>
</error-page>
</web-app>
এখানে:
<error-page>
ট্যাগের মাধ্যমে ArithmeticException
এর জন্য একটি কাস্টম JSP পেজ (error.jsp
) সেট করা হয়েছে। যদি কোনো ArithmeticException
ঘটে, তবে সেই পেজে ব্যবহারকারীকে পাঠানো হবে।Error Pages হল এমন পেজ যা ব্যবহারকারীকে ওয়েব অ্যাপ্লিকেশনে কোনো ত্রুটি ঘটলে দেখানো হয়। সাধারণত ওয়েব সার্ভারে HTTP স্ট্যাটাস কোডের ভিত্তিতে Error Pages কনফিগার করা হয়। সার্ভলেটে এই Error Pages কনফিগার করা যায়।
web.xml ফাইলে আপনি বিভিন্ন HTTP স্ট্যাটাস কোডের জন্য Error Pages কনফিগার করতে পারেন, যেমন 404 (Not Found) বা 500 (Internal Server Error)।
web.xml কনফিগারেশন উদাহরণ:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Error Page for 404 - Not Found -->
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
<!-- Error Page for 500 - Internal Server Error -->
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>
এখানে:
notfound.jsp
পেজটি দেখানো হবে।error.jsp
পেজটি দেখানো হবে।notfound.jsp এবং error.jsp এর মধ্যে কাস্টম ত্রুটি বার্তা যুক্ত করা যায়।
notfound.jsp উদাহরণ:
<html>
<head><title>404 - Not Found</title></head>
<body>
<h2>The page you are looking for is not available.</h2>
</body>
</html>
error.jsp উদাহরণ:
<html>
<head><title>500 - Internal Server Error</title></head>
<body>
<h2>Sorry, something went wrong on our end. Please try again later.</h2>
</body>
</html>
এখানে:
Servlet Exception Handling এবং Error Pages সার্ভলেট অ্যাপ্লিকেশনের মধ্যে ত্রুটি পরিচালনার জন্য গুরুত্বপূর্ণ বৈশিষ্ট্য। doGet()
, doPost()
ইত্যাদি মেথডের মধ্যে এক্সসেপশন হ্যান্ডলিং করা যেতে পারে, যাতে সার্ভিসের ত্রুটি সঠিকভাবে হ্যান্ডেল করা যায় এবং ব্যবহারকারীদের উপযুক্ত ত্রুটি বার্তা প্রদান করা যায়। এছাড়া, web.xml কনফিগারেশন ফাইল ব্যবহার করে আপনি HTTP স্ট্যাটাস কোডের ভিত্তিতে কাস্টম Error Pages তৈরি করতে পারেন যা সার্ভিস ব্যবহারের সময় উপকারী এবং পরিষ্কার তথ্য প্রদান করে।
Exception Handling হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা সফটওয়্যার অ্যাপ্লিকেশনে ত্রুটি বা ব্যতিক্রম পরিস্থিতি সঠিকভাবে মোকাবেলা করে, এবং অ্যাপ্লিকেশনের স্থিতিশীলতা বজায় রাখতে সহায়তা করে। সার্ভলেটস (Servlets) এর ক্ষেত্রে, Exception Handling খুবই গুরুত্বপূর্ণ কারণ ওয়েব অ্যাপ্লিকেশনগুলি প্রায়ই ক্লায়েন্টের কাছ থেকে ইনপুট নেয়ার সময় বিভিন্ন ধরনের ত্রুটি সম্মুখীন হতে পারে (যেমন ফর্ম ইনপুট ভুল, ডেটাবেস কনফিগারেশন সমস্যা, নেটওয়ার্ক সমস্যা ইত্যাদি)। যদি ত্রুটিগুলোর সঠিকভাবে হ্যান্ডেল না করা হয়, তবে অ্যাপ্লিকেশন ক্র্যাশ হতে পারে বা ব্যবহারকারীকে অপর্যাপ্ত বা অপ্রত্যাশিত রেসপন্স প্রদর্শিত হতে পারে।
Servlets এর মধ্যে Exception Handling এর মাধ্যমে অ্যাপ্লিকেশনটি ত্রুটি সাপেক্ষ অবস্থায়ও সঠিকভাবে কাজ করতে পারে এবং ব্যবহারকারীদের কাছে সঠিক ও পরিষ্কার রেসপন্স প্রদান করতে পারে।
Exception Handling এর মাধ্যমে, সার্ভলেট সঠিকভাবে ত্রুটির প্রেক্ষাপটে প্রক্রিয়া চালিয়ে যেতে সক্ষম হয়। ত্রুটির কারণে সার্ভলেটের কার্যক্রম ব্যাহত হলে তা ব্যাবহারকারীকে স্পষ্টভাবে জানানোর জন্য উপযুক্ত তথ্য এবং মেসেজ প্রদান করা উচিত, যাতে তারা বুঝতে পারে কী কারণে সমস্যা হয়েছে। এটি ওয়েব অ্যাপ্লিকেশনের রিলায়েবিলিটি বাড়ায়।
সার্ভলেটে Exception Handling কেবলমাত্র সিস্টেমের স্থিতিশীলতা বজায় রাখতে সাহায্য করে না, বরং এটি ব্যবহারকারীর অভিজ্ঞতাও উন্নত করে। উদাহরণস্বরূপ, যখন কোনো ত্রুটি ঘটে, তখন সঠিক error message বা user-friendly message দেখানো হয়, যা ব্যবহারকারীকে সমস্যাটি বুঝতে সহায়তা করে এবং পরবর্তী পদক্ষেপ নিতে উৎসাহিত করে।
Exception Handling ওয়েব অ্যাপ্লিকেশনে ত্রুটির কার্যকরী লগিং এবং ডিবাগিং সক্ষম করে। সার্ভলেটের মধ্যে ঘটে যাওয়া ত্রুটিগুলি লগে রেকর্ড করা হয়, যা পরে সিস্টেমের নিরাপত্তা বা কার্যকারিতা পর্যবেক্ষণের কাজে আসে।
Servlet এ Exception Handling সাধারণত তিনটি প্রধান পদ্ধতির মাধ্যমে করা হয়:
সার্ভলেটের মধ্যে try-catch ব্লক ব্যবহার করে, এক্সসেপশনগুলিকে ক্যাচ করা এবং সঠিকভাবে হ্যান্ডেল করা যায়। এই পদ্ধতি ব্যতিক্রমি পরিস্থিতির জন্য প্রোগ্রামিং লজিক সরাসরি ক্লাসের মধ্যে রাখে।
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ExceptionHandlingServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// যেকোনো সমস্যা হতে পারে এমন কোড
int result = 10 / 0; // ArithmeticException: Divide by zero
response.getWriter().println("Result: " + result);
} catch (ArithmeticException e) {
// Catch the exception and send error message
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2>Error occurred: Division by zero</h2>");
out.println("</body></html>");
}
}
}
এখানে:
Servlet কনটেইনারে সেন্ট্রালাইজড ত্রুটি হ্যান্ডলিং কনফিগার করার জন্য web.xml কনফিগারেশন ফাইল ব্যবহার করা যায়। এটি ত্রুটি ঘটলে নির্দিষ্ট error-page কনফিগারেশনের মাধ্যমে ব্যবহারকারীদের একটি নির্দিষ্ট error page দেখানোর ব্যবস্থা করে।
<web-app>
<!-- Error page configuration -->
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/errorPage.jsp</location>
</error-page>
<!-- Default error page -->
<error-page>
<error-code>500</error-code>
<location>/errorPage.jsp</location>
</error-page>
</web-app>
এখানে:
/errorPage.jsp
দেখানো হবে।/errorPage.jsp
এ রিডাইরেক্ট হবে।<html>
<body>
<h2>An error has occurred: Please try again later.</h2>
</body>
</html>
এখানে:
Java 6 থেকে @WebServlet অ্যানোটেশন ব্যবহার করে সার্ভলেটের কনফিগারেশন করা হয়। আপনি অ্যানোটেশন ব্যবহার করে সার্ভলেটের জন্য error-page কনফিগারেশন করতে পারেন।
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/errorDemo")
public class ErrorHandlingServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
int result = 10 / 0; // ArithmeticException: Division by zero
response.getWriter().println("Result: " + result);
} catch (ArithmeticException e) {
// Redirect to error page
request.setAttribute("errorMessage", "Division by zero error.");
request.getRequestDispatcher("/errorPage.jsp").forward(request, response);
}
}
}
এখানে:
/errorDemo
URL প্যাটার্নে রিকোয়েস্ট আসলে ErrorHandlingServlet কল হবে।Exception Handling ওয়েব অ্যাপ্লিকেশনকে সুরক্ষিত রাখে কারণ এটি ব্যবহারকারীদের অপ্রত্যাশিত ত্রুটি বার্তা দেখাতে বাধা দেয়। এর মাধ্যমে অ্যাপ্লিকেশনটি ত্রুটির তথ্য ছড়িয়ে পড়া বা নিরাপত্তা ঝুঁকি থেকে রক্ষা পায়।
এটি ব্যবহারকারীর জন্য একটি পরিষ্কার এবং প্রফেশনাল অভিজ্ঞতা তৈরি করে, কারণ তারা স্পষ্টভাবে জানে কী কারণে ত্রুটি ঘটেছে এবং কীভাবে এটি সমাধান করা যেতে পারে।
Exception Handling লগিং এবং ডিবাগিং প্রক্রিয়া সহজ করে, কারণ সব ত্রুটি সিস্টেমে রেকর্ড করা হয় এবং যথাযথ পদ্ধতিতে হ্যান্ডেল করা হয়। এটি সমস্যা চিহ্নিত করার এবং পরবর্তী পদক্ষেপ নিতে সহায়ক হয়।
Servlets এ Exception Handling অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ওয়েব অ্যাপ্লিকেশনের স্থিতিশীলতা বজায় রাখতে সাহায্য করে এবং ব্যবহারকারীর অভিজ্ঞতাও উন্নত করে। try-catch ব্লক ব্যবহার করে, web.xml ফাইলে error-page কনফিগারেশন বা @WebServlet অ্যানোটেশন ব্যবহার করে সঠিকভাবে ত্রুটি হ্যান্ডেল করা যেতে পারে। সঠিক Exception Handling এর মাধ্যমে, সার্ভলেট অ্যাপ্লিকেশনগুলো ত্রুটি পরিস্থিতিতেও সঠিকভাবে কাজ করতে সক্ষম হয় এবং ব্যবহারকারীকে পরিষ্কার ও প্রফেশনাল বার্তা প্রদান করতে পারে।
ServletConfig হল একটি অবজেক্ট যা সার্ভলেটের কনফিগারেশন এবং ইনিশিয়ালাইজেশন ডেটা ধারণ করে। এটি সাধারণত সার্ভলেটের কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয় এবং সার্ভলেট কন্টেইনারের মাধ্যমে ব্যবহৃত হয়। Error Page Configuration একটি ওয়েব অ্যাপ্লিকেশনে বিশেষ ধরনের কনফিগারেশন যা একটি নির্দিষ্ট ত্রুটি (error) ঘটলে ব্যবহারকারীর কাছে একটি কাস্টম ত্রুটি পৃষ্ঠা প্রদর্শন করে। এটি web.xml ফাইলে কনফিগার করা হয় এবং সার্ভলেট কনটেইনার ত্রুটি হলে সেই পৃষ্ঠাটি রেন্ডার করে।
এটি সাধারণত web.xml ফাইলে কনফিগার করা হয়। যখন একটি নির্দিষ্ট HTTP স্ট্যাটাস কোড বা Exception ঘটে, তখন এই কনফিগারেশন অনুযায়ী সার্ভলেট বা ওয়েব পৃষ্ঠাটি ব্যবহারকারীর কাছে প্রদর্শিত হবে।
web.xml
ফাইলের মাধ্যমে কাস্টম error page কনফিগার করা হয়। এটি বিশেষভাবে HTTP স্ট্যাটাস কোড বা নির্দিষ্ট exception অনুযায়ী নির্ধারিত error page কনফিগার করে।
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Error page for 404 Not Found -->
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<!-- Error page for 500 Internal Server Error -->
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
</web-app>
এখানে:
/error404.jsp
পৃষ্ঠা এবং 500 ত্রুটির জন্য /error500.jsp
পৃষ্ঠা প্রদর্শন করার জন্য কনফিগার করা হয়েছে।<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Error page for NullPointerException -->
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/nullPointerError.jsp</location>
</error-page>
</web-app>
এখানে:
/nullPointerError.jsp
পৃষ্ঠাটি কনফিগার করা হয়েছে, যখন কোনো NullPointerException ঘটবে।ServletConfig মূলত সার্ভলেটের ইনিশিয়ালাইজেশন কনফিগারেশন পরিচালনা করে, তবে ত্রুটি পৃষ্ঠার কনফিগারেশন সরাসরি ServletConfig দিয়ে করা যায় না। তবে, সার্ভলেটের মধ্যে Error Page কনফিগারেশন এবং Exception Handling করার জন্য try-catch block বা doGet()
বা doPost()
মেথডে কাস্টম ত্রুটি পৃষ্ঠার জন্য রিডাইরেক্ট বা ফরওয়ার্ডিং ব্যবহার করা যেতে পারে।
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CustomErrorServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
// Custom initialization if needed
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// Simulate an error
int result = 10 / 0; // This will throw ArithmeticException
} catch (ArithmeticException e) {
// Redirect to custom error page
response.sendRedirect("errorPage.jsp");
}
}
@Override
public void destroy() {
// Cleanup code
}
}
এখানে:
errorPage.jsp
পৃষ্ঠায় পাঠিয়ে দেয়া হচ্ছে।কাস্টম ত্রুটি পৃষ্ঠা তৈরি করতে আপনি JSP ফাইল ব্যবহার করতে পারেন, যা ত্রুটির ডিটেইল এবং ক্লায়েন্টকে প্রয়োজনীয় বার্তা দেখায়।
<!DOCTYPE html>
<html>
<head>
<title>Error 404 - Not Found</title>
</head>
<body>
<h2>Error 404: The page you are looking for cannot be found.</h2>
<p>It seems that the page you are trying to access does not exist. Please check the URL and try again.</p>
<a href="index.jsp">Go to Homepage</a>
</body>
</html>
এখানে:
ServletConfig মূলত সার্ভলেটের ইনিশিয়ালাইজেশন সম্পর্কিত কনফিগারেশন পরিচালনা করে, তবে Error Pages কনফিগারেশন সাধারাণত web.xml
ফাইলের মাধ্যমে করা হয়। Error Pages বিভিন্ন HTTP স্ট্যাটাস কোড এবং exception types অনুযায়ী কাস্টম পৃষ্ঠা নির্ধারণ করতে সাহায্য করে, যা ইউজারের জন্য উন্নত অভিজ্ঞতা প্রদান করে এবং ডিবাগিংকে সহজ করে তোলে।
Custom Exception হচ্ছে একটি ব্যবহারকারী-সংজ্ঞায়িত এক্সেপশন যা আপনার অ্যাপ্লিকেশনে নির্দিষ্ট সমস্যাগুলোর জন্য তৈরি করা হয়। যখন Java এর ডিফল্ট এক্সেপশন ক্লাস যেমন IOException
, SQLException
, বা NullPointerException
আপনার প্রয়োজন পূরণ না করে, তখন আপনি একটি কাস্টম এক্সেপশন তৈরি করতে পারেন যা আপনার অ্যাপ্লিকেশনের নির্দিষ্ট ত্রুটি পরিস্থিতি সমাধান করবে। কাস্টম এক্সেপশন তৈরি করার মাধ্যমে আপনি আপনার কোডে আরও পরিষ্কার ত্রুটি হ্যান্ডলিং এবং ভালো কনটেক্সট প্রদান করতে পারেন।
Java তে কাস্টম এক্সেপশন তৈরি করতে আপনাকে একটি নতুন ক্লাস তৈরি করতে হয় যা Exception
বা RuntimeException
ক্লাসকে ইনহেরিট করে।
Exception
অথবা RuntimeException
এর বেস ক্লাস থেকে ইনহেরিট করবে।ধরা যাক, আমরা একটি কাস্টম এক্সেপশন তৈরি করতে চাই যেটি আমাদের ওয়েব অ্যাপ্লিকেশনে নেগেটিভ ইনপুট ভ্যালু পাওয়ার সময় ব্যবহার হবে। আমরা "InvalidInputException" নামক কাস্টম এক্সেপশন তৈরি করব।
// Custom Exception class
public class InvalidInputException extends Exception {
// Constructor with custom error message
public InvalidInputException(String message) {
super(message);
}
// Optionally, you can provide a constructor with both message and cause
public InvalidInputException(String message, Throwable cause) {
super(message, cause);
}
}
এখানে:
InvalidInputException
: এটি একটি কাস্টম এক্সেপশন ক্লাস যা Exception
থেকে ইনহেরিট করেছে।super(message)
: এর মাধ্যমে কাস্টম মেসেজকে প্যারেন্ট ক্লাস (Exception) এর কনস্ট্রাক্টরে পাস করা হয়।একটি কাস্টম এক্সেপশন হ্যান্ডল করতে হলে আপনাকে try-catch
ব্লক ব্যবহার করতে হবে, যেখানে আপনি সেই এক্সেপশনের ধরণ ক্যাচ করবেন এবং প্রাসঙ্গিকভাবে সেই ত্রুটি পরিচালনা করবেন।
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
// Servlet class handling custom exception
public class InputValidationServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String input = request.getParameter("userInput");
try {
// Simulate an input validation
validateInput(input);
response.getWriter().write("Input is valid!");
} catch (InvalidInputException e) {
// Handle the custom exception
response.getWriter().write("Error: " + e.getMessage());
}
}
// Method to validate input
private void validateInput(String input) throws InvalidInputException {
if (input == null || input.isEmpty() || Integer.parseInt(input) < 0) {
// Throwing the custom exception with an error message
throw new InvalidInputException("Input cannot be negative or empty!");
}
}
}
এখানে:
validateInput(input)
: এই মেথডে ইউজারের ইনপুট ভ্যালু যাচাই করা হচ্ছে। যদি ইনপুট নেগেটিভ হয় বা শূন্য থাকে, তবে কাস্টম এক্সেপশন InvalidInputException
থ্রো করা হয়।catch (InvalidInputException e)
: কাস্টম এক্সেপশন ক্যাচ করার মাধ্যমে সেই এক্সেপশনকে হ্যান্ডল করা হচ্ছে এবং ত্রুটির বার্তা ইউজারকে প্রদর্শন করা হচ্ছে।<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>InputValidationServlet</servlet-name>
<servlet-class>com.example.InputValidationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InputValidationServlet</servlet-name>
<url-pattern>/validateInput</url-pattern>
</servlet-mapping>
</web-app>
এখানে, InputValidationServlet সার্ভলেট /validateInput
পাথের মাধ্যমে অ্যাক্সেস করা যাবে।
Custom Exception তৈরি এবং হ্যান্ডলিং সার্ভলেটস এবং ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে একটি গুরুত্বপূর্ণ টুল। এটি ডেভেলপারদের অ্যাপ্লিকেশনের নির্দিষ্ট ত্রুটিগুলোর জন্য কাস্টম এক্সেপশন তৈরি করতে এবং সেই অনুযায়ী সেই এক্সেপশনগুলি কার্যকরভাবে হ্যান্ডল করতে সহায়তা করে। কাস্টম এক্সেপশন ব্যবহার করে আপনি কোডের পরিষ্কারতা বৃদ্ধি করতে পারেন এবং ত্রুটি ব্যবস্থাপনায় আরও বেশি নিয়ন্ত্রণ এবং নমনীয়তা পেতে পারেন।
Servlets Java ওয়েব অ্যাপ্লিকেশনগুলিতে খুব গুরুত্বপূর্ণ ভূমিকা পালন করে এবং HTTP রিকোয়েস্ট ও রেসপন্স প্রসেসিংয়ের মাধ্যমে ডাইনামিক কন্টেন্ট তৈরি করে। তবে, প্রোগ্রামিংয়ের সময়ে নানা ধরণের ত্রুটি (exception) ঘটতে পারে যা অ্যাপ্লিকেশনের সঠিক কার্যকারিতাকে প্রভাবিত করতে পারে। এ কারণে, Exception Handling খুবই গুরুত্বপূর্ণ, বিশেষত সার্ভলেট অ্যাপ্লিকেশনগুলোতে।
Servlet Exception Handling হল একটি প্রক্রিয়া যার মাধ্যমে সার্ভলেট ফিল্ডে বা জাভা কোডে ঘটতে থাকা ত্রুটিগুলিকে সঠিকভাবে ক্যাচ এবং ম্যানেজ করা হয়, যাতে অ্যাপ্লিকেশনটি নিরাপদ এবং কার্যকরী থাকে।
এই টিউটোরিয়ালে আমরা Servlet Exception Handling এর একটি সাধারণ উদাহরণ দেখব।
Servlet Exception Handling হল সেই প্রক্রিয়া যেখানে আমরা একটি সার্ভলেটের মধ্যে যে কোনো ত্রুটি বা ব্যতিক্রম (exception) ঘটলে সেগুলিকে সঠিকভাবে ধরে এবং প্রক্রিয়া করে ইউজারকে উপযুক্ত রেসপন্স প্রদান করি। সার্ভলেটে ত্রুটি হ্যান্ডলিং দুটি প্রধান উপায়ে করা যেতে পারে:
সার্ভলেটের মধ্যে try-catch ব্লক ব্যবহার করে ব্যতিক্রম বা exception হ্যান্ডল করা হয়। সাধারণত, যখন কোনো কোডে ত্রুটি হয়, তখন সেই ত্রুটির জন্য একটি catch
ব্লক তৈরি করা হয় যাতে ত্রুটিটি লগ করা বা ইউজারকে একটি উপযুক্ত মেসেজ দেওয়া যায়।
ধরা যাক, একটি সার্ভলেট যা ডাটাবেস অপারেশন বা কোনো নির্দিষ্ট কাজ করতে গিয়ে ত্রুটি ঘটতে পারে।
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/processData")
public class DataProcessingServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// কিছু ডেটা প্রসেসিং
String data = null;
// এখানে NullPointerException হবে
int length = data.length();
response.getWriter().println("Data length: " + length);
} catch (NullPointerException e) {
// exception caught and handled
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().println("<h2>An error occurred: " + e.getMessage() + "</h2>");
e.printStackTrace(); // logging the error details
}
}
}
এখানে:
NullPointerException
ঘটতে পারে।e.printStackTrace()
ত্রুটির ডিটেইল লগে প্রিন্ট করা হয়েছে।এইভাবে try-catch ব্লক ব্যবহার করে সার্ভলেটে ত্রুটি হ্যান্ডলিং করা যায় এবং ইউজারকে উপযুক্ত রেসপন্স প্রদান করা হয়।
এছাড়া, সার্ভলেটের জন্য বিভিন্ন error pages কনফিগার করা যায় web.xml
ফাইলে। এতে আমরা নির্দিষ্ট ত্রুটির জন্য একটি নির্দিষ্ট পেজ সেট করতে পারি। যেমন, 404 বা 500 ত্রুটির জন্য কাস্টম পেজ তৈরি করা যেতে পারে।
web.xml
ফাইলে আপনি এইভাবে ত্রুটি পেজ কনফিগার করতে পারেন:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Error page for 404 Not Found -->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<!-- Error page for 500 Internal Server Error -->
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
</web-app>
এখানে:
<error-page>
ট্যাগটি ব্যবহার করে 404 এবং 500 ত্রুটির জন্য কাস্টম পেজের পাথ দেওয়া হয়েছে।<!DOCTYPE html>
<html>
<head>
<title>404 - Page Not Found</title>
</head>
<body>
<h1>Oops! The page you are looking for is not available.</h1>
<p>Please check the URL or return to the <a href="/">home page</a>.</p>
</body>
</html>
এখানে:
<!DOCTYPE html>
<html>
<head>
<title>500 - Internal Server Error</title>
</head>
<body>
<h1>Something went wrong on the server. Please try again later.</h1>
</body>
</html>
এখানে:
আপনি সার্ভলেটে কাস্টম এক্সসেপশন হ্যান্ডলারও তৈরি করতে পারেন। সার্ভলেটের @WebServlet
অ্যানোটেশন ব্যবহার করে আপনি কাস্টম এক্সসেপশন ম্যানেজ করতে পারেন।
@WebServlet("/customError")
public class CustomErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// কিছু ভুল কোড
int result = 10 / 0; // ArithmeticException
} catch (ArithmeticException e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().println("<h2>Custom Error: Division by Zero!</h2>");
}
}
}
এখানে:
Servlet Exception Handling হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা সার্ভলেট অ্যাপ্লিকেশনে ত্রুটি বা ব্যতিক্রম ঘটলে সেটি সঠিকভাবে হ্যান্ডল করতে সাহায্য করে। সার্ভলেটে try-catch ব্লক, custom error pages কনফিগারেশন এবং web.xml
ত্রুটি পেজ কনফিগারেশন ব্যবহার করে Exception Handling করা যায়। এভাবে সার্ভলেটের মধ্যে ঘটতে থাকা ত্রুটিগুলিকে সঠিকভাবে হ্যান্ডল করে অ্যাপ্লিকেশনটি আরও কার্যকরী এবং নিরাপদ করা যায়।
Read more