서블릿 라이프사이클
1.
클라이언트의 첫 번째 요청 시 OR 컨테이너가 시작될 때 생성
위의 두 가지 선택지는 컨테이너 속성 값으로 설정
2.
첫 번째의 클라이언트 요청에 대해서만 객체가 생성
- 서블릿 객체 생성
- init() 메소드 호출되어 서블릿에 필요한 초기화 작업을 수행
-init()메소드에서는 서블릿 전체에서 공유되는 자원을 생성
두 번째 부터는 각 클라이언트 마다 스레드를 생성하여 요청 처리
- 두 번째 요청 시 부터 service() 메소드 호출
- 요청당 한개의 service() 메소드 호출
컨테이너에서는 service 메소드를 호출하기 전
HttpServletRequest 객체와 HttpServlet Response 객체를 생성하여
service 메소드 파라미터로 전송한다.
- 클라이언트 요청이 GET방식이면 doGet() 메소드를 호출하고,
- 클라이언트가 POST 방식이면 doPost() 메소드를 호출한다
service() 메서드는 재정의 하지 않는다
3.
컨테이너가 종료될 때 서블릿 객체는 소멸
동작
Client ------------> Server ------------------------------> Container---------------------->Servlet
1) 1번요청 2) 요청 url 분석 후 서블릿 결정 3) 서블릿 객체 생성
4) init 메소드 호출
5) service 메소드 호출
6) doGet 이나
doPost 메소드 호출
7) destroy 메소드 호출
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;
//서블릿 클래스를 정의한다. 서블릿 클래스를 정의할 때는 HttpServlet 클래스를 상속한다
public class ServletLifeCycle extends HttpServlet {
private static final long serialVersionUID = 1L;
//생성자를 정의한 부분이다. 이 부분은 첫 번째 클라이언트 요청이 들어올 때 실행된다.
public ServletLifeCycle ()
{
super();
System.out.println("Constructor");
}
//init 메소드를 재정의한 부분이다. 이 메소드는 첫 번째 요청이 들어올 때만 호출된다.
//두 번째 요청부터는 호출 되지 않는다.
@Override
public void init(ServletConfig config) throws ServletException
{
super.init(config);
System.out.println("init");
}
//service 메소드를 정의한 부분이다. 이 메소드는 클라이언트의 요청이 들어올 때 마다 반복적으로 호출되면서 각 클라이언트의 요청을 처리한다.
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("service");
super.service(request, response);
}
//doGet 메소드를 정의한 부분이다. 이 메소드는 클라이언트의 요청이 들어올 때 마다 반복적으로 호출되면서 각 클라이언트의 요청을 처리한다.
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("doGet");
}
//doPost 메소드를 정의한 부분이다. 이 메소드는 클라이언트가 post 방식으로 요청을 하면 호출된다.
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("doPost");
}
//destroy() 메소드를 정의한 부분이다. 서블릿 인스턴스가 소멸되기 직전에 단 한번만 호출되는 메소드이다. 톰캣 서비스를 중지하면 실행된다.
@Override
public void destroy()
{
System.out.println("destroy");
super.destroy();
}
}
'JSP' 카테고리의 다른 글
[JSP] GET방식 전송 (0) | 2019.10.02 |
---|---|
[JSP] Servlet이 요청받는 방식 - GET 과 POST (0) | 2019.10.02 |
[JSP] 14 . HTML 텍스트 태그 <font> (0) | 2019.05.27 |
[JSP] 13 - 3 . HTML 문단 태그 <hr> <h> (0) | 2019.05.27 |
[JSP] 13 - 2 . HTML 문단 태그 <p> (0) | 2019.05.23 |