In chapter two we looked at the Container’s overall role in a servlet’s life—it creates the request and response objects, creates or allocates a new thread for the servlet, and calls the servlet’s service() method, passing the request and response references as arguments. Here’s a quick review...
User clicks a link that has a URL to a servlet.
The Container “sees” that the request is for a servlet, so the container creates two objects:
The Container finds the correct servlet based on the URL in the request, creates or allocates a thread for that request, and calls the servlet’s service() method, passing the request and response objects as arguments.
The service() method figures out which servlet method to call based on the HTTP Method (GET, POST, etc.) sent by the client.
The client sent an HTTP GET request, so the service() method calls the servlet’s doGet() method, passing the request and response objects as arguments.
The servlet uses the response object to write out the response to the client. The response goes back through the Container.
The service() method completes, so the thread either dies or returns to a Container-managed thread pool. The request and response object references fall out of scope, so these objects are toast (ready for garbage collection).
The client gets the response.