서블릿이란?
: 쉽게 말해서 서버에서 처리해야하는 업무를 대신 처리해주는 것이다. 즉 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술이다.
@WebServlet(name="helloServlet", urlspatterns = "/hello")
public class HelloServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response){
}
}
- urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
- HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용
- 헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메서드와 Body의 Stream을 읽어 들이는 메서드
- HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
- 클라이언트의 요청에 의한 응답을 보내기 위한 HttpServleResponse 객체를 생성하여 서블릿에게 전달
- 객체를 활용하여 content type, 응답 코드, 응답 메시지 등을 전송
HTTP 요청, 응답 흐름
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
- 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
- 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
- WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성
서블릿 컨테이너
- 서블릿을 지원하는 WAS를 서블릿 컨테이너라 한다.
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리해준다
- 서블릿 객체는 싱글톤으로 관리한다.
- 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용한다
- 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근한다
- 서블릿 컨테이너 종료시 함께 종료한다
- 동시 요청을 위한 멀티스레드 처리를 지원한다
- 서블릿 컨테이너는 해당 서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행한다
- 통신을 지원한다
- 클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어서 통신한다
- 보안 관련된 기능을 지원한다
- 서블릿 또는 자바 클래스 안에 보안 관련된 메서드를 구현하지 않아도 된다