Developer/Spring eGov4.0 (Java11, Tomcat9)

Servlet 알아보기 3 (lifecycle)

단님 2024. 11. 1. 16:39
728x90
Servlet의 생명주기

Servlet의 생명주기(Lifecycle)는 Servlet이 서버에 생성되고, 요청을 처리하고, 제거되는 과정을 의미한다.

Servlet의 생명주기는 JavaEE 표준에 따라 지정되어 있으며,

Servlet Container(Tomcat과 같은 WAS)가 이를 관리한다.

 

Servlet의 생명주기에는 다음과 같은 주요 단계가 포함된다

Servlet 인스턴스 생성
Servlet은 웹 애플리케이션이 시작되거나, 클라이언트의 첫 요청이 들어올 때
Servlet Container 에 의해 처음으로 생성
초기화 (init 메서드)
Servlet인스턴스가 생성된 직후 init() 메서드가 호출
init()이 완료되면 Servlet은 클라이언트 요청을 처리할 준비가 된 상태
요청 처리 (service 메서드 및 doGet/doPost 메서드)
클라이언트가 Servlet에 요청을 보내면, service() 메서드가 호출.
service() 메서드는 요청의 HTTP 메서드(GET, POST 등)에 따라
doGet() 또는 doPost() 같은 적절한 메서드를 호출하여 요청을 처리
종료 및 자원 해제 (destroy 메서드)
서버가 종료되거나, Servlet이 웹 애플리케이션에서 제거될 때 destroy() 메서드가 호출
destroy()메서드 호출 후에는Servlet이 메모리에서 소멸
요약
인스턴스 생성 : 첫 요청이 들어오면 Servlet 객체가 생성
init() 호출 : 초기 설정 수행
service() 호출 : 클라이언트 요청 처리
destory() 호출 : 자원 해제 , 메모리 소멸

예제로 보는 생명주기

 

@WebServlet("/lcycle")
public class Ex04_LifeCycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
	int cno = 1; // 생성자 메서드 호출 횟수.
	int ino = 1; // init 메서드 호출 횟수.
	int gno = 1; // doGet 메서드 호출 횟수.
	int dno = 1; // destroy 메서드 호출 횟수.

	// constructor
	public Ex04_LifeCycle() {
		super();
		System.out.println("** 생성자 메서드 호출 횟수 " + cno++);
	}// constructor

	// init()
	public void init(ServletConfig config) throws ServletException {
		System.out.println("** init 메서드 호출 횟수 " + ino++);
	}// init()

	// destroy()
	public void destroy() {
		System.out.println("** destroy 메서드 호출 횟수 " + dno++);
	}// destroy()

	// doGet() : 클라이언트로 부터 get 방식 요청이 들어오면 자동 호출 메서드.
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<html><body>");
		out.print("<h2 style='color:blue;'>** Servelt LifeCycle Test **</h2>");
		out.print("<pre><h3>");
		out.println(" ** 현재 시간  : " + new Date() );
		out.println(" ** doget 메서드 호출 횟수 : " + gno );
		out.print("</h3></pre>");
		out.print("</body></html>");
		
		System.out.println("** doget 메서드 호출 횟수 " + gno++);
	}// doGet()

}

 

첫 화면 
생성자호출 → init 호출 → doget 호출

 

새로고침을 누른다 ? 

doget ()→ 누를때마다 호출되어 쌓이는 것을 확인할 수 있다.

다른 유저가 서버에 방문하여도 쌓이는 것을 확인 할 수 있다.

→ 쓰레드 방식으로 운용이 된다는 것을 알 수있다.

서버를 닫으면 이 생명주기는 끝나는 것을 알 수있다.

 

servers → 우클릭 → stop →서버 중지→ destroy 메서드 호출