Servlet life cycle can be described as a series of steps through which a servlet goes during its life span, starting from loading till it gets destroyed.
Before I start explaining the life cycle of Servlet, lets discuss few terminologies that you will encounter while reading this guide. It is important to learn what each term means, this will help you understand things faster.
Web Server: It is also known as HTTP Server, it can handle HTTP Requests send by client and responds the request with an HTTP Response.
Web Container: Also known as Servlet Container and Servlet Engine. It is a part of Web Server that interacts with Servlets. This is the main component of Web Server that manages the life cycle of Servlets.
Note: The servlet tutorials you find in this website uses apache tomcat web server. Although I mentioned it as web server, it is in fact a web server and web container both. (As mentioned above web container is a part of web server).
Life Cycle of Servlet
Servlet life cycle contains five steps: 1) Loading of Servlet 2) Creating instance of Servlet 3) Invoke init() once 4) Invoke service() repeatedly for each client request 5) Invoke destroy()
For those who are wondering what is instance and invoke means: Instance and objects are same thing. Invoking a method means calling a method, it is just a fancy word that we use in programming world in place of calling :)
Let’s back to the main topic. Here are the five steps of servlet life cycle.
Step 1: Loading of Servlet
When the web server (e.g. Apache Tomcat) starts up, the servlet container deploy and loads all the servlets.
Step 2: Creating instance of Servlet
Once all the Servlet classes loaded, the servlet container creates instances of each servlet class. Servlet container creates only once instance per servlet class and all the requests to the servlet are executed on the same servlet instance.
Step 3: Invoke init() method
Once all the servlet classes are instantiated, the init() method is invoked for each instantiated servlet. This method initializes the servlet. There are certain init parameters that you can specify in the deployment descriptor (web.xml) file. For example, if a servlet has value >=0 then its init() method is immediately invoked during web container startup.
You can specify the element in web.xml file like this:
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.beginnersbook.MyServletDemo</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
Now the init() method for corresponding servlet class com.beginnersbook.MyServletDemo would be invoked during web container startup.
Note: The init() method is called only once during the life cycle of servlet.
Step 4: Invoke service() method
Each time the web server receives a request for servlet, it spawns a new thread that calls service() method. If the servlet is GenericServlet then the request is served by the service() method itself, if the servlet is HttpServlet then service() method receives the request and dispatches it to the correct handler method based on the type of request.
For example if its a Get Request the service() method would dispatch the request to the doGet() method by calling the doGet() method with request parameters. Similarly the requests like Post, Head, Put etc. are dispatched to the corresponding handlers doPost(), doHead(), doPut() etc. by service() method of servlet.
Note: Unlike init() and destroy() that are called only once, the service() method can be called any number of times during servlet life cycle. As long as servlet is not destroyed, for each client request the service() method is invoked.
Out of all the 5 steps in life cycle, this is the only step that executes multiple times.
Step 5: Invoke destroy() method
When servlet container shuts down(this usually happens when we stop the web server), it unloads all the servlets and calls destroy() method for each initialized servlets.