[JSP] 서블릿에는 main() 메소드가 없다 !?

반응형




현재 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() 메소드가 없습니다.
왜냐하면 컨테이너가 서블릿의 생명주기 관련 메소드를 호출해 주기 때문이죠.
이것은 또 컨테이너가 서블릿을 관리하고 있기 때문이기도 합니다.

간단하죠?

그럼 뿅~! ^^;




반응형

댓글

Designed by JB FACTORY