관리 메뉴

거니의 velog

(7) 서블릿이란? - 2 본문

Java_Servlet

(7) 서블릿이란? - 2

Unlimited00 2023. 8. 22. 15:51

7. 다수의 서블릿 매핑하기

* 온라인 쇼핑몰 같은 경우 대부분 상품 조회, 주문, 회원 관리 등의 기능으로 이루어져 있다. 만약 이런 기능을 모두 서블릿 하나에 만들어서 제공한다면 소스가 복잡해져 관리하기 불편할 것이다. 따라서 일반적인 웹 애플리케이션은 각 기능에 대한 서블릿을 따로 만들어서 서비스를 제공한다. 즉, 프로젝트에서 여러 개의 서블릿을 만들어 사용한다.

* 이번에는 다른 서블릿으로 SecondServlet.java로 추가해 본다.

package sec01.ex01;

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 SecondServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		System.out.println("init 메서드 호출>>>>");
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		System.out.println("doGet 메서드 호출>>>>");
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy 메서드 호출>>>>");
	}
	
}

* 다시 SecondServlet.java를 web.xml에 매핑해 보자. 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

// <servlet> 태그끼리 위치시킨다.
  <servlet>
  	<servlet-name>aaa</servlet-name>
  	<servlet-class>sec01.ex01.FirstServlet</servlet-class>
  </servlet>
  <servlet>
  	<servlet-name>bbb</servlet-name> // </servlet-name> 태그 값은 다른 </servlet-name> 태그 값과 절대 같으면 안 된다.
  	<servlet-class>sec01.ex01.SecondServlet</servlet-class>
  </servlet>
  
// <servlet-mapping> 태그끼리 위치시킨다.
  <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>

* 프로젝트의 web.xml 변경 사항을 반영하려면 톰캣을 재실행해야 한다. Servers의 빨간색 버튼을 클릭해 톰캣을 종료한 후 다시 녹색 버튼을 클릭해 톰캣을 실행한다.

* 이후 브라우저에서 /second라는 매핑 이름으로 요청했을 때 결과이다. 이번에는 SecondServlet 클래스들의 메서드가 호출되어 메시지를 출력한다.

* 이처럼 여러 개의 서블릿을 web.xml에 매핑하려면 <servlet> 태그와 <servlet-mapping> 태그를 분리한 후 <servlet-name> 태그의 값을 다른 값으로 설정해야 한다.