Likes
(0)

Join the DZone community and get the full member experience.

Join For Free

I assume that if you’re reading this article, you already know what Servlets are. But if you don’t, let me introduce them.

In the Java world, a Servlet is a web component defined by the Jakarta Servlet Specification 6.1, which is part of Jakarta EE. Managed by a Servlet Container (I’ll dive into that soon), it handles incoming requests, processes them, and sends responses back to the client (see more in the Jakarta Servlet Specification 6.1).

In this article, I’ll explain how Servlets are the foundation that enabled us to build web applications in Java. It doesn’t matter if you’re using your preferred framework — like Spring Boot, Micronaut, OpenLiberty, or Quarkus — under the hood, you’re still using Servlets.

That said, I believe it’s crucial to understand the entire process — from the moment a browser sends a request to a web server, how the web server handles it, and finally, how the Servlet Container processes it.

It’s important to strip away any unnecessary complexity we associate with certain technologies. In this case, think of a Servlet as nothing more than a simple Java object with methods designed to handle HTTP requests and send responses back to the client.

Here’s the interesting part: Servlets don’t communicate directly with the client. Instead, they receive HTTP requests forwarded by the web server, process them, and send the response back to the web server. What’s fascinating is that Servlets don’t even know the client exists directly — they just focus on processing requests and generating responses.

What Is a Servlet Container?

A Servlet Container is a part of a web server that provides the network services necessary for handling requests and responses. It decodes MIME-based requests and formats MIME-based responses. Additionally, a Servlet Container manages Servlets throughout their lifecycle.

The Servlet Lifecycle

A Servlet can be loaded and instantiated along with the web server or delayed until it needs to handle a request. The Servlet Container is responsible for locating and initializing the Servlet.

When a Servlet is instantiated, the container passes an object implementing ServletConfig as an argument. The Servlet then executes its init method and returns a boolean to the container. If the return value is true, the Servlet Container calls the service method, passing the request and response objects to the Servlet. The Servlet then handles the request, processes it, and generates a response.

Once the Servlet has processed the request, the Servlet Container retrieves the response and sends it back to the web server, which then delivers it to the client.

A Deeper Look at the Entire Flow

  1. The browser establishes a connection with the web server using a three-way handshake.
  2. The browser encodes and sends an HTTP request to the web server.
  3. The web server accepts the request, decodes it, creates ServletRequest and ServletResponse objects from the decoded data, and forwards them to the Servlet Container.
  4. The Servlet Container looks for a Servlet that can handle the request. It does this by checking the web.xml configuration file or looking for a @WebServlet annotation.
  5. Once located, the Servlet Container instantiates the Servlet and passes the ServletRequest and ServletResponse objects to its service method.
  6. The service method casts ServletRequest and ServletResponse to HttpServletRequest and HttpServletResponse, then calls the protected service method.
  7. The protected service method checks the HTTP method (e.g., doGet, doPost, etc.) and calls the appropriate method. Suppose it’s doGet; in that case, it is invoked, processes the HttpServletRequest, and generates an HttpServletResponse.
  8. The Servlet Container forwards the response back to the web server.
  9. The web server encodes the response and sends it back to the client.
  10. The client (browser) decodes the response and renders it.

Finally, a Visual Representation

To help you better understand this flow, I created an animation, “Jakarta Servlet 6.1: Visualizing How It Works.”

I hope you find it helpful and enjoyable!

Web server
applications
Java (programming language)

Opinions expressed by DZone contributors are their own.