[JSP] 서블릿에는 main() 메소드가 없다 !?
- 프로그래밍 정보
- 2010. 6. 28.
반응형
현재 HTTP 프로토콜 및 웹서버 - 웹 컨테이너 - 서블릿에 대한 내용들을 포스팅 하고 있습니다.
2010/06/27 - [Programing/JSP & Servlet] - 웹 서버와 도우미 어플리케이션( CGI )
2010/06/27 - [Programing/JSP & Servlet] - HTTP 응답 - MIME 타입 ( 컨텐츠 타입 )
2010/06/27 - [Programing/JSP & Servlet] - GET 방식과 POST 방식 !
2010/06/24 - [Programing/JSP & Servlet] - HTTP 요청과 응답의 구성요소
2010/06/27 - [Programing/JSP & Servlet] - HTTP 응답 - MIME 타입 ( 컨텐츠 타입 )
2010/06/27 - [Programing/JSP & Servlet] - GET 방식과 POST 방식 !
2010/06/24 - [Programing/JSP & Servlet] - HTTP 요청과 응답의 구성요소
이번 포스팅은 컨테이너가 동작하는 방식과 어떻게 서블릿을 관리하는지에 관한 내용입니다.
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
컨테이너의 관리를 받는 서블릿
서블릿은 컨테이너의 관리를 받습니다. 컨테이너는 서블릿에 대한 요청을 받게되면 doPOST() 또는 doGET() 메소드를 호출합니다. 그런뒤 이 메소드의 인자로 들어가는 HTTP Request , HTTP Response 객체를 생성하여 서블릿으로 넘겨주게 되죠. 또한 서블릿이 생성, 소멸하는 시점에서 자원관리도 해줍니다.
웹 서버가 요청을 받으면 서블릿을 바로 호출 하는것이 아니라 서블릿을 관리하는 컨테이너에게 요청을 넘기는 것이지요. 요청을 넘겨받은 컨테이너는 HTTP Request 와 HTTP Response 객체 생성후에 이것을 인자로하여
doPOST() , doGET() 중 하나를 호출합니다.
< 직접 그린 그림 ^^; >
컨테이너가 하는 일
컨테이너는 다음과 같은 일을 합니다.
- 통신기능 지원 : 컨테이너는 웹 서버와 통신기능을 지원하고 이를 API 로 제공합니다.
- 생명주기 관리 : 서블릿이 생성과 소멸하는 것을 관리합니다. ( 로딩 -> 인스턴스화 -> 초기화 메소드 호출 -> 소멸 후 가비지컬렉션 지원 )
- 멀티스레딩 지원 : 컨테이너는 요청이 들어올 때 마다 새로운 자바 스레드를 만듭니다. 서버가 다중 요청에 대한 스레드관리를 알아서 해주는 것이지요. ^^ (하지만 이런것 때문에 나중에 나올 동기화 시엔 좀 복잡해 지기도 합니다 ~ )
- 쉬운 보안관리 : 컨테이너는 보안 관리를 자바 클래스 안에 하드코딩하지 않고 XML 배포서술자에 기록하면 됩니다. 따라서 자바 소스코드를 수정 후 ( 클래스 수정 ) 재 컴파일 하지 않아도 되지요. 하지만 배포서술자는 실행중에 수정하여도 적용되지 않으므로 배포서술자 자체를 수정하게되면 컨테이너를 재시작해야됩니다.
사용자 ( 클라이언트 ) 가 서블릿을 호출 합니다.
컨테이너는 두 객체를 생성합니다.
HttpServletResponse 객체와 HttpServletRequest 객체 입니다.
URL을 분석하여 DD( 배포서술자 : web.xml ) 참조 후 해당 서블릿에 대한 스레드를 만들고,
만들어놓은 두 객체(HttpServletRequest, HttpServletResponse ) 를 인자로 넘깁니다.
이제 컨테이너는 서블릿을 호출합니다. ( service() 호출 ) 요청에 따라 doGET() 또는 doPOST() 가 호출됩니다.
doPOST()가 호출되었다고 가정하겠습니다. doPOST() 메소드는 동적인 페이지 생성 후 이것을 response 객체에 실어서 컨테이너로 보냅니다.
스레드가 끝나면 Response 객체를 HTTP Response 로 전환하여 클라이언트로 보내줍니다.
스레드와 request , response 객체는 소멸되지요~
즉, 결론은 서블릿에는 main() 메소드가 없습니다.
왜냐하면 컨테이너가 서블릿의 생명주기 관련 메소드를 호출해 주기 때문이죠.
이것은 또 컨테이너가 서블릿을 관리하고 있기 때문이기도 합니다.
간단하죠?
그럼 뿅~! ^^;
반응형