JSP&Servlet

Servlet Life-Cycle

kalza 2018. 9. 14. 14:43

클라이언트 요청에 의해 생성된 Servlet의 생성,실행,종료에 대해 공부해본다.


앞선 포스팅에서 클라이언트로부터 동적 요청이 들어오면 웹 서버는 WAS로 요청을 하고, 

컨테이너는 자신에게 주어진 역할을 열심히 수행을 시작하고 그 과정중 service()를 호출하기 이전

서블릿 클래스를 메모리에서 로딩하여 객체를 생성한다.

이때, 서블릿을 요청할때마다(같은 페이지를 재요청할때마다) 계속해서 객체를 두번, 세번, 여러번 생성하는것은

효율적이지 못하므로, 메모리에 남아 있는 객체를 그대로 사용하게 된다.


객체가 생성될때 초기화 작업을 해주는 메서드가 init 메서드인데, 위에 대한 설명을 증명해보는 코드를 작성해본다.

작성전, init 메서드는 최초 요청시점에 객체가 생성되고 객체를 초기화하기 위해 실행되는 메서드 이므로, 

별도의 설정이 없으면 단 한번 실행된다는걸 기억하자.


 @WebServlet("/cycletest")

 public class CycleTest extends HttpServlet {

       

   

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println(" -- doGet() -- ");

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

@Override

public void init() throws ServletException {

System.out.println(" -- init() -- ");

}

@Override

public void destroy() {

System.out.println(" -- destroy() -- ");

}


 }



URL에 매핑된 /cycletest로 접근해본다.



콘솔창을 보면 init()이 가장 먼저 호출되었고, service()호출->doGET()호출 되었음을 확인 할 수 있다.



이제 브라우저에서 F5키를 눌러 새로고침을 해본다.



init()은 호출되지 않고 service()만 호출 되었다.