웹 개발 기초/자바 웹을 다루는 기술

애너테이션을 이용한 서블릿 매핑

sungw00 2023. 2. 14. 15:20
728x90

web.xml에 여러 서블릿을 설정할 경우 복잡해진다는 단점이 있다.

이러한 단점을 각 서블릿 클래스에 기호(@)를 이용해서 서블릿 표시를 해주면 훨씬 가독성이 좋아지는데 이처럼 소스 코드에 직접 기능을 설정하는 방법을 애너테이션이라고 한다.

 

톰캣 7 버전부터는 서블릿 매핑을 web.xml 외에 애너테이션을 이용해 서블릿 클래스에 직접 설정할 수 있는 기능이 추가되었다.

두 가지 버전 다 많이 사용되지만 애너테이션을 이용하여 효율적으로 서블릿들을 매핑하는 방법을 알아보자.

 

애너테이션이 적용되는 클래스는 반드시 HttpServlet 클래스를 상속받아야 하고 애너테이션을 이용해 서블릿을 매핑하기 위해 @WebServlet을 이용하면 된다.

 

패키지 우클릭 -> New -> Servlet 선택

Class name을 설정한 후 Next > 클릭

URL mappings의 기본으로 설정되어 있는 /ThirdServlet을 선택 후 Edit... 클릭

 /third로 수정후 OK 클릭

수정된 것을 확인한 후 Next > 클릭

Constructors from superclass 체크를 해제한 후 오버라이딩 할 생명주기 메서드를 선택한다. 

init, destroy, doGet, doPost를 체크한 후 Finish 클릭

애너테이션에 수정한 매핑 이름 third가 추가된 것을 확인할 수 있다.

이후에는 다음과 같이 메시지 출력 기능을 추가하여 코드를 작성한다.

package sec01.ex01;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ThirdServlet
 */
@WebServlet("/third")
public class ThirdServlet extends HttpServlet {
	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		System.out.println("ThirdServlet init 메서드 호출");
	}

	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		System.out.println("ThirdServlet destroy 메서드 호출");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("ThirdServlet doGet 메서드 호출");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("ThirdServlet doPost 메서드 호출");
	}

}

그리고 브라우저에서 http://localhost:8090/pro01/third 로 요청해보자.

주의할 점은 매핑 이름을 설정할 때 이미 사용된 다른 매핑 이름과 중복되지 않도록 주의해야 한다. 

예를 들어 /first라는 매핑 이름이 이미 사용중이라면 다음과 같은 오류 메시지가 출력되며 서버를 실행할 수 없다.

728x90