web03 프로젝트에서 자바 패키지 'lesson03.servlets'에 javax.servlet.Servlet 인터페이스를 구현한 'HelloWorld'클래스를 만든다.
package lesson03.servlets;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloWorld implements Servlet {
//Servlet 구현 : 서블릿 클래스는 반드시 javax.servlet.Servlet 인터페이스를 구현해야 한다.
//서블릿 컨테이너가 서블릿에 대해 호출할 메서드를 정의한 것이 Servlet 인터페이스다.
/*
1. 서블릿 생명주기(생성과 실행, 소멸 - Lifecycle)와 관련된 메소드 : init(), service(), destroy()
2. 서블릿 정보를 추출할 필요가 있을 때 호출하는 메소드(보조 메소드) : getServletConfig(), getServletInfo()
(서블릿 컨테이너 관리자 페이지에서 서블릿 정보를 출력할 때도 사용)
*/
ServletConfig config;
/**
* init() : 서블릿 컨테이너가 서블릿 생성 후 초기화 작업을 수행하기 위해 호출하는 메소드
* EX) DB 연결, 외부 스토리지 서버 연결, 프로퍼티 로딩 등 클라이언트 요청 처리의 필요한 자원 미리 준비
* @param config
* @return
* @throws ServletException
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init() 호출됨");
this.config = config;
}
/**
* destroy() : 서블릿 컨테이너가 종료되거나 웹 애플리케이션이 멈출 때, 해당 서블릿을 비활성화 시킬 때 호출되는 메소드
* EX) 서비스 수행을 위해 확보했던 자원 해제, 데이터 저장 등 마무리 작업
* @param
* @return
* @throws
*/
@Override
public void destroy() {
System.out.println("destroy() 호출됨");
}
/**
* service() : 클라이언트가 요청할 때마다 호출되는 메소드, 실질적으로 서비스 작업을 수행
* EX) 서블릿이 해야 할 일
* @param request, response
* @return
* @throws ServletException, IOException
*/
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("service() 호출됨");
}
/**
* getServletConfig() : 서블릿 설정 정보를 다루는 ServletConfig 객체 반환.
* EX) 서블릿 이름, 서블릿 초기 매개변수 값, 서블릿 환경정보를 얻을 수 있다.
* @param
* @return this.config
* @throws
*/
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig() 호출됨");
return this.config;
}
/**
* getServletInfo() : 서블릿을 작성한 사람에 대한 정보, 서블릿 버전, 권리 등을 담은 문자열 반환
* EX) 서블릿 작성자 정보, 서블릿 버전, 권리 등을 담은 문자열
* @param
* @return "version=1.0;author=eomjinyoung;copyright=eomjinyoung 2013"
* @throws
*/
@Override
public String getServletInfo() {
System.out.println("getServletInfo() 호출됨");
return "version=1.0;author=eomjinyoung;copyright=eomjinyoung 2013";
}
}
javax.servlet.Servlet 인터페이스를 구현하여 5개의 메소드를 오버라이드한 구조이다.
서블릿 배치 정보를 담은 배치 설명서 파일(web.xml)을 작성했다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>web03</display-name>
<!-- 서블릿 배치 정보 -->
<!-- 서블릿 선언 -->
<!--
servlet : 서블릿 별명과 서블릿 클래스명 설정
servlet-name : 서블릿 별명, 클래스 이름일 필요가 없고 공백을 포함해도 된다.
servlet-class : 패키지 이름을 포함한 서블릿 클래스명 (QName = Fully qualified name = 패키지명 + 클래스명)
-->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>lesson03.servlets.HelloWorld</servlet-class>
</servlet>
<!-- 서블릿을 URL과 연결 -->
<!--
servlet-mapping : 서블릿과 URL을 매핑
servlet-name : servlet태그에서 정의한 서블릿 별명
url-pattern : 서블릿을 요청할 때 클라이언트가 사용할 URL 설정('/'는 컨텍스트 루트, 즉 웹 애플리케이션 루트를 의미)
-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
<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>
</web-app>
웹 애플리케이션의 배치 정보를 담은 web.xml 파일을 배치 기술서(Deployment Descriptor) 또는 약서 'DD파일'이라고 부른다. 따라서 서블릿을 만들었으면 DD파일에 배치 정보를 등록해야 클라이언트에서 해당 서블릿의 실행을 요청할 수 있다. DD파일에 등록되지 않은 서블릿은 서블릿 컨테이너가 찾을 수 없다.
web03 프로젝트를 톰캣 실행환경에 추가하여 서버를 실행한 후 웹 브라우저 주소창에 http://localhost:9999/web03/Hello 를 입력한다.

이렇게 서블릿을 실행하고 싶으면 웹 브라우저에 URL을 입력하고 서버에 요청하면 된다.

주소창에 입력했던 URL의 '/Hello'가 web.xml의 url-pattern태그에 설정했던 HelloWorld 서블릿의 URL 이름이다.
서블릿을 실행했더니 웹 브라우저는 빈 화면을 출력하고 있다. HelloWorld 서블릿이 실행될 때 어떤 내용도 클라이언트로 출력하지 않았기 때문이다. HelloWorld 서블릿의 메소드 안에 입력했던 System.out.println() 메소드는 클라이언트로 출력하는 것이 아닌 서버 콘솔창으로 출력하는 것이다.

참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
17. 웹 애플리케이션 배치 (1) (1) | 2022.01.11 |
---|---|
16. 서블릿 만들기 (2) (0) | 2022.01.10 |
14. 웹 프로젝트 준비 (0) | 2022.01.08 |
13. 서블릿, JSP vs. Java EE vs. WAS (0) | 2022.01.08 |
12. CGI프로그램과 서블릿 (0) | 2022.01.07 |
댓글