[Spring] Servlet 생명주기 및 동작과정
1. Servlet 메서드 : jvax.servlet.Servlet인터페이스에 정의된 메서드는 init(), service(), destroy(),getServletInfo(), getServletConfig()가 있다.
이중 생명주기와 관련된 메서드는 init(), service(), destroy()이다.
- init() : 서블릿 컨테이너가 서블릿을 생성한 후 초기화 작업을 수행하기위해 호출. 서블릿이 클아이언트의 요청을 처리하기 전에 준비할 작업이 있다면 이 메서드에 작성한다. (예) 디비연결, 외부 스토리지 서버와 연결 등...
- service() : 클라이언트가 요청할 때 마다 호출되는 메서드. 서블릿이 해야할 일을 작성하면 된다.
- destroy() : 서블릿 컨테이너가 종료되거나 웹 애플리케이션이 멈출 때 호출. 서비스 수행을 위해 확보했던 자원을 해제한다거나 데이터를 저장하는 등의 마무리 작업을 하면 된다.
2. 동작 과정
① 클라이언트가 웹 브라우저에 URL을 입력하면 해당하는 HTTP Request를 해당하는 서버의 Servlet Container에 보낸다.
② Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
③ 클라이언트가 요청한 URL을 DD(배포서술자, Deplyment Descriptor)를 참조해서 분석하여 어느 서블릿에 대한 요청인지 찾는다.
④ Servlet Container는 service() 메소드를 호출하며, POST, GET여부에 따라 doGet() 또는 doPost()가 호출된다.
⑤ doGet() 또는 doPost() 메소드는 동적인 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
⑥ 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
3.DD(Deployment Descriptor : 배포 서술자)
웹 컨테이너에게 사용자가 지금 접근한 URL 주소가 서블릿 요청임을 인식하고 그 서블릿 클래스의 위치는 어디에 있다고
알려주기 위해 필요한 정보들이 적혀 있는 파일이다. 주로 프로젝트의 WebContent/WEB-INF/web.xml 파일에 작성된다.
<servlet>
<servlet-name>PaymentFrontController</servlet-name> <!-- 서블릿 별명 -->
<servlet-class>web.payment.action.PaymentFrontController</servlet-class> <!-- 패키지를 포함한 서블릿 클래스명 -->
</servlet>
<servlet-mapping>
<servlet-name>PaymentFrontController</servlet-name> <!-- servlet에서 정의한 서블릿 별명 -->
<url-pattern>*.pa</url-pattern> <!-- 서블릿을 요청할 때 클라이언트가 사용할 URL -->
</servlet-mapping>
4. 생명주기
① 클라이언트 요청이 들어오면 서블릿 컨테이너는 서블릿을 찾는다.
②서블릿이 없다면 서블릿 클래스를 로딩하고 인스턴스를 준비한 후 생성자를 호출한다. 그리고 서블릿 초기화 메서드인 init()호출.
③클라이언트 요청을 처리하는 service()메서드 호출. GET, POST여부에 따라 실행된다. 여러 클아이언트가 동시에 요청을 하더라도 쓰레드가 생성되므로 동시에 service가 실행되기 때문에 수행 속도가 빠르다.
④service()메서드의 결과를 HTTP 프로토콜에 맞추어 클라이언트에 응답하는 것으로 요청처리 끝!
⑤시스템 운영자가 컨테이너를 종료하려고 함.
⑥생성된 모든 서블릿에 대해 destroy()메서드 호출
**서블릿 인스턴스는 하나만 생성되어 웹 애플리케이션이 종료될 때 까지 사용된다. 따라서 인스턴스 변수에 특정 사용자를 위한 데이터를 보관하거나 클라이언트가 보낸 데이터를 일시적으로 보관하기 위해 서블릿의 인스턴스 변수를 사용하면 안된다. (Singleton Pattern)
출처: http://hackersstudy.tistory.com/72 [공대인들이 직접쓰는 컴퓨터공부방]