* Container
컨테이너는 웹서버와 서블릿 사이의 통신을 지원한다.
컨테이너는 서브릿의 생명주기를 관리한다.
컨테이너는 새로운 요청이 들어올 때마다 스레드를 생성하여 사용자의 요청을 처리한다.
* Servlet 이 실행되는 방식
1) 사용자가 url을 호출하여 컨테이너에 새로운 요청을 한다.
2) 컨테이너가 요청을 접수하여 HttpServletRequest request 객체 / HttpServletResponse response 객체를 생성
3) 접수된 url을 분석하여 해당 서블릿 객체를 생성
- 서블릿 객체가 생성되면서 서블릿에서 init() 메서드를 실행하여 Servlet 객체를 초기화 한다.
- 사용자 요청을 처리하기 위해 스레드를 생성
4) service(request, response) 메서드가 호출되어, request 타입을 분석하여 타입에 따라 적절한 메서드를 호출
- GET 방식이라면 doGet() 으로, POST 방식이라면 doPost를 호출하는 식.
5) 응답을 클라이언트에 전송
6) was가 종료되면서 destory()메서드 실행, 생성된 스레드를 소멸시킴.
* Servlet 의 라이프 사이클
최초요청/ 컨테이너 시작 init()
모든 요청과 응답 service() -> 쓰레드를 통한 동시 실행 (doGet(), doPost()로 분기)
컨테이너 종료/ WAS종료 destory()
* 코드로 확인
public class LifeCycle extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifeCycle() {
super();
System.out.println("LifeCycle 실행..");
}
@Override
public void init() throws ServletException {
System.out.println("init() 호출됨...");
}
@Override
public void destroy() {
System.out.println("destroy() 호출됨...");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service() 호출됨");
}
}
<servlet>
<servlet-name>LifeCycle</servlet-name>
<servlet-class>sample.LifeCycle</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LifeCycle</servlet-name>
<url-pattern>/LifeCycle</url-pattern>
</servlet-mapping>
F5를 눌러 새로고침할때 service() 메서드만 실행되는 것을 볼 수있다. 처음임에만 servlet을 초기화한후 그뒤로는 초기화 되지 않는다. 즉 처음 servlet을 호출할때만 실행시간이 조금 걸리고 그뒤에는 메모리에 올라와있으므로 빠르게 요청을 처리할 수 있다.
'Backend > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] WAS에서 제공하는 Connection Pool 이용하는 방법 (0) | 2021.02.22 |
---|---|
[JSP & Servlet] include 지시어와 include 액션태그의 차이점 (0) | 2021.02.19 |
[JSP & Servlet] Servlet을 통하여 JSP 기본 태그 알아보기 (0) | 2021.02.18 |
[JSP & Servlet] 페이지 이동 방식 forward와 redirect 방식의 차이 (0) | 2021.02.18 |
[JSP & Servlet] Tomcat 각 폴더의 의미에 대해서... (0) | 2021.02.16 |