참고문서: servlet

웹서버

image

  • 웹서버란 웹페이지를 사용자에게 전송하는 서버이다.
  • 웹서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다.
  • 대표적인 웹애플리케이션 서버로는 톰캣이 있다.
    • 그 외 jBoss, WebLogic, 제우스 등이 대표적인 웹 애플리케이션 서버 프로그램이다.
    • 서버는 HTTP 요청에 대한 적절한 HttpServlet/JSP의 실행을 담당한다.

Servlet이란?

  • 클라이언트의 요청을 처리하고, 그 결과를 반환하는 클래스이다.
  • MVC 패턴에서 Controller로 사용된다.
  • HttpServlet을 상속받아야 한다.
  • html을 사용하여 요청에 응답한다.
  • 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이다.

Servlet의 동작 방식

  1. 사용자(클라이언트)가 URL을 요청하면 Http Request가 요청된 URL을 Servlet Container로 전송한다.
  2. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
  3. web.xml을 기반으로 사용자가 요청한 url이 어떤 서블릿(컨트롤러)에 대한 요청인지를 찾는다.
  4. 해당 서블릿에서 service 메소드를 호출한 후 클라이언트의 get, post 여부에 따라
    doGet() 혹은 doPost()를 호출한다.
  5. doGet() / doPost() 메소드는 동적 페이지를 생성하고, HttpServletResponse 객체에 응답을 보낸다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체는 소멸된다.

Servlet Container

  • 클라이언트의 요청을 받아주고, 응답할 수 있도록 웹소캣으로 서버와 통신한다.
  • 서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리해 주는 것이 필요한데
    이러한 역할을 수행하는 것이 서블릿 컨테이너이다.
  • 서블릿을 요구사항 명세서라고 표현한다면, 서블릿 컨테이너는 그 명세서를 보고 개발하는 개발자이다.

Servlet Container의 역할

  • 웹서버와의 통신을 지원한다.
    • 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있도록 소켓을 만들고, listen, accept 등을 API로 제공해 복잡한 과정을 생략할 수 있게 해 준다.
  • 객체의 라이프 사이클을 관리한다.
    • 서블릿들의 생성, 실행, 파괴를 담당한다.
    • 초기화 메소드를 호출
    • 요청이 들어오면 적절한 서블릿 메소드를 호출
    • 서블릿 소멸 시 가비지 컬렉션을 진행
  • 멀티스레드 지원 및 관리
    • 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 생성하고,
      메소드 실행 후 자동으로 소멸된다.
  • 선언적인 보안 관리
    • 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바클래스에 구현해 놓지 않아도 된다.