finerss's world!

서블릿에 요청이 들어오면, 누군가 서블릿을 초기화해서, 요청을 처리한 새로운 스레드를 만들어야한다.
그러면 서블렛은 doPost() 또는 doGet()메서드를 호출하며 여기에 두메소드에 인자로들어가는
 HTTP Request 와 HTTP Resopnse 객체를 누군가 생성해서 서블릿으로 넘겨줘야한다.
또한 서블릿이 생성, 소멸하는 시점에서 자원 관리도해야하는데 이것들을 하는것이 바로 컨테이너이다.

웹서버가 사용자로부터 서블릿에 대한 요청을 받으면 , 서블릿을 바로호출하는 것이 아니라, 서블릿을 관리하고 있는 컨테이너에게 이 요청을 넘깁니다. 여기서 컨테이너란 물론 서블릿이 배포(deploy)된 컨테이너를 말한다. 요청을 넘겨받은 컨테이너는 HTTP Request와 HTTP Response 객체를 만들어, 이를 인자로 서블릿 doPost()나 doGet() 메소드중 하나를 호출한다.


컨테이너가 하는일


 통신(Communication) 지원
-컨테이너는 서블릿과 웹서버가 서로 통신할 수 있는 손쉬운 방법을 제공한다. 다시말해, 서버와 대화하기위해 개발자가 직접 ServerSocket을 만들고, 특정 포트에 리스닝하고, 연결요청이 들어오면 스트림을 생성하는 등 이런 복잡한 일련의 일을 할필요가 없다는 것이다. 컨테이너는 이런 통신 기능을 API로 제공하고 있다. 따라서 웹 서버와 서블릿이 서로 통신하기위한 통로인 통신 API에 대해 개발자가 고민할 필요가없다.
생명주기(LifeCycle) 관리
-개발자 관점에서 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 호출하는 작업을 컨테이너가 한다. 또한 서블릿이 생명을 다한 순간에는 적절하게 가비지 컬렉션을 진행한다. 즉 서블릿의 탄생과 죽음을 관리한다.
멀티스레딩 지원
-컨테이너는 요청이 들어올 떄마다 새로운 자바 스레드를 하나 만듭니다. 클라이언트의 요청에 따라 적절한 HTTP 서비스 메소드를 실행하면 그걸로 스레딩 작업은 끝이 난다(스레드가 죽는다.). 스레드 안전성에 대해선 서버가 다중 요청에 대한 스레드 생성 및 운영에 대해서 알아서 해주니 걱정 할 필요없다.
선언적인 보안관리
-컨테이너를 사용하면 보안에 관련된 내용을 서블릿 또는 자바클래스 코드 안에 하드코딩 할 필요가 없다. 컨테이너가 있는 환경이라면 보안관리는 XML 배포 서술자에 기록하면되는데 이말은 보안에 대해 뭔가 수정할 일이 생기더라도 자바 소스 코드를 수정하여 다시 컴파일하지 않아도 보안관리가 가능하다는 말이다.
JSP 지원


컨테이너가 요청에 응답하는 것을 그림으로 보면


'공부 > Sevlets&JSP' 카테고리의 다른 글

MVC 패턴  (0) 2011.06.24
서블릿 매핑, 배포 서술자(DD, Deployment Descriptor)  (0) 2011.06.23
CGI 와 Servlet 의차이  (0) 2011.06.22
CGI(Common Gateway Interface)  (0) 2011.06.22
웹 서버에 응답과 요청  (0) 2011.06.22