웹 서버 구동은 아래의 순서로 진행된다.

순서

 처리 내용

 해당 파일 및 폴더

 1

 웹서버 구동에 필요한 포트 및 설정 정보를 인식한다.

 [톰캣폴더]\conf\server.xml

 2

 모든 프로젝트에 공통으로 적용되는 설정 정보 인식한다.

 [톰캣폴더]\conf\web.xml

 3

 모든 프로젝트에 공통으로 적용되는 라이브러리 파일을 인식한다. 더불어 %JAVA_HOME%\lib , %JAVA_HOME%\jre\lib\ext 폴더 내의 jar 파일들도 자동으로 인식한다.

 [톰캣폴더]\common\lib

 4

 프로젝트별 환경 정보를 인식한다.

 [프로젝트이름]\WEB-INF\web.xml

 5

 프로젝트별 라이브러리를 인식한다.

 [프로젝트이름]\WEB-INF\lib

 6

 프로젝트별로 적용되는 서블릿 파일을 인식한다. 설정에 따라 init()을 실행한다.(<load-on-startup> 태그 사용)

 [프로젝트이름]\WEB-INF\classes


웹 서버 종료 시 아래의 순서로 진행된다.

 순서

 처리 내용 

 해당 파일 및 폴더 

 1

 프로젝트별로 적용되는 서블릿 파일을 인식하고 destroy()를 실행하여 메모리를 해제한다.

 [프로젝트이름]\WEB-INF\classes

 2

 프로젝트별로 환경 설정에 사용된 메모리를 해제한다.

 

 3

 모든 프로젝트에 공통적인 환경을 설정하기 위해 사용된 메모리를 해제한다.

 

 4

 웹 서버를 구동하기 위해 열어둔 포트를 닫는다.

 


서블릿의 라이프 사이클은 다음과 같다

 순서

 처리 내용

 1

 public void init() 또는 public void init(ServletConfig sc) {....} 에 의한 초기화 코드가 실행된다. 

 이는 web.xml 인식 시 <load-on-startup> 태그에 의해 실행되거나, 최초 접속하는 클라이언트에 의해 실행된다.

 2

 public void service(HttpServletRequest request, httpServletResponse response) throws IOException, ServletException {....}

 클라이언트의 요청에 의해 실행되는 메서드로 콘솔 프로그램의 main() 과 같은 역할을 한다.

 3

 public void destroy() {....} 에 의한 메모리 해제

 웹 서버가 종료될 때 실행되어 메모리를 해제한다.


간단한 코드로 서블릿의 라이프 사이클을 확인해보자.

ServeletLifeCycleTest.java

package com.study;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServeletLifeCycleTest extends HttpServlet {
	private int callCount;
	public void init() {
		this.callCount = 0;
		System.out.println("Servlet init() called....");
	}
		
	public void service(HttpServletRequest _request, HttpServletResponse _response) 
		throws ServletException, IOException{
		System.out.println("Servlet service() called (" + (++(this.callCount)) + ")....");
	}
		
	public void destory() {
		System.out.println("Servlet destroy() called....");
	}
}	


web.xml

  ....
  <servlet>
  	<servlet-name>ServletLifeCycle</servlet-name>
  	<servlet-class>com.study.ServeletLifeCycleTest</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>ServletLifeCycle</servlet-name>
  	<url-pattern>/test</url-pattern>
  </servlet-mapping>
  ....


서버에 올리고 주소창에 URL을 입력하면 다음과 같이 init(), service()가 실행됨을 볼 수 있다.


해당 페이지를 리로딩하면 카운트가 계속 올라가며 service()가 호출됨을 확인할 수 있다.


서버 종료 시 destory()가 호출 되어야 하는데 왜 안나오나????



블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

댓글을 달아 주세요