Container
- Servlet을 실행하고 관리하는 역할을 한다.
- Web Server는 사용자로부터 Servlet을 요청 받으면 바로 호출 되는 것이 아니라, Container에게 요청이 넘어간다.
- Container는 요청을 넘겨 받아 HTTP Request와 HTTP Response 객체를 만들어, 이를 인자로 Servlet doPost()나 doGet() method 중 하나를 호출한다
C2-73
Container가 주는 혜택
- Container는 Servlet과 Web Server가 서로 통신할 수 있는 손쉬운 방법을 제공한다.
- Server와 대화하기 위하여 개발자가 직접 해야 하는 복잡한 일련의 일을 할 필요가 없다.
- Container는 어떻게 Web Server와 통신해야 하는지 알 알고 있으며, 이런 통신 기능을 API로 제공하여 개발자가 통신 API에 대해 고민할 필요 없다.
- 개발자가 신경 쓸 부분은 Servlet에 구현해야 할 Business Logic이다.
- Container는 Servlet의 탄생과 죽음을 관리한다.
- 개발자 관점에서 보자면, Servlet Class를 Loading하여 instence화 하고, 초기화 method를 호출하고, 요청이 들어오면 적적할 method를 호출하는 작업을 Container가 한다.
- Servlet이 생명을 다하는 순간에는 적절하게 garbage collection을 진행한다.
- Container는 요청이 들어올 때마다 새로운 Java thread를 하나 만든다.
- Client 요청에 따라 적절한 HTTP method를 실행하면 Threading 작업이 끝난다.
- thread 안전성에 대하여 개발자가 뭔가 하지 않아도 된다.
- Container를 사용하면, 보안에 관련된 내용을 Servlet 또는 Java Class Code 안에 Hardcoding할 필요가 없다.
- Container가 있는 환경이라면 보안관리는 XML 배포 서술자에다가 기록하면 된다.
- 보안에 대해 뭔가 수정할 일이 생기더라도, Java Source Code를 수정하여 다시 Compile하지 않아도 보안관리가 가능하다.
C2-75
Container가 요청을 다루는 법
- 사용자가 Servlet에 대한 Link를 선택한다.
- Container는 들어온 요청이 Servlet이라는 것을 간파하고 HttpServletResponse, HttpServletrequest 객체를 생성한다.
- 사용자가 날린 URL을 분석하여 어떤 Servlet에 대한 요청인지 알아내고 해당 Servlet thread를 생성하여 Request/Response 객체를 인자로 넘긴다.
- Container는 Servlet Service() method를 호출하고 요청에 지정한 방식(Method)에 따라 doGet()을 호출할지, doPost()를 호출할지 결정한다.(여기서는 일단 HTTP GET 방식이라 가정한다.)
- doGet() method는 동적인 Page를 생성한 다음, 이를 Response 객체에 실어 보내며 보내고 난 후에도 Container는 Response 객체에 대한 참조(Reference)를 가지고 있는다.
- thread 작업이 끝나면, Container는 Response 객체를 HTTP Response로 전환하여 Client로 내려 보내고 마지막으로 Request와 Response 객체를 소멸 시킨다.
C2-76
'개발' 카테고리의 다른 글
배포 서술자(DD, Deployment Descriptor) (0) | 2011.07.26 |
---|---|
배포 서술자에서 URL Mapping을 위한 두 가지 항목 (0) | 2011.07.26 |
하나의 Servlet은 세 개의 이름을 가진다. (0) | 2011.07.26 |
CGI 프로그램 (0) | 2011.07.26 |
웹 서버 혼자서 할 수 없는 두 가지 (0) | 2011.07.26 |
URL(Uniform Resource Locators) (0) | 2011.07.26 |
MIME 타입 (0) | 2011.07.26 |