Java Servlet

자바 서블릿(Servlet, 이하 서블릿)동적 웹 페이지를 구현하기 위한 자바 클래스입니다.

서블릿은 서버측에서 실행되다가 클라이언트측에서 요청이 발생하면 해당 요청에 대한 작업을 수행한 결과를 다시 클라이언트(웹 브라우저)에 전송하는 기능을 수행합니다.

서블릿의 동작 과정

서블릿은 다음과 같은 과정을 거치며 동작합니다.

클라이언트가 웹 서버에 요청을 하면 웹 서버는 요청을 웹 애플리케이션 서버(WAS)로 위임합니다. 위임받은 WAS는 요청에 맞는 서블릿을 실행하여 결과를 얻습니다. 이렇게 나온 결과를 다시 WAS, 웹 서버로 보면 웹 서버는 응답을 클라이언트에 보내게 되어 클라이언트에서 결과를 얻게 됩니다.

웹 서버는 정적 웹 콘텐츠를 제공하거나 동적 컨텐츠 제공을 위한 요청을 WAS, 처리 결과를 클라이언트로 전달하는 역할을 합니다.
웹 애플리케이션 서버는 클라이언트 요청에 따른 동적 컨텐츠를 제공하는 서버 또는 프로그램을 의미합니다.

기능 분리로 부터 오는 보안성이나 안정성 등을 위해 두 서버의 개념을 분리해서 사용하고 있습니다.

서블릿의 특징

서블릿은 다음과 같은 특징들이 있습니다.

  • 서버측에서 실행되어 기능을 수행합니다.
  • 웹 브라우저 요청시에 기능을 수행합니다.
  • 정적 웹 페이지의 문제점을 보완해 동적 웹 페이지 기능을 제공합니다.
  • 스레드 방식으로 실행됩니다.
  • 자바 클래스이므로 자바의 특성을 갖습니다.
  • 컨테이너에서 실행되고, 컨테이너 종류 상관없이 실행됩니다. (= 플랫폼에 독립적이다.)
  • 보안 기능 적용이 간편해집니다.

서블릿 API 구조

서블릿은 계층 구조를 가지고 구성되어 있습니다.Servlet, ServletConfig 인터페이스GenericServlet 추상 클래스가 추상 메소드로 구현합니다. 그리고 이 추상 클래스를 HttpServlet 클래스가 상속받은 형태로 구성되어 있습니다.

서블릿을 구성하는 각 구성원들의 기능은 다음과 같습니다.

  • Servlet: 서블릿 관련 추상 메소드들이 선언되어 있습니다. init(), service(), destroy(), getServletInfo(), getServletConfig()

  • ServletConifg: 서블릿 기능 관련 추상 메소드들이 선언되어있습니다. getInitParameter(), getInitParameterNames(), getServletContext(), getServletName()

  • GenericServlet: Servlet, ServletConfig 인터페이스를 구현하여 일반적인 서블릿 기능을 구현하고 있습니다. 이 클래스를 상속받아서 구현하는 사용자 서블릿service()를 오버라이딩해서 구현합니다.

  • HttpServlet: GenericServlet 클래스를 상속받아 HTTP를 사용하는 웹 브라우저에서 서블릿 기능을 수행합니다. 주로 웹 브라우저 기반 서비스를 제공하는 서블릿을 작성할 때 상속받아서 사용합니다.
    요청시 service() 호출 과정에서 doGet(), doPost()가 차례대로 호출됩니다.

HttpServlet 주요 메소드

이 중 HttpServlet은 HTTP 통신에 적합한 클래스이기에 서블릿을 이용한다면 자주 사용되게 됩니다. 그래서 HttpServlet의 주요한 메소드들 몇 가지만 알아보고 넘어가려고 합니다.

메소드설명
public service(ServletRequest req, ServletResponse resp)클라이언트의 요청을 protected service()로 전달합니다.
protected service(ServletRequest req, ServletResponse resp)요청을 public service()에서 전달받아 doXxxxx() 메소드를 호출합니다.
protected doGet(HttpServletRequest req, HttpServletResponse resp)GET 요청을 수행합니다.
protected doPost(HttpServletRequest req, HttpServletResponse resp)POST 요청을 수행합니다.
protected doDelete(HttpServletRequest req, HttpServletResponse resp)DELETE 요청을 수행합니다.
protected doHead(HttpServletRequest req, HttpServletResponse resp)HEAD 요청을 수행합니다.

각 HTTP 요청 방식에 대한 내용은 이 포스트를 참조해주세요.
나머지 HttpServlet의 메소드는 문서에서 확인하실 수 있습니다.


서블릿 생명주기

서블릿도 자바 클래스이기 때문에 서블릿을 실행하면 초기화, 인스턴스화, 기능 수행, 소멸 과정을 거칩니다.

이 과정을 서블릿 생명주기(Servlet Lifecycle)이라고 부르며 생명주기 각 단계에서 호출되는 메소드들을 서블릿 생명주기 메소드라고 부릅니다.

생명주기 메소드설명
init()서블릿을 처음 메모리에 등록할 때 처음 한 번만 호출
서블릿 생성시 초기화 작업 수행
service() -> doXxxxx()요청마다 매번 호출
HTTP요청에 맞는 doXxxxx()를 호출하여 doXxxxx()는 실제 요청에 대한 작업을 수행
destroy()서블릿 종료 요청(메모리 소멸)이 오면 호출
서블릿 마무리 작업 수행

생명주기 메소드 중 init(), destroy()는 초기화와 마무리 작업을 담당하고 있기에 해당 작업이 별도로 필요하지 않다면 작성하지 않아도 됩니다.

그러나 doXxxxx()는 요청에 대한 실제 작업을 수행하는 메소드이기 때문에 반드시 구현해주어야합니다.

0개의 댓글