FirstServlet을 이용한 실습

사용자 정의 서블릿 만들기
실제 웹 프로그래밍에서 사용되는 사용자 정의 서블릿은 HttpServlet 클래스를 상속받아서 만듭니다.
그리고 3개의 생명주기 메서드, 즉 init(), doGet(), destory() 메서드를 오버라이딩해서 기능을 구햔합니다.
사용자 정의 서블릿 형식
public class FirstServlet extends HttpServlet {
@Override
public void init() {
...
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) {
...
}
@Override
public void destory() {
...
}
}
톰캣의 servlet-api.jar 클래스 패스 설정하기
1. 이클립스 상단의 New 아이콘을 클릭한 후 Dynamic Web Project를 선택합니다.

2. 프로젝트 이름을 pro05로 입력한 후 Next를 클릭합니다.

3. 경로를 확인한 후 Next를 클릭합니다.

4. Generate web.xml deployment descriptor 옵션의 체크박스에 체크한 후 Finish를 클릭하빈다.

5. 프로젝트 이름을 선택하고 마우스 오른쪽 버튼을 클릭한 후 Build Path > Configuration Buid Path...를 선택합니다.

6. 설정창에서 Libraries 탭을 클릭하고 Classpath를 선택한 후 Add External JARs...를 클릭합니다.

7. CATALINA_HOME(톰캣 루트 디렉터리)의 lib 디렉터리에 있는 servlet-api.jar을 선택한 후 열기를 클릭합니다.

8. servlet-api.jar 클래스의 패스 설정을 확인한 후 Apply and Close를 클릭해 종료합니다.

첫 번쩨 서블릿 만들기
1. pro05 프로젝트의 Java Resources 디렉터리 하위의 src/main/java를 선택하고 마우스 오른쪽 버튼을 클릭한 후 New > Package를 선택합니다.

2. sec01.ex01이라는 이름으로 패키지를 생성합니다.

3. Project Explorer에서 src 하위에 sec01.ex01이라는 패키지가 생긴 것을 확인할 수 있습니다.

4. 이 패키지 이름 위에서 마우스 오른쪽 버튼을 클릭한 후 New > Class를 선택합니다.

5. 클래스 이름으로 FirstServlet을 입력한 후 Finish를 클릭합니다.

6. FirstServlet.java가 생성된 것을 확인할 수 있습니다.

7. FirstServlet.java에 다음과 같이 자바 코드를 작성합니다.
package sec01.ex01;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init 메소드 호출");
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메소드 호출");
}
@Override
public void destroy() {
System.out.println("destory 메소드 호출");
}
}
우리가 만든 서블릿은 HttpServlet을 상속받고 3개의 생명주기 메서드를 차례로 구현합니다. 각 메서드는 호출 시 매시만 출력합니다.
서블릿 매핑하기

1. 각 프로젝트에 있는 web.xml에 설정합니다.
2. <servlet> 태그와 <servlet-mapping> 태그를 이용합니다.
3. 여러 개의 서블릿 매핑 시에는 <servlet> 태그를 먼저 정의하고 <servlet-mapping> 태그를 정의합니다.
실제 서블릿 매핑을 보면 <servlet> 태그와 <servlet-mapping> 태그의 하위 태그에 <servlet-name> 태그가 공통으로 있습니다. <servlet-name> 태그의 값 aaa가 <servlet>과 <servlet-mapping> 태그를 연결시켜 줍니디.
그러면 웹 브라우저에서 <url-pattern> 태그의 /first로 요청할 경우 aaa값을 가지는 <servlet> 태그를 찾아 실제 서블릿인 sec01.ex01.FirstServlet을 실행합니다.
1. pro05 프로젝트의 WebContent > WEB-INF 폴더를 클릭한 후 web.xml을 선택하여 엽니다.

2. web.xml에 <web-app> 태그의 하위 태그를 지우고 다음과 같이 서블릿 매핑을 작성합니다.
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>sec01.ex01.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
톰캣에 프로젝트 실행
이제 새로 만든 프로젝트를 다시 톰캣 서버에 등록한 후 톰캣을 다시 실행하여 웹 브라우저에서 서블릿 매핑 이름인 /first로 요청하겠습니다.
1. 톰캣 서버를 선택하고 마우스 오른쪽 버튼을 클릭한 후 Add and Remove...를 선택합니다.

3. pro05 프로젝트를 선택한 후 Add를 클릭하여 추가하고 Finish를 클릭합니다.

3. 톰캣에 정상적으로 새 프로젝트가 등록된 것을 확인할 수 있습니다.

브라우저에서 서블릿 요청하기
웹 브라우저에서 서블릿을 요청하려면 다음과 같이 웹 브라우저 주소 창에 프로젝트 이름까지 입력하고 web.xml에 매핑한 매핑 이름을 슬래시(/) 다음에 입력한 후 요청하면 됩니다.
- http://IP주소:포트번호/프로젝트이름(컨텍스트이름)/서블릿매핑이름
- 요청 예: http:127.0.0.1:8090/pro05/first
1. 이클립스에서 톰캣을 다시 실행합니다.

2. 브라우저에서 서블릿 매핑 이름으로 요청합니다.

3. /first로 웹 브라우저에서 요청하면 이클립스 콘솔에 각각의 메서드가 호출되면서 메시지가 출력됩니다.

다수의 서블릿 매핑하기
1. 패키지 sec01.ex01을 선택하고 마우스 오른쪽 버튼을 클릭한 후 New > Class를 선택합니다.
2. 클래스 이름으로 SecondServlet을 입력하고 Finish를 클릭합니다.

3. Project Expolor애 SecondServlet.java가 생성된 것을 확인할 수 있습니다.

4. SecondServlet 클래스를 다음과 같이 작성합니다.
package sec01.ex01;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class SecondServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init 메소드 호출>>>>");
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메소드 호출>>>>");
}
@Override
public void destroy() {
System.out.println("destory 메소드 호출>>>>");
}
}
5. 다시 SecondServlet.java를 web.xml에 매핑해 보겠습니다. 주의할 점은 여러 개의 서블릿을 매핑할 때는 <servlet> 태그와 <servlet-mapping> 태그를 각각 분리해서 작성해야 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" id="WebApp_ID" version="5.0">
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>sec01.ex01.FirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>bbb</servlet-name>
<servlet-class>sec01.ex01.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>bbb</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
</web-app>
6. 프로젝트의 web.xml 변경 사항을 반영하려면 톰캣을 재실행해야 합니다. Servers의 빨간색 버튼을 클릭해 톰켓을 종료한 후 다시 녹색 버튼을 클릭해 톰캣을 재실행합니다.


7. 다음은 브라우저에서 /second라는 매핑 이름으로 요청했을 때의 결과입니다. 이번에는 SecondServlet 클래스의 메소드가 호출되어 메시지를 출력합니다.


이처럼 여러 새의 서블릿을 web.xml에 매핑하려면 <servlet> 태그와 <servlet-mapping> 태그를 분리한 후 <servlet-name> 태그의 값을 다른 값으로 설정해야 합니다.
'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글
| 애너테이션을 이용한 서블릿 매핑 (0) | 2025.04.09 |
|---|---|
| 서블릿 동작 과정 (0) | 2025.04.06 |
| 서블릿의 생명조기 메서드 (0) | 2025.04.03 |
| 서블릿 API 계층 구조와 기능 (0) | 2025.03.31 |
| 서블릿이란? (0) | 2025.03.27 |