Servlet, Servlet Container

Servlet, Servlet Container

This document analyzes Servlet and Servlet Container.

1. Servlet

Servlet is one of Java EE standards and refers to classes that operate on servers based on javax.servlet Package. Each Servlet must define three methods: init(), service(), and destroy().

  • init() : init() is called when Servlet is created. A Parameter receives an Instance based on javax.servlet.ServletConfig Interface, and it performs operations to initialize Servlet and allocate resources used by Servlet.
  • service() : Called each time a request is delivered to Servlet. Performs actual Service Logic.
  • destroy() : Called when Servlet is deleted. Performs operations to release resources used by Servlet.

2. Servlet Container

[Figure 1] Servlet Container

[Figure 1] Servlet Container

Servlet Container performs the role of creating and managing Servlet Instances. It is also called Web Container. [Figure 1] shows the position of Servlet Container when configuring servers in 3 Tier Architecture. HTTP requests are processed through the following process.

  • When Web Browser sends HTTP request to Web Server, Web Server delivers the received HTTP request as-is to WAS Server’s Web Server.
  • WAS Server’s Web Server delivers HTTP request to Servlet Container again.
  • Servlet Container checks if Servlet Instance needed for HTTP request processing exists. If it does not exist, it creates Servlet Instance and calls init() method of that Servlet Instance to initialize Servlet Instance.
  • Servlet Container calls service() method of Servlet Instance to process HTTP request and delivers processing result to WAS Server’s Web Server.
  • WAS Server’s Web Server delivers HTTP response to Web Server, and Web Server delivers the received HTTP response to Web Browser.
1
2
3
4
5
6
7
public class MyServlet extends HttpServlet {
    private Object thisIsNOTThreadSafe;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;
    }
}
[Code 1] Servlet Example

Looking at the HTTP request processing process, Servlet Instances do not create one for each HTTP request, but use existing Servlet Instances. That is, a single Servlet Instance processes multiple HTTP requests simultaneously. Therefore, Servlet Instances are not Thread-Safe. As in the HttpServlet example of [Code 1], member variables of Servlet are not Thread-Safe. To use Thread-Safe variables, method local variables must be used. Servlet Container calls destroy() method of Servlet Instances that should be removed when not used and marks them so that JVM’s GC (Garbage Collector) can release Servlet Instances. GC releases marked Servlet Instances.

3. References