서블릿은 JSP 이전 정적 웹 페이지의 문제점을 보완하여 나온 동적 웹 페이지입니다.
JSP의 많은 기능은 서블릿의 기능을 따르므로 서블릿을 먼저 이해하면 JSP를 더 쉽게 이해할 수 있습니다.
1. 서블릿이란?
서블릿은 서버 쪽에서 실행되며 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스입니다.
서블릿의 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가집니다.
하지만 독자적으로 실행되지 못하고 JSP/Servlet 컨테이너에서 실행됩니다.
서블릿은 서버에서 실행되다가 웹 브라우저에서 요청하면 기능을 수행한 후 웹 브라우저에 결과를 전송합니다.
2. 서블릿의 동작 과정
클라이언트가 웹 서버에 요청하면 웹 서버는 요청을 WAS(웹 애플리케이션 서버)에 위임합니다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행합니다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송합니다.
3. 서블릿의 기능
- 서버 쪽에서 기능을 수행합니다.
- 동적인 기능을 제공합니다.
- 스레드 방식으로 실행됩니다.
- 자바로 만들어저 자바의 특징을 가집니다.
- 컨테이너에서 실행됩니다.
- 컨테이너 종류에 상관없이 실행됩니다.
- 보안 기능을 적용하기 쉽습니다.
- 웹 브라우저에서 요청 시 기능을 수행합니다.
4. 서블릿의 계층 구조
서블릿 API는 Servlet과 ervletConfig 인터에피스를 구현해 제공하며 GenericServlet 추상 클래스가 두 인터페이스의 추상 메서드를 구현합니다. 그리고 GenericServlet을 다시 HttpServlet이 상속받습니다.
5. 서블릿 API
(1) Servlet 인터페이스
- javax.servlet 패키지에 선언되어 있습니다.
- Servlet 관련 추상 메서드를 선언합니다.
- init(), service(), destroy(), getServletInfo(), getServletConfig()를 선언합니다.
(2) ServletConfig 인터페이스
- javax.servlet 패키지에 선언되어 있습니다.
- Servlet 기능 관련 추상 메서드가 선언되어 있습니다.
- getInitParameter(), getInitParameterNames(), getServletContext(), getServleteName()이 선언되어 있습니다.
(3) GenericServlet 클래스
-javax.servlet 패키지에 선언되어 있습니다.
- 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스입니다.
- GenericServlet 을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현합니다.
(4) HttpServlet 클래스
- javax.servlet.http 패키지에 선언되어 있습니다.
- GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행합니다.
- 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용합니다.
- 요청 시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출됩니다.