서블릿에서 @WebServlet 애너테이션으로 여러 URL 패턴 처리하기

서블릿에서 @WebServlet 애너테이션으로 여러 URL 패턴 처리하기

@WebServlet 애너테이션을 사용하면 서블릿을 특정 URL 패턴과 매핑하여 HTTP 요청을 처리할 수 있습니다. 일반적으로 하나의 URL 경로를 매핑하는 방식으로 많이 사용되지만, 서블릿은 여러 개의 경로를 동시에 처리할 수 있도록 설정할 수도 있습니다. 이를 통해 다양한 경로로 들어오는 요청을 하나의 서블릿에서 처리할 수 있습니다.

이번 글에서는 @WebServlet 애너테이션을 활용하여 여러 개의 URL 패턴을 처리하는 방법과 와일드카드(*)를 사용하여 경로를 유연하게 설정하는 방법에 대해 알아보겠습니다.

1. 기본 URL 패턴 매핑

기본적으로 @WebServlet 애너테이션은 하나의 URL 패턴과 서블릿을 매핑합니다. 예를 들어, 아래 코드는 /hello 경로에 대해 요청을 처리하는 서블릿을 정의합니다.

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.setContentType("text/html");
        response.getWriter().write("<h1>Hello, BlueShareHub!</h1>");
    }
}

2. 여러 개의 URL 패턴 처리

@WebServlet 애너테이션은 배열을 사용하여 여러 개의 URL 패턴을 동시에 처리할 수 있습니다. 다음은 두 개의 경로 /hello/greet에 대해 동일한 서블릿을 매핑하는 예제입니다.

package com.bluesharehub;

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

@WebServlet({"/hello", "/greet"})
public class MultiPathServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 응답의 콘텐츠 타입 설정
        response.setContentType("text/html;charset=UTF-8");

        // 클라이언트에게 반환할 HTML 내용 작성
        response.getWriter().write("<h1>여러 경로에서 안녕하세요!</h1>");
    }
}

이 서블릿은 /hello/greet 경로로 들어오는 요청을 모두 처리할 수 있습니다.

여러 개의 URL 패턴 처리 예제 코드 실행 결과 화면

3. 와일드카드(*)를 사용한 URL 패턴 처리

와일드카드(*)를 사용하여 특정 패턴을 따르는 모든 경로를 처리할 수도 있습니다. 예를 들어, /user/* 패턴을 사용하면 /user로 시작하는 모든 경로를 처리할 수 있습니다.

package com.bluesharehub;

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

@WebServlet("/user/*")
public class WildcardServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 요청된 경로에서 /user 이후의 경로 정보 가져오기
        String pathInfo = request.getPathInfo(); 
        
        // 응답의 콘텐츠 타입 설정
        response.setContentType("text/html;charset=UTF-8");

        // 클라이언트에게 반환할 HTML 내용 작성
        response.getWriter().write("<h1>요청된 경로: " + pathInfo + "</h1>");
    }
}

이 서블릿은 /user/profile, /user/settings와 같은 경로를 처리하며, getPathInfo() 메서드를 통해 경로 정보를 가져올 수 있습니다.

와일드카드(*)를 사용한 URL 패턴 처리 예제 코드 실행 결과 화면

4. URL 패턴 매핑 규칙

서블릿의 URL 매핑 규칙은 다음과 같습니다.

  • 정확한 매핑: URL 패턴과 경로가 완전히 일치하는 경우
  • 디렉토리 기반 매핑: /*을 사용하여 디렉토리 하위의 모든 경로를 매핑
  • 확장자 매핑: *.do와 같이 특정 확장자를 가지는 요청 처리
  • 기본 서블릿 매핑: /는 모든 요청을 처리하지만, JSP 페이지보다 우선하지 않음

이러한 규칙을 활용하여 다양한 URL 경로를 효율적으로 관리할 수 있습니다.

결론

@WebServlet 애너테이션을 사용하여 서블릿을 여러 경로에 매핑하고, 와일드카드를 사용해 경로 패턴을 유연하게 처리할 수 있습니다. 이를 통해 클라이언트의 다양한 요청을 하나의 서블릿에서 처리하거나, 특정 패턴의 경로에 맞춰 서블릿을 적절히 분배할 수 있습니다.

함께 보면 좋은 이전 게시글

위로 스크롤