# Servlets & HTTP — Advanced Java

Source: https://www.geekswithgeeks.com/en/advanced-java/adv-servlets

> Understand the servlet lifecycle inside a container like Tomcat, why one shared instance serves many request threads, and how doGet / doPost handle HTTP.

## Lifecycle

A servlet container (Tomcat, Jetty) creates **one** servlet instance and calls `init()` once, then `service()` — dispatching to `doGet`, `doPost` etc. — **concurrently** on many request threads, then `destroy()` at shutdown. Because instances are shared, keep no per-request mutable state in fields.

## A minimal servlet

Read from `HttpServletRequest`, write to `HttpServletResponse`. Sessions, filters, and listeners are layered on top.

```java
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws IOException {
        res.setContentType("text/plain");
        res.getWriter().write("Hi " + req.getParameter("name"));
    }
}
```
