# 서블릿

# 서블릿(Servlet)이란?

서블릿

서블릿은 동적 웹 페이지를 생성하는 데 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술입니다.
웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해줍니다.

쉽게 말해, 브라우저에서 들어오는 HTTP 요청과 데이터베이스 사이의 중재자 역할을 한다고 생각할 수 있습니다.

# 서블릿의 동작과정

서블릿의 동작과정

클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 WAS에 위임합니다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행합니다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송합니다.

  1. 클라이언트 요청
  2. HttpServletRequest, HttpServletResponse 객체 생성
  3. web.xml이 어느 서블릿에 대해 요청한 것인지 탐색
  4. 해당하는 서블릿에서 service() 메소드 호출
  5. doGet() 또는 doPost() 호출
  6. 동적 페이지 생성 후 ServletResponse 객체에 응답 전송
  7. HttpServletRequest, HttpServletResponse 객체 소멸

WAS(Web Application Server)

인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어로서,
주로 동적 서버 컨텐츠를 수행합니다.

# web.xml

web.xml은 Web Application의 Deployment Descriptor(배포 설명자)입니다. 모든 웹 어플리케이션은 반드시 하나의 web.xml을 가져야하고, 해당 파일은 WEB-INF폴더 아래에 존재합니다. 이 파일의 설정들은 웹 어플리케이션 시작시 메모리에 로딩됩니다.

서블릿을 작성했다면 해당 서블릿을 사용자가 요청한 경로와 맵핑시켜야 WAS에서 맵핑된 정보를 읽어서 브라우저에서 해당 URL로 HTTP 요청 시 해당 서블릿으로 요청을 전달해 줄 수 있습니다. web.xml은 리소스, 사용되는 서블릿에 대한 정보를 정의하고 서블릿을 URL에 매핑합니다. 또한, 모든 응용 프로그램의 진입 점이며 환영 파일 목록을 보유합니다.

Web.xml에 작성되는 내용

  • ServletContext의 초기 변수
    • '' 부분의 name 과 value 를 이용하여 셋팅합니다.
  • 서블릿 및 jsp에 대한 정의 및 맵핑
    서블릿 매핑
  • MimeType 매핑
    • Multipurpose Internet Mail Extensions의 약자로 파일 변환을 위한 포맷을 의미합니다.
  • Session에 대한 유효시간
  • welcome file list
    • 디렉토리의 기본 웹 페이지입니다.
    • 클라이언트가 디렉토리까지만 지정해서 요청한다면 웰컴 파일을 찾아서 응답해줍니다.
    • 여러 개의 웰컴 파일이 있으면 위에서 부터 아래로 순차적으로 조회하면서 먼저 찾은 것을 클라이언트에게 보여줍니다.
      웰컴파일리스트
  • 오류 핸들러
    오류핸들러

# 서블릿의 유형

  • Generic Servlet
    • 모든 유형의 요청을 처리 할 수 있습니다.
    • 프로토콜 독립적입니다.
    • service() 메소드를 가지고 있습니다.
    • javax.servlet package에 속해 있습니다.
    • Object class를 상속받아 Servlet, ServletConfig, Serializable interfaces를 구현해 제공합니다.
    • 단일 양식에서 여러 클라이언트의 요청을 처리할 수 있습니다.
    • 잘 사용하지 않습니다.
  • Http Servlet
    • 일반 서블릿(Generic Servlet)을 확장한 것입니다.
    • 프로토콜 종속적입니다.
    • doGet(), doPost(), doHead(), doTrace()와 같은 HTTP 메소드를 지원합니다.
    • javax.servlet.http package에 속해 있습니다.
    • Generic Servlet를 상속받아 Serializable interface를 구현해 제공합니다.
    • 여러 HTML 양식에서 요청하는 여러 클라이언트를 처리할 수 있습니다.
    • 일반적으로 많이 사용됩니다.

# 참고자료