프로그래밍 언어/자바 웹

서블릿 API 계층 구조와 기능

· 코딩마이데이

서블릿은 클래스 간의 계층 구조를 가집니다.

서블릿 클래스 계층 구조

 

서블릿 API는 Servlet과 ServletConfig 인터페이스를 구현해 제공하며 GenericSerclet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현합합니다. 그리고 이 GenericServlet을 다시 HttpServlet이 상속받습니다.

 

서블릿 API 기능

서블릿 API 구성 요소 특징

서블릭 구성 요소 기능
Servlet 인터페이스 javax.servlet 패키지에 선언되어 있습니다.
Servlet 관련 추상 메소드를 선언합니다.
init(), service(), destory(), getServletInfo(), getServletConfig()를 선언합니다.
ServletConfig 인터페이스 javax.servlet 패키지에 선언되어 있습니다.
Servlet 기능 관련 추상 메소드가 선언되어 있습니다.
getInitPrameter(), getInitParameterNames(),
getServletContext(), getServletName()이 선언되어 있습니다.
GenericServlet 클래스 javax.servlet 패키지에 선언되어 있습니다.
상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스입니다.
GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현합니다.
HttpServlet 클래스 javax.servlet.http 패키지에 선언되어 있습니다.
GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행합니다.
웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용합니다.
요청 시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출됩니다.

 

GenricServlet은 일반적인 여러 통신/프로토콜에 대한 클라이언트/서버 프로그램에서 서블릿 기능을 구현하는 클래스입니다. HttpServlet은 이 GenericServlet을 상속받습니다. HttpServlet은  이 GenericServlet을 상속받습니다. HttpServlet은 이름에서  알 수 있듯이 HTTP 프로토콜로 사용하는 서블릿 기능을 구현하는 클래스입니다. 바로 이 HttpServlet을 상속받아 HTTP 프로토콜로 동작하는 웹 브라우저의 요청을 처리하는 서블릿입니다.

 

HttpServlet의 여러 가지 메소드 기능

메소드 기능
protected doDelete(HttpServletReuest req,
HttpServletResponse resp)
서블릿이 DELTETE request를 수행하기 위해 service()를 통해서 호출됩니다.
protected doGet(HttpServletReuest req,
HttpServletResponse resp)
서블릿이 GET request를 수행하기 위해 service()를 통해서 호출됩니다.
protected doHead(HttpServletReuest req,
HttpServletResponse resp)
서블릿이 HEAD request를 수행하기 위해 service()를 통해서 호출됩니다.
protected doPost(HttpServletReuest req,
HttpServletResponse resp)
서블릿이 POST request를 수행하기 위해 service()를 통해서 호출됩니다.
protected service (ServletReuest req,
ServletResponse resp)
request를 public service()에서 전달받아 doXXX() 메소드를 호출합니다.
public service (ServletReuest req,
ServletResponse resp)
클라이언트의 request를 procted service()에서 전달합니다.

 

클라이언트 요청 시 public service() 메서드를 먼저 호출한 후 다시 procted service() 메서드를 호출합니다. 그런 다음 다시 request 종류에 따라 doXXX() 메소드를 호출하는 과정으로 실행됩니다.