Servlet이란
참고문서: servlet
웹서버
- 웹서버란 웹페이지를 사용자에게 전송하는 서버이다.
- 웹서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다.
- 대표적인 웹애플리케이션 서버로는 톰캣이 있다.
- 그 외 jBoss, WebLogic, 제우스 등이 대표적인 웹 애플리케이션 서버 프로그램이다.
- 서버는 HTTP 요청에 대한 적절한 HttpServlet/JSP의 실행을 담당한다.
Servlet이란?
- 클라이언트의 요청을 처리하고, 그 결과를 반환하는 클래스이다.
- MVC 패턴에서 Controller로 사용된다.
- HttpServlet을 상속받아야 한다.
- html을 사용하여 요청에 응답한다.
- 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이다.
Servlet의 동작 방식
- 사용자(클라이언트)가 URL을 요청하면 Http Request가 요청된 URL을 Servlet Container로 전송한다.
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
- web.xml을 기반으로 사용자가 요청한 url이 어떤 서블릿(컨트롤러)에 대한 요청인지를 찾는다.
- 해당 서블릿에서 service 메소드를 호출한 후 클라이언트의 get, post 여부에 따라
doGet() 혹은 doPost()를 호출한다.- doGet() / doPost() 메소드는 동적 페이지를 생성하고, HttpServletResponse 객체에 응답을 보낸다.
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체는 소멸된다.
Servlet Container
- 클라이언트의 요청을 받아주고, 응답할 수 있도록 웹소캣으로 서버와 통신한다.
- 서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리해 주는 것이 필요한데
이러한 역할을 수행하는 것이 서블릿 컨테이너이다. - 서블릿을 요구사항 명세서라고 표현한다면, 서블릿 컨테이너는 그 명세서를 보고 개발하는 개발자이다.
Servlet Container의 역할
- 웹서버와의 통신을 지원한다.
- 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있도록 소켓을 만들고, listen, accept 등을 API로 제공해 복잡한 과정을 생략할 수 있게 해 준다.
- 객체의 라이프 사이클을 관리한다.
- 서블릿들의 생성, 실행, 파괴를 담당한다.
- 초기화 메소드를 호출
- 요청이 들어오면 적절한 서블릿 메소드를 호출
- 서블릿 소멸 시 가비지 컬렉션을 진행
- 멀티스레드 지원 및 관리
- 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 생성하고,
메소드 실행 후 자동으로 소멸된다.
- 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 생성하고,
- 선언적인 보안 관리
- 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바클래스에 구현해 놓지 않아도 된다.