웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 Java 프로그래밍 기술

Servlet을 관리해주는 Container이다.
Servlet을 만들었다고 해서 스스로 동작하는 것이 아니라 Servlet을 관리해주는 것이 필요한데 그러한 역할을 하는 것이 Servlet Container이다.
예를 들어, Servlet(API)이 정의서라면 Servlet Container는 정의서를 보고 수행한다. Servlet Container는 클라이언트의 Request를 받아주고 Response 할 수 있게, Web-Server(Apache)와 소켓을 만들어 통신하며 대표적으로 Tomcat이 있다.
Web-Server와의 통신 지원
Servlet Container는 Servlet과 Wev-Server가 통신할 수 있게 해준다. 그렇기 때문에 개발자는 Servlet에 구현해야 할 비지니스 로직에만 초점을 두면된다.
Servlet 생명주기(Life Cycle) 관리
Servlet Container는 Servlet의 생성과 소멸을 관리한다. Servlet을 로드하여 인스턴스화하고, 초기화 메서드를 호출하고, Request가 들어오면 적절한 Servlet 메서드를 호출한다.
또한, Servlet의 생명이 다 한 순간 Garbage Collection을 진행한다.
멀티쓰레드 지원 및 관리
Servlet Container는 Request를 받을 때마다 새로운 Thread를 생성한다. WAS가 멀티쓰레드를 생성 및 운영해주니 안정성에 대해서는 걱정할 필요가 없다.
선언적인 보안 관리
Servlet Container를 사용하면 개발자는 보안에 관련되 내용을 Java 소스로 구현해 놓지 않아도 된다. 일반적으로 보안관리는 XML에 기록하므로, 보안에 문제가 생기더라도 Java 소스에 수정하여 재컴파일 하지 않아도 된다.

클라이언트의 요청이 들어오면 Container는 해당 Servlet이 메모리에 있는지 확인 후 없을 경우 init() 메서드를 호출하여 적재한다. 최초 한번만 실행된다.
init()이 호출된 후 클라이언트의 요청에 따라 service() 메서드가 실행되며 Request에 따라서 doGet() 또는 doPost()로 분기처리 한다. 이때 Servlet Container가 클라이언트에게 Request를 받았을 때 가장 먼저 생성했던 HttpServletRequest, HttpServletResponse에 의해 request와 response 객체가 제공된다.
Container가 Servlet에 종료 요청을 하면 destroy() 메서드가 호출되는데 종료시에 처리해야 하는 작업들을 destroy() 메서드를 오버라이딩 하여서 구현하면 된다.