웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말함. 즉 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종.
클라이언트의 요청에 맞춰 동적인 결과를 만들어 주는 자바 웹 프로그래밍 기술
- 서블릿 컨테이너 안에서 동작함(정적도 가능하지만 과부하가 옴)
- 특징
- 클라이언트 요청에 동적으로 응답하는 웹 어플리케이션 컴포넌트
- HTML을 사용하여 응답
- JAVA의 쓰레드를 이용
- MVC 패턴의 Controller 역할을 맡음
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음
- UDP보다 처리 속도가 느림
- HTML 변경 시 서블릿을 재 컴파일해야 한다는 단점이 존재
- 사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성
- web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인 찾음
- 해당 서블릿에서 service메소드를 호출한 후 클라이언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출
- doGet() 또는 doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보냄
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킴
- 서블릿 컨테이너
-
서블릿을 담고 관리해주는 컨테이너 ex) 서블릿이 어떠한 역할을 수행하는 정의서라면, 서블릿 컨테이너는 그 정의서를 보고 수행
-
구현되어 있는 서블릿 클래스의 규칙에 맞게 서블릿을 관리하며 클라이언트의 요청을 받으면 HttpServletRequest와 HttpServletResponse 객체를 생성하여 post, get 여부에 따라 동적인 페이지를 생성하여 응답 → 클라이언트의 요청(request)을 받아주고 응답(response)할 수 있게 웹서버와 소켓으로 통신(tomcat)
-
가능
- 서블릿 생명주기 관리
서블릿 컨테이너는 서블릿의 죽음을 관리. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 찾아서 동작하며 서블릿의 생명이 다하면 가비지 컬렉션을 통해 메모리에서 제거
- 통신 지원
웹 서버와 소켓을 만들어서 클라이언트의 요청을 받고 응답할 수 있는 통신을 지원. 통신을 하기 위한 listen, accept 등의 과정을 API로 제공하여 복잡한 과정을 생략해주기 때문에 개발자가 비즈니스 로직 개발에 집중할 수 있게 도와줌
- 멀티쓰레드 지원 및 관리
서블릿 컨테이너는 클라이언트의 요청을 받을 때마다 새로운 자바 스레드를 생성. 따라서 동시에 여러 요청이 들어와도 멀티쓰레딩 환경에서 동시다발적인 작업을 관리
- 선언적인 보안 관리
보안 관련 기능을 제공하기 때문에 개발자는 서블릿에 보안 관련 메서드를 구현하지 않아도 됨