Servlet?
- 동적 웹 페이지를 만들 때 사용되는 자바기반 웹 프로그래밍 기술
- Java EE의 표준 중 하나로 javax.servlet package를 기반으로 server에 동작하는 class
- 클라이언트의 요청과 응답의 흐름을 체계적으로 다룰 수 있게 해주는 기술
Servlet의 동작 방식
- Client가 URL을 입력 하면 HttpRequest가 요청을 Servlet Container에게 전송
- 받은 요청을 Servlet Container는 HttpRequest, HttpResponse 객체를 생성
- Client가 요청한 URL에 해당하는 서블렛을 찾는다
- service() 메서드를 호출 후 get, post에 따라 doGet(), doPost()를 호출
- 동적 페이지 생성 후 HttpServletResponse 객체에 응답
- 응답 후 객체 소멸
Servlet lifecycle
- Servlet Container가 Request를 받은 후 클래스 로더가 Servlet 클래스를 로드합니다.
- Servlet 클래스 로드 후, Servlet Container가 Servlet 클래스의 인스턴스 생성.
- Servlet 클래스 인스턴스 화 후 init() 메서드 호출하여 Servlet을 초기화
- service() 메서드 호출, 요청 및 응답을 처리
- destroy() 메서드 호출하여 객체와의 연결 끊기
Servlet method
init() : init method는 Servlet 생성 시에 호출, Servlet Container가 해당 Servlet을 생성 후, 최초 1회 호출하여 초기화한다. Servlet은 SingleTon으로 관리,그러므로 한번 더 호출 시 생성된 인스턴스를 호출한다.
SingleTon(싱글톤 패턴) : 생성자가 여러 차례 호출이 되더라도 최초에 하나의 인스턴스만 생성, 이후 호출된 생성자는 최초의 인스턴스를 리턴한다.service() : 요청을 받고 응답을 보내줄 때 필요한 메서드, Servlet interface를 구현하여, HttpServlet 클래스의 doGet, doPost 같은 메서드들이 호출됩니다.
destroy() : 주기적으로 Servlet Container가 destroy 메서드를 호출, 또는 서비스 종료시 호출, destroy() 메소드는 인스턴스화한 객체를 없애는 것이 아니라, 연결을 끊는다가 정확하다.연결을 끊고 그 후에 garbage collector의 제거 대상이 되어 없어진다. 이 경우, 해당 Servlet의 service() 메서드들을 사용하는 모든 스레드가 종료된 후, 이 Servlet 클래스를 다시 사용하려면 새로 init()메서드를 이용하여 초기화 하는 작업이 필요하다.
Servlet Container(=Web Container)?
서블릿의 생성, 실행, 파괴 등 관리를 담당
Servlet Container의 역할
- 웹 서버와 통신 지원
- 서블릿 컨테이너는 서블릿과 웹 웹서버 간에 요청과 응답, 즉 통신을 할 수 있도록 소켓을 만들어준다.
- 서블릿 생명주기 관리
- 서블릿 클래스 로딩, 인스턴스 화
- 초기화 메서드를 호출
- 요청이 들어오면 적절한 서블릿 메서드를 호출한다.
- 서블릿 소멸 시 Garbage Collection(jvm)의 대상이 되게 한다.
- 멀티 스레드 지원 및 관리
서블릿 컨테이너는 요청이 올 때마다 새로운 자바 스레드를 생성하여 처리
HTTP 서비스 메소드를 실행 후, 스레드는 다시 스레드 풀로 반납된다.
- 선언적인 보안 관리
개발자는 보안에 관련된 내용을 구현해두지 않아도 된다.
xml로 관리
ServletContainer의 요청 처리 과정
- 클라이언트가 보낸 요청을 웹 서버가 받습니다.
- 웹서버는 요청을 서블릿 컨테이너로 전달합니다.
- 요청을 처리할 해당 서블릿이 컨테이너에 없다면, 서블릿을 동적으로 검색 후 주소 공간에 로드합니다.
- 컨테이너가 서블릿의 init() 메소드를 호출하면, 서블릿을 초기화 합니다.
- 컨테이너가 서블릿의 service() 메소드를 호출하여 HTTP 요청을 처리한다.
(요청의 데이터를 읽고, 응답을 만들어낸다) - 서블릿은 컨테이너 주소에 남아있고, 다른 HTTP 요청들을 처리할 수 있습니다.
- 웹서버는 동적으로 생성된 결과를 올바른 위치에 반환한다.
댓글