웹 서버 구동은 아래의 순서로 진행된다.
순서 | 처리 내용 | 해당 파일 및 폴더 |
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()가 호출 되어야 하는데 왜 안나오나????
'네트워크 > WAS' 카테고리의 다른 글
java.net.BindException: Address already in use: JVM_Bind (0) | 2015.11.20 |
---|---|
톰캣 Document Root 설정 방법 (0) | 2015.11.20 |
jndi 설정 - tomcat 6 (0) | 2015.11.20 |
MySQL DB 생성/삭제 및 사용자 추가/삭제, 권한 부여 (0) | 2015.11.06 |
아파치 톰캣서버(Apache Tomcat Server) 포트(Port)번호 변경하기 (톰캣 웹서버 포트 설정 방법) (0) | 2015.11.06 |