1.1 ইন্টারফেস সার্ভলেট
আজ আমরা একটি নতুন এবং আকর্ষণীয় বিষয় শুরু করছি - servlets । এটি জাভাতে সার্লেটের সংযোজন ছিল যার ফলে জাভা বড় সার্ভার অ্যাপ্লিকেশনের জন্য প্রকৃত মান হিসাবে পরিণত হয়েছে। বিশ্বের সমস্ত এন্টারপ্রাইজ সফ্টওয়্যারের 80% জাভাতে লেখা হয়। এবং চীনে, সবকিছু 100%। তাই servlets কি?
একটি সার্লেট ঠিক যা একটি জাভা প্রোগ্রামকে একটি ওয়েব পরিষেবাতে পরিণত করে এবং এটি ক্লায়েন্টদের কাছ থেকে অনুরোধগুলি প্রক্রিয়া করার অনুমতি দেয়। এবং এটি এই মত ছিল ...
90 এর দশকে, ওয়ার্ল্ড ওয়াইড ওয়েবের আবির্ভাবের পরপরই, ওয়েব ক্লায়েন্ট (ব্রাউজার) এবং ওয়েব সার্ভার উপস্থিত হয়েছিল। ওয়েব সার্ভারগুলি সাধারণত ইন্টারনেটে সঞ্চিত ফাইলগুলি বিতরণ করে: html পৃষ্ঠা, স্ক্রিপ্ট, ছবি ইত্যাদি।
এক পর্যায়ে, সবাই এই সিদ্ধান্তে উপনীত হয়েছিল যে উভয় পক্ষকে আরও স্মার্ট করতে হবে। এইচটিএমএল পৃষ্ঠাগুলিতে জাভাস্ক্রিপ্ট যুক্ত করা হয়েছিল, এবং সার্ভারগুলিতে প্লাগইনগুলি যুক্ত করা হয়েছিল - বিশেষ স্ক্রিপ্ট যা নির্দিষ্ট অনুরোধের প্রতিক্রিয়া হিসাবে বলা হয়েছিল এবং সার্ভারের আচরণকে আরও নমনীয় এবং স্মার্ট করে তুলেছিল।
সুতরাং একটি সার্লেট এমন একটি জাভা প্লাগইন যা তৈরি করা হয়েছিল Java web-server
এবং নির্দিষ্ট পৃষ্ঠাগুলির জন্য অনুরোধ করা হলে এটি জাভা কোড চালানোর অনুমতি দেয়। এবং ইতিমধ্যে এই জাভা কোড, সার্ভলেট ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত একটি শ্রেণী দ্বারা প্রতিনিধিত্ব করা হয়েছে, যা এর বিকাশকারীরা যা করতে চেয়েছিল তা করেছে।
এবং আপনি ইতিমধ্যে জানেন, সবচেয়ে জনপ্রিয় জাভা ওয়েব সার্ভার হল টমক্যাট । নামকরণ করা হয়েছে, যাইহোক, কার্টুন "টম এবং জেরি" থেকে বিড়াল টমের সম্মানে।
কিভাবে টমক্যাট সার্লেটের সাথে যোগাযোগ করে? প্রকৃতপক্ষে, এই প্রক্রিয়াটি প্রমিত এবং বলা হয় সার্লেট জীবন চক্র । এটিতে, একটি সার্লেট একটি লোডযোগ্য বস্তু এবং একটি ওয়েব সার্ভার একটি সার্লেট ধারক ।
যদি সার্লেট এখনও লোড করা না হয় , তাহলে:
- সার্লেট ক্লাস ধারক দ্বারা লোড করা হয়.
- ধারকটি সার্লেটের শ্রেণী (অবজেক্ট) এর একটি উদাহরণ তৈরি করে।
- ধারকটি
init()
সার্লেট অবজেক্টের একটি পদ্ধতিকে কল করে। পদ্ধতি শুধুমাত্র একবার বলা হয়।
স্ট্যান্ডার্ড ওয়ার্ক সাইকেল - একটি ক্লায়েন্টের অনুরোধ পরিবেশন করা :
- প্রতিটি অনুরোধ একটি পৃথক থ্রেড প্রক্রিয়া করা হয়.
- ধারকটি
service()
servlet এ একটি পদ্ধতি কল করে এবং সেখানে ServletRequest এবং ServletResponse অবজেক্ট পাস করে। - সার্লেটটি বন্ধ করতে,
destroy()
সার্লেট অবজেক্টে একটি পদ্ধতি বলা হয়। এটি শুধুমাত্র একবার বলা হয়।
একটি সার্লেট বন্ধ হওয়ার অনেক কারণ থাকতে পারে:
- প্রোগ্রামার ওয়েব সার্ভারটি পুনরায় চালু করে, সমস্ত সার্লেটগুলি ভালভাবে বন্ধ করা প্রয়োজন।
- প্রোগ্রামার সার্লেটের একটি নতুন সংস্করণ লোড করে, পুরানোটি অবশ্যই সঠিকভাবে আনলোড করতে হবে।
- ইত্যাদি।
মূল জিনিসটি মনে রাখবেন: ওয়েব সার্ভার এবং এর সার্লেটগুলি ব্যর্থতা ছাড়াই কাজ করা উচিত এবং কয়েক মাস ধরে পুনরায় চালু করা উচিত, প্রতি মিনিটে হাজার হাজার অনুরোধ পরিবেশন করে। অতএব, সার্লেট লোড করা, কাজ করা এবং আনলোড করার জন্য কোড সবসময় খুব উচ্চ মানের লেখা উচিত।
1.2 HttpServlet ক্লাস
সার্ভলেট এবং একটি ধারক কীভাবে কাজ করে তা প্রমিত করার জন্য সার্ভলেট শ্রেণী বিদ্যমান। প্রোগ্রামাররা এই শ্রেণীর সাথে সরাসরি কাজ করে না। ভাল, তারা খুব কমই কাজ করে। সর্বাধিক ব্যবহৃত শ্রেণীটি HttpServlet
Servlet থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।
এই ক্লাসে বেশ কিছু পদ্ধতি রয়েছে যা আমাদের কাজে লাগবে। আপনি প্রায়শই এগুলি ব্যবহার করবেন:
পদ্ধতি | বর্ণনা | |
---|---|---|
1 | init() |
সার্লেট লোড হলে একবার কল করা হয় |
2 | destroy() |
সার্লেট আনলোড হলে একবার কল করা হয় |
3 | service(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন অনুরোধের জন্য ডাকা হয়েছে |
4 | doGet(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন GET অনুরোধের জন্য আহ্বান করা হয়েছে |
5 | doPost(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন POST অনুরোধের জন্য আহ্বান করা হয়েছে |
6 | doHead(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন HEAD অনুরোধের জন্য আহ্বান করা হয়েছে |
7 | doDelete(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন ডিলিট রিকোয়েস্টের জন্য বলা হয়েছে |
8 | doPut(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন PUT অনুরোধের জন্য আহ্বান করা হয়েছে |
init()
এবং পদ্ধতি destroy()
সার্ভলেট ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত। অতএব, আপনি যদি সেগুলিকে আপনার সার্লেটে ওভাররাইড করার সিদ্ধান্ত নেন, তবে আপনাকে বেস ক্লাস থেকে তাদের বাস্তবায়ন কল করতে হবে। এর জন্য কমান্ড ব্যবহার করা হয় super.method name()
।
সার্ভলেট উদাহরণ:
public class FirstHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Getting the parameter “secret” from request
String secret = request.getParameter("secret");
// Put parameter “secret” into Http-session
HttpSession session = request.getSession(true);
session.setAttribute("secret", secret);
// Print HTML as response for browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Header</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet example "+ secret +"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
1.3 পরিষেবা (HttpServletRequest, HttpServletResponse) পদ্ধতি
আপনি যদি একটি সার্লেটের দৃষ্টিকোণ থেকে একটি ক্লায়েন্ট অনুরোধের প্রক্রিয়াকরণের দিকে তাকান, তাহলে জিনিসগুলি এরকম কিছু।
প্রতিটি ক্লায়েন্টের অনুরোধের জন্য, ধারক (ওয়েব সার্ভার) তৈরি করে HttpServletRequest
এবং অবজেক্ট তৈরি করে HttpServletResponse
এবং তারপরে service(HttpServletRequest request, HttpServletResponse response)
সংশ্লিষ্ট সার্লেটে একটি পদ্ধতি কল করে। এই অবজেক্টগুলি এতে পাস করা হয় যাতে পদ্ধতিটি থেকে প্রয়োজনীয় ডেটা নিতে পারে request
এবং কাজের ফলাফলটি এতে রাখতে পারে response
।
পদ্ধতির service()
একটি ডিফল্ট বাস্তবায়ন আছে। যদি এটি পুনরায় সংজ্ঞায়িত করা না হয়, তাহলে এটি কার্যকর করা হবে। সেটাই সে করে।
পদ্ধতিটি service()
অনুরোধ থেকে HTTP পদ্ধতির ধরন নির্ধারণ করে (GET, POST, ...) এবং অনুরোধের সাথে সংশ্লিষ্ট পদ্ধতিটিকে কল করে।
পদ্ধতি | বর্ণনা | |
---|---|---|
1 | service(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন অনুরোধের জন্য ডাকা হয়েছে |
2 | doGet(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন GET অনুরোধের জন্য আহ্বান করা হয়েছে |
3 | doPost(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন POST অনুরোধের জন্য আহ্বান করা হয়েছে |
4 | doHead(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন HEAD অনুরোধের জন্য আহ্বান করা হয়েছে |
5 | doDelete(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন ডিলিট রিকোয়েস্টের জন্য বলা হয়েছে |
6 | doPut(HttpRequest, HttpResponse) |
সার্লেটে প্রতিটি নতুন PUT অনুরোধের জন্য আহ্বান করা হয়েছে |
আপনার ক্লাসে, আপনি হয় একটি পদ্ধতিকে পুনরায় সংজ্ঞায়িত করতে পারেন service()
, অথবা এটিকে একা ছেড়ে দিতে পারেন, কিন্তু তারপর পদ্ধতিগুলিকে পুনরায় সংজ্ঞায়িত করতে পারেন doGet()
, doPost()
, ... প্রয়োজন অনুসারে।
GO TO FULL VERSION