강의 출처-ed 부스트 코스 강경미 강사님
https://www.boostcourse.org/web326/lecture/258505
package examples;
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;
@WebServlet("/LifeCycleServlet")
public class LifeCycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifeCycleServlet() {
System.out.println("LifecycleServlet 생성!!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init 호출!!");
}
public void destroy() {
System.out.println("destroy 호출!!");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service 생성!!");
}
}
위와 같이 서블릿의 라이프 사이클을 확인해 볼 수 있도록, init destory service 함수를 만들고,
서블릿 클래스를 실행 시, 최초로 생성이 되고, init이 호출된다. 그리고 페이지를 새로고침하면 Servlet 객체는 다시 생성되고 init이 호출되지 않고, service 함수만 여러번 실행되는 것을 확인할 수 있다. WAS는 어플리케이션이 실행되는 동안 servlet객체를 여러번 재생산 하지 않고, 메모리에 계속 올라가 있음을 의미한다.
해당 서블릿 파일을 변경하고 저장하면, 기존의 서블릿 객체는 사용할 수가 없기 때문에,
이렇게 destroy 함수가 호출되고, servlet 객체가 reload된다.
reload 되었기 때문에, 페이지를 새로고침 하여야 하고
새로고침 하면,
다시 이렇게 서블릿 객체가 생성되고 init, service 순으로 호출되는 것을 볼 수 있다.
서블릿의 라이프 사이클 요약
WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인.
메모리에 없다면?
해당 서블릿 클래스를 메모리에 올림(생성자 실행)
init() 메소드를 실행
service() 메소드를 실행 (service 메소드는 서블릿에 주어진 요청의 메소드가 get일 때는 get 메소드를 실행, post일 때는 post 메소드를 실행)