서블릿 생명주기 (Servlet LifeCycle)
- 서블릿은 WAS 내 서블릿 엔진(컨테이너)에 의해 실행된다.
- 클라이언트로부터 서블릿 요청을 받으면 WAS는 해당 서블릿이 메모리에 있는지 확인한다.
- 해당 서블릿이 처음 실행되어 메모리에 없다면 - 서블릿 클래스를 메모리에 올리고 init() 메서드와 service() 메서드를 실행
- 해당 서블릿이 이미 메모리에 있다면 - service() 메서드 실행
- WAS가 종료되거나 웹 어플리케이션이 갱신되어 서블릿 종료 요청이 있을 경우 destroy() 메서드를 실행한다.
서블릿의 생명주기 메서드
메서드 이름 | 메서드 실행 시점 | 실행횟수 | 역할 |
init() | 클라이언트로부터 최초로 서블릿 요청이 있을 때 | 1 | 서블릿 초기화 |
service() | 클라이언트로부터 요청이 있을 때마다 | 여러 번 | 요청시 처리되는 내용 |
destroy() | 서블릿 객체가 메모리에서 삭제될 때, 서버 중지 | 1 | 자원 해제 |
1) init()
클라이언트의 첫 요청이 있을 때 딱 한 번만 호출되는 메서드
2) service()
- 스레드에 의해 호출되는 메서드
- 첫 요청시 init()이 호출되고 난 후에 바로 service()가 호출된다.
- 두 번째 요청부터는 init()을 거치지 않고 바로 service()가 호출된다.
- service() 메서드에서는 요청 메서드를 분석해서 get방식을 요청하면 doGet()을 호출하고, post방식을 요청하면 doPost()를 호출하고, delete방식을 요청하면 doDelete()를 호출하고, put방식을 요청하면 doPut() 메서드를 호출한다.
요청방식 | 호출 메서드 |
get방식 | doGet() |
post방식 | doPost() |
delete방식 | doDelete() |
put방식 | doPut() |
String method = req.getMethod();
if(method.equals("GET")){
doGet(req,res);
}else if(method.equals("POST")){
doPost(req,res);
}else if(method.equals("DELETE")){
doDelete(req,res);
}...
3) destroy()
서버가 종료될 때 딱 한 번 호출되는 메서드
서블릿의 생명주기 예제
[실행 결과]