프로그래밍 언어/자바 웹

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를 선택합니다.

New 아이콘 클릭 후 Dynamic Web Project 선택

 

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

프로젝트 이름 입력 후 Next 클릭

 

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

경로 확인 후 Next 클릭

 

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

옵션 체크 후 Finish 클릭

 

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

Build Path  >  Configuration Buid Path... 선택

 

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

Libraries 탭 클릭 후 Add External JARs... 클릭

 

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

servlet-api.jar 을 선택 후  열기

 

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

servlet-api.jar 클래스 패스 설정 확인 후 Apply and Close 클릭

 

첫 번쩨 서블릿 만들기

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

Java Resource > src/main/java에서 마우스 오른쪽 버튼을 클릭한 후 New > Package 선택

 

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

패키지 이름으로 sec01.ex01 입력

 

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

sec01.ex01 패키지 생성 확인

 

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

마우스 오른쪽 버튼 클릭 후 New > Class 선택

 

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

클래스 이름으로 FristServlet 입력 후 Finish 클릭

 

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

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을 선택하여 엽니다.

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...를 선택합니다.

톰캣 서버 선택 후 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를 선택합니다.

New > Class 선택

 

2. 클래스 이름으로 SecondServlet을 입력하고 Finish를 클릭합니다.

클래스 이름으로 SecondServlet 입력 후 Finish 클릭

 

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

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