BACK_END/Spring 공부

Spring - Servlet 생명 주기

harry595 2021. 2. 1. 17:51
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 호출!!");
    }

}

 

 

위를 예로 들어 해당 URL로 Client가 Server에 요청하면 서버가 해당 URL에 대한 정보가

메모리에 존재하는지 확인. 메모리에 존재하지 않으면 최초로 메모리에 올림.

그러면 생성자를 통해 생성(LifeCycleServlet 생성) 후 init 호출 후 service 호출

 

그러면 새로 고침을 통해 다시 해당 Url에 접근을 한다면? Service만 호출

왜냐면 서버는 Servlet 객체를 여러번 만들지 않고 실제 요청된 객체가 메모리에 있는지 확인하고

있다면 Service만 호출함

 

Destroy 메소드는 Servlet을 수정하고 저장하면 실행됨

왜냐면 Servlet이 수정됐기 때문에 현재 메모리에 올라간 Servlet 객체는 사용할 수 없음

그 후 새로 고침을 하면 메모리에 존재하지 않기 때문에 처음부터 다시 생성

 

<실행 결과>

 

Service 메소드를 만들지 않아도 doGet,doPost 메소드가 동작을 했었음

Service 메소드는 템플릿 메소드 패턴으로 이미 구현됨

Servie 메소드가 존재하지 않는다면 부모 클래스의 service 메소드가 실행됨

내가 service를 호출하지 않았다면 부모인 HttpServlet의 service 메소드를 호출

 

해당 Servlet으 URL을 입력하여 들어가면 service method가 호출되며 해당

service method는 자신의 doget method를 호출, post 방식도 dopost 호출