English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Servlet의 생명주기는 생성부터 파괴까지의 전체 과정으로 정의될 수 있습니다. 다음은 Servlet이 따르는 과정입니다:
Servlet이 초기화된 후 호출됩니다 init () 메서드
Servlet 호출 service() 메서드를 통해 클라이언트의 요청을 처리합니다.
Servlet가 파괴되기 전에 호출되는 destroy() 메서드
마지막으로, Servlet은 JVM의 가비지 컬렉터에 의해 가비지 수집됩니다.
지금부터 생명주기 메서드에 대해 자세히 논의해 보겠습니다.
init 메서드는 한 번만 호출되도록 설계되었습니다. 첫 번째 Servlet이 생성될 때 호출되며, 이후 각 사용자 요청 시 호출되지 않습니다. 따라서, Applet의 init 메서드와 같이 한 번의 초기화에 사용됩니다.
Servlet은 사용자가 해당 Servlet의 URL을 처음 호출할 때 생성되며, 하지만 서버가 첫 번째로 시작할 때 Servlet이 로드되도록 지정할 수도 있습니다.
사용자가 Servlet을 호출할 때마다, Servlet 예제가 생성되며, 각 사용자 요청마다 새로운 스레드가 생성되어 doGet 또는 doPost 메서드에 적절한 시기에 넘겨집니다. init() 메서드는 Servlet의 전체 생명주기에 사용될 데이터를 간단히 생성하거나 로드합니다.
init 메서드의 정의는 다음과 같습니다:
public void init() throws ServletException { // 초기화 코드... }
service() 메서드는 실제 작업을 수행하는 주요 메서드입니다. Servlet 컨테이너(즉, 웹 서버)는 클라이언트(브라우저)에서 오는 요청을 처리하고, 형식화된 응답을 클라이언트에게 반환하기 위해 service() 메서드를 호출합니다.
서버가 Servlet 요청을 받을 때마다, 서버는 새로운 스레드를 생성하고 서비스를 호출합니다. service() 메서드는 HTTP 요청 유형(GET, POST, PUT, DELETE 등)을 확인하고 적절한 시기에 doGet, doPost, doPut, doDelete 등의 메서드를 호출합니다.
이 메서드의 특징은 다음과 같습니다:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }
service() 메서드는 컨테이너에서 호출되며, service 메서드는 적절한 시기에 doGet, doPost, doPut, doDelete 등의 메서드를 호출합니다. 따라서, service() 메서드에 대해 어떤 작업도 수행할 필요가 없으며, 클라이언트에서 오는 요청 유형에 따라 doGet() 또는 doPost()를 재정의하면 됩니다.
doGet()와 doPost() 메서드는 매번 서비스 요청에서 가장 자주 사용되는 메서드입니다. 이 두 메서드의 특징은 다음과 같습니다.
GET 요청은 URL에서의 정상적인 요청이나, METHOD이 지정되지 않은 HTML 폼에서 온 요청으로, doGet() 메서드가 처리합니다.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 코드 }
POST 요청은 METHOD가 POST로 특별히 지정된 HTML 양식에서 오며, doPost() 메서드가 처리합니다.
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 코드 }
destroy() 메서드는 Servlet 생명 주기의 끝에서 호출되는 단 한 번 호출됩니다. destroy() 메서드는 Servlet이 데이터베이스 연결을 닫고, 백그라운드 스레드를 중지하고, 쿠키 목록이나 클릭 카운터를 디스크에 쓰고, 그러한 유사한 정리 작업을 수행할 수 있습니다.
destroy() 메서드 호출 후, servlet 객체가 가비지 컬렉션에 표시됩니다. destroy 메서드는 다음과 같이 정의됩니다:
public void destroy() { // 종료 코드... }
아래 그림은 표준 Servlet 생명 주기 계획을 보여줍니다.
서버에 도착한 첫 번째 HTTP 요청이 Servlet 컨테이너에 위탁됩니다.
service() 메서드 호출 전에 Servlet를 로드합니다.
그런 다음 Servlet 컨테이너는 여러 스레드에서 생성된 여러 요청을 처리하고, 각 스레드는 단일 Servlet 예제의 service() 메서드를 실행합니다.