Servlet Life Cycle
라이프 사이클 : 서블릿은 생명 주기를 통해서 작동하는데 서블릿 컨테이너라는 곳에 존재한다.
init() : 요청이 왔을 때 최초 구동이 되며 로드 되는 단계
Servlet In Service : 각종 요청이 들어오면 작동되며 응답하게 된다. get, post, head 등의 요청
destroy() : 코드 변경, 자원 부족 등의 상황일 때 destory 호출.
Servlet Container(=Web container)의 특징
- Servlet 을 관리하고 실행하는 component이다.
- 자체적으로 JVM과 JRE를 포함한다.
- 웹서버의 URL 요청을 받아 매핑되는 servlet 을 실행한다.
- Servlet 의 전반적인 Life Cycle 을 관리한다.
- 그 예로 Apache Tomcat, BEA WebLogic 등이 있다.
- JSP 도 내부적으로 servlet 으로 변환되어 실행된다.(컨테이너에서 변환)
Container 와 Servlet 동작방식
- Client 의 URL 요청
- 웹서버가 Request, Response 객체를 생성
- Servlet 인스턴스와 Thread 생성
- 스레드가 service() 메소드 호출 (여기서 service() 메소드는 각종 요청에 응답하게 하는 메소드)
- doGet() 또는 doPost() 에서 각 response, request 객체를 인자로 호출
- 메소드 호출 뒤, 웹페이지 생성하면 웹 컨테이너가 응답(Response) 형태로 바꾸어 웹서버에 전송
Client <-> Web Server <-> Container 로 동작
클라이언트에서 요청을 하면 웹서버가 받아서 컨테이너로 보낸다. 컨테이너 안에는 각종 Url 들이 있는데 servlet 과 각각 매칭해서 메모리에 올리고 스레드 가동 후 get, post 방식에 맞춰서 doGet(), doPost() 메소드 호출 후 응답한 것을 다시 거꾸로 보내서 클라이언트는 어떤 요청에 대해서 결과를 띄운다.
주요 메소드 비교
메소드 | 개요 |
init() - 시작 | 서블릿이 메모리에 로드 될 때 1회 호출 수정으로 인해 리로드 되면 다시 호출 |
destory() - 끝 | 서블릿이 메모리에서 해제되면 호출 코드가 수정되면 다시 호출 |
doGet() | Get 방식으로 서블릿을 요청하면 호출 |
doPost() | Post 방식으로 서블릿을 요청하면 호출 |
service() | 모든 요청은 service() 를 통해서 doXXX() 로 이동 |
이제 예제 코드를 통해서 Life Cycle 을 확인해보자!
[사진 1: 라이프 사이클 예제 소스 코드]
[사진 2: URL 접속 했을 시 콘솔 창]
]
[사진 3: 새로 고침 했을 시 콘솔 창]
[사진 4: 서블릿 코드 변경해 리로드 될 시]
[사진 5: 새로 고침 했을 시]
다음과 같이 콘솔 창이 출력된다. 이것이 바로 서블릿 라이프 사이클이다.
반응형