(기초) 서블릿의 동작 원리

Web/Basic 2012. 5. 21. 17:25 Posted by Request

서블릿의 동작 원리

 

1. 사용자의 URL 요청

-어떤 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹 서버 측에 URL과 서블릿 클래스를 미리 매핑시켜 놓은 배포 서술자가 필요하다.

 

배포서술자(Deployment Descriptor) : 웹서버가 알아 챌 수 있도록 적어 놓은 파일(web.xml)

 

 

2. request, response 객체 생성

-웹 컨테이너는 일단 지금 받은 요청을 처리하기 위해 HTTP 요청(Request)을 처리하기 위한 request 객체와 HTTP 응답(Response)를 위한 response 객체를 생성한다.

 


3.서블릿 인스턴스와 스레드 생성

-request, response 객체가 생성된 뒤 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자를 통해 알아낸다.

만일 그 클래스가 웹 컨테이너에서 한 번도 실행된 적이 없거나 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드하고) init()메소드를 실행하여 초기화 한 뒤 스레드를 하나 생성한다.

 

이미 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스에 스레드만 하나 새로 생성한다.

각 서블릿 인스턴스는 웹 컨테이너당 하나만 존재하기 때문에 init() 메소드는 각 서블릿 당 한 번씩만 호출된다.

 

4.service() 메소드 호출과 서블릿 클래스 실행

-스레드가 생성되면 각 스레드에서 service() 메소드가 호출된다.

service()메소드가 호출되면 HTTP요청 방식이 GET방식일 경우에는 서블릿 클래스의 doGet()메소드가,

POST방식일 경우에는 doPost()메소드가 request, response 객체를 인자로 자동으로 호출된다.

 


 

5.응답과 스레드의 소멸

doGet() 또는 doPost() 메소드가 호출되어 사용자의 요청에 따른 동적인 웹 페이지를 생성하면 그 결과물이 담긴 reponse 객체를 웹 컨테이너가 HTTP 응답(Response) 형태로 바꾸어 웹 서버로 전송하게 된다.

그리고 사용이 끝난 Request와 Response 객체를 소멸시키고 스레드를 종료하게 된다.

 

 

 

클라이언트  -->   1.http://www.servlet.com/servlet요청      -->   

 웹 서버   -->   2.요청된 서블릿 확인 후 컨테이너로 요청   -->

컨테이너  -->

  3.컨테이너에서 request와 response 생성 후 web.xml(배포서술자)을 참조하여 해당 서블릿의 스레드 생성 후 service 메소드 호출

 

  4.service() 메소드에서는 요청 방식에 따라 doGet이나 doPost() 메소드 호출

  5.doGet() 이나 doPost() 메소드에서 응답 생성                         

 

 

 

출처 : [ jsp 2.2&servlet3.0(오정원지음) 내용입니다. ]