서블릿의 구동 절차는 다음과 같다(1~6).
1. 클라이언트의 요청이 들어오면 서블릿 컨테이너는 서블릿을 찾는다.
2. 만약 서블릿이 없다면, 서블릿 클래스를 로딩하고 인스턴스를 준비한 후 생성자를 호출한다. 그리고 서블릿 초기화 메소드인 init()를 호출한다.
3. 클라이언트의 요청을 처리하는 service() 메소드를 호출한다. (클라이언트 요청에 대해 서비스를 제공)
4. service() 메소드에서 만든 결과를 HTTP 프로토콜에 맞추어 클라이언트에 응답하는 것으로 요청 처리를 완료한다.
5. 만약 시스템 운영자가 서블릿 컨테이너를 종료하거나, 웹 애플리케이션을 종료한다면,
6. 서블릿 컨테이너는 종료되기 전 서블릿이 마무리 작업을 수행하도록 생성된 모든 서블릿에 대해 destroy() 메소드를 호출한다.
톰캣 서버를 실행한 뒤 http://localhost:9999/web03/Hello 링크를 실행한다. 이후 '새로 고침' 버튼을 여러 번 클릭한다. 이후 톰캣 서버를 종료한다.
init()가 먼저 호출된 후 service()가 호출된다. 웹 페이지를 '새로 고침' 하면 서버에 HelloWorld의 실행을 다시 요청한다. 이 때 init()는 호출되지 않고 service()만 호출되는데 이미 HelloWorld의 객체가 존재하기 때문이다. 서블릿 컨테이너는 클라이언트로부터 요청을 받으면 해당 서블릿을 찾고 만약 없다면 해당 서블릿의 인스턴스를 생성한다. 한 번 서블릿 객체가 생성되면 웹 애플리케이션이 종료될 때까지 계속 유지된다.
(참고 : 서블릿 인스턴스는 하나만 생성되어 웹 애플리케이션이 종료될 때까지 사용된다. 따라서 인스턴스 변수에 특정 사용자를 위한 데이터를 보관해서는 안되고, 또 클라이언트가 보낸 데이터를 일시적으로 보관하기 위해 서블릿의 인스턴스 변수를 사용해서도 안 된다)
destroy()가 호출되는 경우는 톰캣 서버를 종료할 때이다.
웹 서버에게 요청할 때 서블릿 이름을 생략하고 디렉터리 위치까지만 지정한다면 웹 서버는 해당 디렉터리에서 웰컴 파일(Welcome Files)을 찾아서 보내준다. 웰컴 파일이란, 디렉토리의 기본 웹 페이지이다. 디렉토리를 방문했을 때 그 디렉토리에 맞는 기본 화면을 제공한다.
http://localhost:9999/web03(컨텍스트 루트 디렉토리의 웰컴 파일 요청)/
이렇게 링크에서 서블릿 이름을 뺀 디렉토리의 위치까지만 지정한다. 웰컴 파일의 이름은 web.xml의 welcome-file-list태그를 사용하여 설정할 수 있다. 이 태그의 하위 태그로 welcome-file태그에 웰컴 파일의 이름을 적어 넣으면 된다.
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
위와 같이 여러 개의 웰컴 파일을 등록하면 디렉토리에서 웰컴 파일을 찾을 때 위에서부터 아래로 순차적으로 조회하기 때문에 먼저 찾은 것을 클라이언트로 보낸다.
http://localhost:9999/web03/ 링크를 실행한다.
web03은 웹 애플리케이션 루트 디렉토리를 의미한다. web03 프로젝트의 webapp 폴더를 확인하면 web.xml에서 설정한 웰컴 파일이 하나도 없다.
이렇게 톰캣 서버가 웰컴 파일을 찾을 수 없었기에 오류 페이지를 출력한 것이다.
webapp 폴더에 default.html 파일을 생성한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>환영합니다.</title>
</head>
<body>
<h1>default.html</h1>
<p>환영합니다.</p>
</body>
</html>
이후 웹 브라우저를 '새로 고침'한다.
이렇게 화면이 출력된다.
webapp 폴더에 index.html 파일을 생성하고 다시 웹 브라우저를 '새로 고침'한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>환영합니다.</title>
</head>
<body>
<h1>index.html</h1>
<p>환영합니다.</p>
<p>먼저 선언된 것을 먼저 찾는다.</p>
</body>
</html>
이렇게 화면이 출력된다.
디렉토리에 웰컴 파일이 여러개 존재할 경우 web.xml의 welcome-file-list태그에 선언된 순서대로 찾는다. index.html이 default.html보다 먼저 선언되었기 때문에 index.html의 결과가 출력되었다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
18. 웹 애플리케이션 배치 (2) (0) | 2022.01.12 |
---|---|
17. 웹 애플리케이션 배치 (1) (1) | 2022.01.11 |
15. 서블릿 만들기 (1) (0) | 2022.01.09 |
14. 웹 프로젝트 준비 (0) | 2022.01.08 |
13. 서블릿, JSP vs. Java EE vs. WAS (0) | 2022.01.08 |
댓글