[Servlet] 웹 서버의 구동, 종료와 서블릿의 라이프 사이클(Life-Cycle)
앎/web 2014. 3. 3. 17:04 |웹 서버 구동은 아래의 순서로 진행된다.
순서 |
처리 내용 |
해당 파일 및 폴더 |
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()가 호출 되어야 하는데 왜 안나오나????
'앎 > web' 카테고리의 다른 글
[Servlet] 서블릿 주요 클래스 (0) | 2014.03.04 |
---|---|
[Servlet] web.xml 설정 파일 (0) | 2014.03.04 |
[Servlet] 웹 프로그램의 파일 구조 (0) | 2014.02.27 |
[Servlet] MVC 패턴 (0) | 2014.02.26 |
자바 입출력(I/O) - 객체(Obejct) 입출력 (0) | 2014.02.24 |