서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다.
자바로 작동되어 있어 자바의 일반적인 특징을 모두 가지지만, 일반 자바 프로그램과 달리 독자적으로 실행되지 못한다. 그래서 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 차이가 있다.
서블릿 동작 과정
➞ 클라이언트가 웹 서버에 요청
➞ 웹 서버는 요청을 톰캣과 같은 웹 애플리케이션 서버(WAS)에 위임
➞ WAS는 각 요청에 해당하는 서블릿을 실행
➞ 서블릿은 요청에 대한 가능을 수행 후, 결과 반환하여 클라이언트에 전송
서블릿 특징
- 서버 쪽에서 실행되면서 기능을 수행
- 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공
- 스레드 방식으로 실행
- 자바로 만들어져 자바의 특징(객체지향)을 가짐
- 컨테이너에서 실행
- 컨테이너 종류에 상관없이 실행됨(플랫폼 독립적)
- 보안 기능을 적용하기 쉬움
- 웹 브라우저에서 요청 시 기능을 수행
서블릿 API 계층 구조와 기능
자바로 만들어져 클래스들간의 계층 구조를 가진다.
서블릿 API는 Servlet과 ServletConfig 인터페이스를 구현해 제공하며 GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현한다. 그리고 이 GenericServlet을 다시 HttpServlet이 상속 받는다.
서블릿 API 기능
서블릿 구성요소 | 기능 |
Servlet 인터페이스 | - javax.servlet 패키지에 선언 - Servlet 관련 추상 메서드 선언 - init(), service(), destory(), getServletInfo(), getServletConfig() 선언 |
ServletConfig 인터페이스 | - javax.servlet 패키지에 선언 - Servlet 기능 관련 추상 메서드 선언 - getInitParameter(), getInitParameterNames(), getServletContext(), getServletName() 선언 |
GenericServlet 인터페이스 | - javax.servlet 패키지에 선언 - 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스 - GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현 |
HttpServlet 인터페이스 | - javax.servlet.http 패키지에 선언 - GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행 - 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용 - 요청 시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출 |
GenericServlet은 일반적인 여러 통신 프로토콜에 대한 클라이언트/서버 프로그램에서 서블릿 기능을 구현하는 클래스이다. HttpServlet은 이 GenericServlet을 상속받는데, HTTP 프로토콜을 이용하는 서블릿 기능을 구현하는 클래스이다.
서블릿은 이 HttpServlet을 상속받아 HTTP 프로토콜로 동작하는 웹 브라우저의 요청을 처리한다.
서블릿의 생명주기 메소드
서블릿 생명주기(Life Cycle) 메서드란 서블릿 실행 단계마다 호출되어 기능을 수행하는 콜백 메소드이다.
서블릿도 자바 클래스이므로 실행하면 초기화 과정 그리고 메모리에 인스턴스를 생성하여 서비스를 수행한 후 다시 소멸하는 과정을 거친다. 이러한 단계를 거칠 때마다 서블릿 클래스의 메서드가 호출되어 초기화, 데이터베이스 연동, 마무리 작업을 수행한다. 각 과정에서 호출되어 기능을 수행하는 메서드들이 서블릿 생명주기 메소드이다.
생명주기 단계 | 호출 메서드 | 특징 |
초기화 | init() | - 서블릿 요청 시 맨 처음 한 번만 호출 - 서블릿 생성 시 초기화 작업을 주로 수행 |
작업 수행 | doGet() doPost() |
- 서블릿 요청 시 매번 호출 - 실제로 클라이언트가 요청하는 작업을 수행 |
종료 | destory() | - 서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출 서블릿의 마무리 작업을 주로 수행 |
init() 메서드는 실행 초기에 서블릿 기능 수행과 관련된 기능을 설정하는 용도로 많이 사용된다.
destory()는 서블릿이 메모리에서 소멸될 때 여러 가지 종료 작업을 수행하는데, 이런 기능이 필요없다면 생략도 가능하다.
doGet()이나 doPost() 같이 do로 시작하는 메서드는 서블릿의 핵심 기능을 처리하므로 반드시 구현해야 한다.
'Web > Servlet, Jsp' 카테고리의 다른 글
[Servlet] 웹 브라우저에서 서블릿으로 데이터 전송(GET/POST) (0) | 2021.09.20 |
---|---|
[Servlet] 서블릿의 응답(Response)과 요청(Request) (0) | 2021.09.16 |