본문 바로가기
자바웹프로그래밍/JSP

Servlet 생명 주기 및 web.xml servlet 설정

by 디찌s 2020. 11. 9.
728x90
반응형

Client가 Servelt에 요청을 하면,  Servlet은 바로 호출 되지 않고 객체를 생성하고 초기화 작업을 거친 후 , 요청을 처리하는 생명주기를 갖고 있다.

 

 


Servelt의 생명주기를 단계별로 나타내면

 

1.요청이 오면,Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성

 

2.서버는 init()메소드를 호출해서 Servlet을 초기화한다.

 

3.service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리하도록 한다.

 

4.service() 메소드는 특정 HTTP 요청(GET,POST)을 처리하는 doGET(),doPost()를 호출한다.

 

5. 서버는 destroy()메소드를 호출하여 Servlet을 제거한다.

 

 

Tomcat에 역할?

 

톰캣은 Serlvet객체를 생성하고 초기화하는 작업은 비용이 많은 작어이므로, 다음에 요청이 올때를 대비하여 이미 생성

 

된 Servlet 객체를 메모리에 남겨둔다. 또한 톰캣이 종료되기 전이나 reload 전에 모든 Servlet을 제거하게 된다.

 

 


생명주기 테스트를 해보자! 

Servlet 을 생성하고 init,destory,service를 추가한후

package com;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Helloworld
 */
@WebServlet("/Helloworld")
public class Helloworld extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init called");
		super.init();
	}
	@Override
	public void destroy() {
		System.out.println("destroy called");
		super.destroy();
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("service called");
		super.service(req, resp);
	}
    public Helloworld() {
    	
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

URL을 불러보자

그러면 처음 init함수가 실행되어 생성하고 그다음 service가 실행된다. 그다음 doget을 통해 response 한다

한번더 url을 접속하면

 

 

init은 실행되지 않고 service와 doget만 실행된것을 볼수있다.

 

즉, 위에 말한것처럼 Servlet 객체가 이미 생성되어있기 때문에 Servlet객체는 메모리에 저장되어있으며,

그렇기때문에 init()메서드를 호출하지 않고, 바로 Service()메설드를 호출한것이다.

 

 

 

그리고 서버를 종료하면 자동적으로 destory()함수를 실행하여 servlet을 해제시킨다.

 

이상으로 servlet 생명주기에 대해 알아보았다.

728x90
반응형

'자바웹프로그래밍 > JSP' 카테고리의 다른 글

Servlet 이란 !!???  (0) 2020.11.10
JSP 와 Servlet은 도대체 무엇인가?  (0) 2020.11.09

댓글