서블릿이란?
- 서블릿은 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다.
- 서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가집니다.
- 서블릿은 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 Tomcat과 같은 JSP/Servlet 컨테이너에서 실행된다는 점에서 차이가 있다.
- 서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송한다.
- 서버에서 실행되므로 보안과 관련된 기능도 훨씬 안전하게 수행할 수 있다.
- 클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 Tomcat과 같은 WAS에 위임한다.
- WAS는 각 요청에 해당하는 서블릿을 실행한다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에게 전송한다.
서블릿의 특징
- 서버 쪽에서 실행되면서 기능을 수행한다.
- 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공한다.
- Thread 방식으로 실행된다.
- 자바로 만들어져 자바의 특징(객체 지향)을 가진다.
- 컨테이너에서 실행된다.
- 컨테이너 종류에 상관없이 실행된다(플랫폼에 독립적).
- 보안 기능을 적용하기 쉽다.
- 웹 브라우저에서 요청 시 기능을 수행한다.
서블릿 API 계층 구조와 기능
- 서블릿은 자바로 만들어졌으므로 당연히 클래스들 간의 계층 구조를 가진다.
- 서블릿 API는 Servlet과 ServletConfig 인터페이스를 구현해 제공하며 GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현한다.
- GenericServlet을 다시 Http Servlet이 상속받는다.
서블릿 API 기능
서블릿 구성 요소 | 기능 |
Servlet 인터페이스 |
∙ javax.servlet 패키지에 선언되어 있다. ∙ Servlet 관련 추상 메서드를 선언한다. ∙ init(), service(), destroy(), getServletInfo(), getServletConfig()를 선언한다. |
ServletConfig 인터페이스 |
∙ javax.servlet 패키지에 선언되어 있다. ∙ Servlet 기능 관련 추상 메서드가 선언되어 있다. ∙ getInitParameter(), getInitParameterNames(), getServletContext(), getServletName()이 선언되어 있다. |
GenericServlet 클래스 |
∙ javax.servlet 패키지에 선언되어 있다. ∙ 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스이다. ∙ GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현한다. |
HttpServlet 클래스 |
∙ javax.servlet.http 패키지에 선언되어 있다. ∙ GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행한다. ∙ 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용한다. ∙ 요청시 service()가 호출되면서 요청 방식에 따라 doGet() 이나 doPost()가 차례대로 호출된다. |
- GenericServlet은 일반적인 여러 통신 프로토콜에 대한 클라이언트/서버 프로그램에서 서블릿 기능을 구현하는 클래스이다.
- HttpServlet은 이 GenericServlet을 상속받는다.
- HttpSErvlet은 이름에서 알 수 있듯이 HTTP 프로토콜을 사용하는 서블릿 기능을 구현하는 클래스이다.
'Java > Servlet + JSP' 카테고리의 다른 글
[Servlet/JSP] Apache와 Apache Tomcat 그리고 WebServer, WAS (0) | 2020.03.09 |
---|---|
[Servlet/JSP] Web Application 정리 (0) | 2020.03.09 |
[Servlet/JSP] JSESSIONID??? (0) | 2020.01.23 |
[Servlet/JSP] Cookie와 Session (0) | 2020.01.22 |