# 서블릿
# 서블릿(Servlet)이란?
서블릿은 동적 웹 페이지를 생성하는 데 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술입니다.
웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해줍니다.
쉽게 말해, 브라우저에서 들어오는 HTTP 요청과 데이터베이스 사이의 중재자 역할을 한다고 생각할 수 있습니다.
# 서블릿의 동작과정
클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 WAS에 위임합니다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행합니다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송합니다.
- 클라이언트 요청
- HttpServletRequest, HttpServletResponse 객체 생성
- web.xml이 어느 서블릿에 대해 요청한 것인지 탐색
- 해당하는 서블릿에서 service() 메소드 호출
- doGet() 또는 doPost() 호출
- 동적 페이지 생성 후 ServletResponse 객체에 응답 전송
- 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 양식에서 요청하는 여러 클라이언트를 처리할 수 있습니다.
- 일반적으로 많이 사용됩니다.
# 참고자료
- https://ko.myservername.com/pokesmonseuteo-seukwisimelloga-sdcce-dochaghaessseubnida
- Song's DLog (opens new window)
- 갴발자 디찌 (opens new window)
- https://geekcer.com/difference-between-genericservlet-and-httpservlet/
← 자바 직렬화 서블릿의 라이프 사이클 →