본문 바로가기

Java/서블릿

[Java] [Servlet] Servlet의 생명 주기

1. Servlet의 생명 주기와 관련된 메서드

init()

서블릿이 처음으로 요청될 때 초기화를 하는 메서드입니다. 클래스를 new 해서 사용하듯 서블릿 클래스도 초기화해주어야 사용이 가능합니다. 이렇게 초기화된 서블릿은 싱글톤으로 관리되어 다음에 한번 더 해당 서블릿 클래스를 호출하면 초기화가 다시 일어나는 것이 아니라 기존에 있던 서블릿 클래스를 호출합니다.

 

service()

서블릿 컨테이너가 요청을 받고 응답을 내려줄 때 필요한 서블릿의 service 메서드입니다. Servlet interface를 구현한 HttpServlet 클래스의 doGet, doPost 같은 메서드들이 호출됩니다.

 

destroy()

더 이상 사용되지 않는 서블릿 클래스는 주기적으로 서블릿 컨테이너가 destory() 메서드를 호출하여 제거합니다. 이렇게 제거된 서블릿은 service 메서드들에 해당하는 모든 스레드들이 종료되거나 사용시간이 오래되어 타임아웃된 경우에는 이 클래스를 다시 사용하기 위해서는 init()을 다시 해주어야 합니다.

 

2. 개념 정리

  • 요청을 받았을 떄, 서블릿 컨테이너에 서블릿이 있는지 / 없는지 에 따라 메서드가 다르게 실행된다!
  • 서블릿 컨테이너 내 서블릿은, 싱글톤으로 관리된다.

3. 개념 정리 확인용 실습

1. 클라이언트가 서블릿의 URL로 요청

2. 서버가 해당 요청 URL에 해당하는 서블릿을 찾아냄

3. 해당 서블릿 클래스가 메모리에 존재하는지 체크

3-1. 존재하지 않으면 객체 생성(즉, 생성자 호출하고 init() 호출)

최초로 서블릿을 요청했을 때

3-2. 존재하면, 메모리에 있던 객체 리턴 (service() 메서드만 호출)

브라우저 새로고침시, service() 메서드만 호출되어, 기존 출력결과에 service만 추가로 출력된 것을 볼 수 있다

 

4. destroy()는 서블릿의 내용 변경되거나, WAS가 종료될 때 호출

'Java > 서블릿' 카테고리의 다른 글

[Java] [Servlet] web.xml의 모든 것 (1)  (0) 2022.09.21
[Java] [Servlet] Servlet이란?  (0) 2022.09.15