서블릿(Servlet)이란?
서버에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스
- 톰캣과 같은 Servlet 컨테이너에서 실행됨
- 일반적으로 HTTP (HyperText Transfer Protocol)를 통해 웹 클라이언트의 요청을 수신하고 응답
Servlet 관련 객체
- javax.servlet.Servlet
- javax.servlet.GenericServlet
- javax.servlet.http.HttpServlet
Servlet 동작과정
Servlet 컨테이너(WAS)
Servlet 을 실행하기 위한 실행 환경
- 아파치 톰캣이 대표적임
웹서버와 Servlet 컨테이너(WAS) 비교
Servlet 특징
- 일반적인 자바 클래스 구조
- 컴파일 과정 필요
- 보안 기능 적용 용이
- Servlet 컨테이너에 의해 실행
- 서버쪽에서 실행되면서 기능 수행
- 웹 브라우저에서 요청시 기능 수행
- 특정 클래스(Servlet)를 상속 받아야만 구현할 수 있는 구조
- 일반적으로 Servlet 은 javax.servlet.http.HttpServlet 클래스를 상속하여 구현
Servlet 인터페이스(최상위 클래스)
Servlet 인터페이스의 메소드
- init() : 서블릿 초기화
- service() : 클라이언트의 모든 호출 처리
- destory() : 서블릿 서비스가 중단된 후 Garbage 수집 등을 완료
- getServletConfig() : 서블릿의 시작 정보를 가져오는데 사용
- getServletInfo() : 서블릿의 작성자, 버전 및 서버와 같은 자체에 대한 기본 정보 제공
인터페이스(interface)
- 호출자와 호출당하는 것 사이의 호출 규칙 정의에 사용되는 문법
- Implements 키워드로 구현
- 인터페이스를 구현하는 클래스는 반드시 인터페이스에 선언된 모든 메서드를 구현해야 함
Servlet API
GenericServlet
Servlet 인터페이스를 구현한 추상 클래스
- GenericServlet은 service()를 제외한 나머지 4개의 메소드를 미리 구현해 두어 서브 클래스가 service()만을 구현할 수 있도록 함
- 프로토콜에 무관한 기본 서비스만을 제공하는 클래스이므로 HttpServlet과 같은 프로토콜 특정 서브 클래스를 확장하는 것이 더 일반적
HttpServlet
- GenericServlet 클래스보다는 HttpServlet이 HTTP 프로토콜 지원이 포함되어 일반적 웹 프로그램에 적합
- HttpServlet의 서브클래스는 적어도 다음 중 하나의 메소드를 작성해야 함
- doGet() : get 요청 시
- doPost() : post 요청 시
- service() : 클라이언트의 요청 시
...
Servlet 동작구조
Servlet 생명주기(Life Cycle)
- 서블릿도 자바 클래스이므로 실행하면 당연히 초기화 과정 메모리에 인스턴스를 생성하여 서비스를 수행 다시 소멸하는 과정을 거침
- Servlet 생명주기 메서드
Servlet 실행 단계마다 호출되어 기능을 수행하는 메서드
- Servlet 초기화 : init() 메서드
- Servlet 실행 시 호출되는 메서드
- 초기에 한 번만 실행(Java의 main()와 같음)
- 요청/응답 : service()/doGet()/doPost() 메서드
- 사용자 요청에 따라 스레드로 실행되는 메서드
- service() 를 통해 doGet() 혹은 doPost() 메서드호출
- 매개변수 HttpServletRequest 와 HttpServletResponse 를 통해 사용자 요청을 처리
- Servlet 종료 : destroy() 메서드
- 컨테이너로부터 Servlet 종료 요청이 있을 때 호출
- init()와 마찬가지로 한 번만 실행
- Servlet 종료 시 정리 작업을 destroy() 를 재정의해 구현