Introduction to Servlet Lifecycle: Understanding the Container-Managed Flow
Introduction to Servlet Lifecycle: Understanding the Container-Managed Flow
अगर आप Java Web Development सीख रहे हैं, तो “Servlet Lifecycle” एक ऐसा topic है जिसे अच्छे से समझना बहुत जरूरी है। ये concept बताता है कि एक Servlet कैसे create, run और destroy होता है — यानी उसके पूरे lifecycle को कौन manage करता है और कैसे। Servlet का lifecycle पूरी तरह से “Servlet Container” द्वारा control किया जाता है, जैसे कि Apache Tomcat या GlassFish। चलिए इसे आसान भाषा में step-by-step समझते हैं।
What is Servlet Lifecycle?
Servlet Lifecycle वो process है जिसमें एक Servlet class को load किया जाता है, initialize किया जाता है, service दी जाती है और अंत में destroy कर दिया जाता है। इस पूरे process को manage करने की responsibility Servlet Container की होती है। ये Container ही Servlet को client requests से connect करता है।
साधारण शब्दों में कहें तो, जब भी कोई user browser से request भेजता है, तो Servlet Container उस request को handle करता है और Servlet को activate करके response generate करवाता है।
Stages of Servlet Lifecycle
Servlet Lifecycle मुख्यतः पाँच steps में complete होता है। हर step में Servlet Container एक specific काम करता है।
- 1. Loading and Instantiation: Servlet class को memory में load किया जाता है और उसका object बनाया जाता है।
- 2. Initialization: Container Servlet के
init()method को call करता है ताकि initialization code run हो सके। - 3. Request Handling: हर client request के लिए
service()method call होता है। - 4. Response Generation: Servlet business logic execute करके response generate करता है।
- 5. Destruction: Container Servlet को memory से हटाने से पहले
destroy()method call करता है।
Servlet Lifecycle Methods
अब इन steps को थोड़ा detail में समझते हैं। Java Servlet API तीन core lifecycle methods provide करती है:
init()— Servlet के initialization के लिए।service()— हर request को process करने के लिए।destroy()— Servlet को हटाने से पहले clean-up करने के लिए।
1. init() Method
जब Servlet पहली बार load होता है, तो Container उसका object बनाता है और init() method call करता है। इसका काम Servlet को initialize करना होता है — जैसे कि database connection open करना या configuration data load करना।
public void init() throws ServletException {
// Initialization code
System.out.println("Servlet is initialized");
}
ध्यान रहे, init() method सिर्फ एक बार ही call होता है — Servlet के पूरे lifetime में केवल एक बार।
2. service() Method
जब भी कोई client HTTP request भेजता है, तो Container Servlet के service() method को call करता है। ये method request को process करता है और appropriate response देता है। उदाहरण के लिए, अगर client GET request भेजता है, तो doGet() method call होगा।
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// Process client request
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("Request processed successfully");
}
Servlet Container खुद detect करता है कि request GET है या POST, और उसी के अनुसार doGet() या doPost() call करता है।
3. destroy() Method
जब Servlet को server memory से remove करना होता है (जैसे कि server shutdown या redeployment के समय), तो Container destroy() method call करता है। इसमें वो सारे resources free किए जाते हैं जो Servlet ने use किए थे, जैसे database connection या file handles।
public void destroy() {
// Cleanup code
System.out.println("Servlet is being destroyed");
}
इस method के बाद Servlet permanently memory से delete हो जाता है।
Servlet Lifecycle Flow (Container Managed Flow)
Servlet Container इस पूरे flow को manage करता है। नीचे दिए गए diagram जैसा flow होता है:
| Stage | Container Action | Method Called |
|---|---|---|
| Loading | Servlet class को memory में load करता है | - |
| Initialization | Object बनाकर initialize करता है | init() |
| Request Handling | हर request पर response generate करता है | service() |
| Destruction | Servlet को memory से remove करता है | destroy() |
इस flow में Servlet Container का control हमेशा बना रहता है। Developer को सिर्फ methods के अंदर logic लिखना होता है।
Life Cycle Callback Sequence
Servlet Container नीचे दिए गए sequence में methods call करता है:
1. Servlet class load होती है
2. Servlet object बनाया जाता है
3. init() method call होता है
4. हर client request के लिए service() call होता है
5. Server बंद होने पर destroy() call होता है
Example of Servlet Lifecycle
अब एक simple example से पूरा lifecycle समझते हैं। ये Servlet हर stage पर console में message print करेगा ताकि flow समझ में आए।
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LifecycleDemo extends HttpServlet {
public void init() throws ServletException {
System.out.println("init() method called");
}
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("service() method called");
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<h3>Servlet Lifecycle Example</h3>");
}
public void destroy() {
System.out.println("destroy() method called");
}
}
जब आप इस Servlet को run करते हैं, तो server startup पर init() call होगा, हर request पर service() और server shutdown पर destroy()।
Role of Servlet Container
Servlet Container (जैसे Tomcat) Servlet lifecycle का backbone है। इसका काम होता है:
- Servlet को memory में load करना।
- Initialization और destruction manage करना।
- Client request को Servlet से connect करना।
- Thread management handle करना ताकि multiple requests parallel process हो सकें।
इस तरह developer को low-level networking की चिंता नहीं करनी पड़ती। Container automatically HTTP protocol handle कर लेता है।
Advantages of Container-Managed Lifecycle
- Automatic management: Developer को Servlet creation और destruction manually manage नहीं करना पड़ता।
- Thread safety: Container हर request के लिए अलग thread handle करता है।
- Scalability: Multiple users के requests efficiently handle होते हैं।
- Integration: Container easily JSP, JDBC और security modules से connect हो जाता है।
Important Points for Exam
- Servlet Lifecycle को manage करने की जिम्मेदारी Servlet Container की होती है।
init()सिर्फ एक बार call होता है,service()हर request पर औरdestroy()एक बार Servlet remove होने से पहले।- Servlet class को compile करने के बाद
web.xmlमें mapping करनी होती है। - Servlets multithreaded environment में run होते हैं।
- Lifecycle methods
javax.servlet.Servletinterface में defined हैं।
Notes on Servlet Lifecycle
- Lifecycle के तीन core methods —
init(),service(),destroy()— हमेशा override किए जाते हैं। - Servlet Container automatically methods call करता है, developer manually नहीं करता।
- Proper resource management जरूरी है ताकि memory leak न हो।
- Servlet के initialization parameters
web.xmlमें define किए जा सकते हैं। - Container हर request के लिए नया thread create करता है, जिससे performance बेहतर होती है।