서블릿의 동작 순서
웹브라우저 → 웹서버 →웹어플리케이션서버 →서블릿 컨테이너
* 쓰레드 생성
* servlet 객체 생성
Servlet 기술 : CGI를 대신할 수 있는 Java 기술(기존의 CGI의 차이점)
1) 기존 CGI의 로딩과 초기화 작업을 진행하기 때문에 서버에 대한 오버헤드가 크다.
서블릿 > 한번 메모리에 로딩되어 수행되면 작업이 모두 수행되어 끝나더라도 메모리에서 해제 되지 않는다.(재활용)
계속적인 수행 요청이 들어와도 메모리 로딩이나 초기화를 처리하지 않는다.
모든 서블릿은 한번만 메모리에 로딩 되어진다.
2) 특정 웹 서버에 비의존적이다.
서블릿 > Java 언어로 구현되는 프로그램이기 때문에 플랫폼(운영체제)과는 무관한 실행 파일을 만들 수 있다.
기존의 CGI는 성능향상을 꽤하기 위해서 추가적인 API가 필요했던 것에 비해서 서블릿은 Servlet API를 활용해서 개발하면 된다.
Servlet 엔진만 활용해도 된다.
3) 서블릿은 멀티 쓰레드로 동작한다.
Servlet은 CGI처럼 웹브라우저로 부터의 요청에 대해 각각의 프로세스를 생성하지 않는다.
각 요청에 대해서 쓰레드로 동작한다.
Servlet의 생명 주기(Life cycle)
Servlet 객체 생성 → init() 호출 → service(), doGet(), doPost() 호출 → destroy() 호출
최초 한번 최초 한번 요청 시 매번 마지막 한번
1. 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성된다.
2. 서버는 init() 메소드를 호출해서 Servlet을 초기화한다..
3. service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리하도록 한다.
4. service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메소드(doGet(), doPost() 등)를 호출한다.
5. 서버는 destroy() 메소드를 호출하여 Servlet을 제거한다.
Servlet의 선처리(init() 전), 후처리(destroy() 후)
* 선처리 : 의존하는 객체를 설정한 이후에 초기화 작업을 수행 할 메소드에 적용
* 선처리를 위한 어노테이션 : @PostConstruct
* 후처리 : 컨테이너에서 객체를 제거하기전에 호출 된 메소드에 적용
* 후처리를 위한 어노테이션 : @PreDestroy