🎯 서블릿 lifecycle
참고 : https://velog.io/@corone_hi/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-Servlet-LifeCycle
- tomcat 컨테이너가 서블릿의 life cycle 관리 ( 생성 ~ 소멸 )
- 생성시 호출 메서드 : init () 메서드 콜백 호출
단 한번만 호출된다.
요청시 호출 메서드: service() 메서드(doGet, doPost)
요청할 때마다 호출된다.
삭제시 호출 메서드: destroy() ⇒ 콜백 메서드로 동작됨 (시스템이 특정 상황에서 호출하는 함수) - 서블릿은 단 한번만 생성된다.
단 하나의 생성된 서블릿을 이용해서 많은 사용자(클라이언트)의 요청을 처리한다. - 주의할 점
- 인스턴스 변수는 단 한번만 생성된다. 여러 사용자가 공유할 수 있다. ( thread-unsafe )
- 만약 공유하고 싶지 않으면 반드시 로컬 변수로 작성해야 된다. ( thread-safe )
⇒ 결론은 서블릿 코드 구현은 thread-safe하게 구현해야 된다.
📝 실습
✅ 서블릿은 단 한번만 생성된다.
Override/Implement Methods
첫번째 run as
두번째부터는 doGet만 실행되는 것을 볼 수 있다.
단 하나의 생성된 서블릿을 이용해서 많은 사용자(클라이언트)의 요청을 처리한다.
그 이후는 서비스메서드만 ( doGet ) 실행된다.
✅ 서블릿 코드 구현은 thread-safe하게 구현해야 된다.
인스턴스 변수 : 공유 가능 ( thread-unsafe )
로컬 변수 : 나 혼자 사용 가능 ( tnread-safe ) ⭐⭐⭐
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 요청 URL: http://localhost:8090/01_servlet/test
@WebServlet("/test2")
public class TestServlet2 extends HttpServlet {
//인스턴스 변수 : 공유 가능 ( thread-unsafe )
int num;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int num2 = 0; // 로컬변수 : 나 혼자 사용 가능 ★ ( thread-safe )
// 서블릿 코드 구현은 thread-safe하게 구현해야 된다.
num++;
num2++;
System.out.println("thread-unsafe: " + num);
System.out.println("thread-safe: " + num2);
}
}
'Programming Language > SERVLET' 카테고리의 다른 글
서블릿 (servlet) - ServletConfig vs ServletContext (0) | 2023.08.10 |
---|---|
서블릿 (servlet) - 서블릿의 핵심 기능 (1) | 2023.08.09 |
서블릿 (servlet) - 특징과 구현방법 (0) | 2023.08.09 |
Servlet & JSP - 실습 (0) | 2023.08.08 |
Servlet & JSP - 웹 어플리케이션 개발환경 (0) | 2023.08.08 |