서블릿에서 @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
경로로 들어오는 요청을 모두 처리할 수 있습니다.
▼ 실행 결과

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()
메서드를 통해 경로 정보를 가져올 수 있습니다.
▼ 실행 결과

4. URL 패턴 매핑 규칙
서블릿의 URL 매핑 규칙은 다음과 같습니다.
- 정확한 매핑: URL 패턴과 경로가 완전히 일치하는 경우
- 디렉토리 기반 매핑:
/*
을 사용하여 디렉토리 하위의 모든 경로를 매핑 - 확장자 매핑:
*.do
와 같이 특정 확장자를 가지는 요청 처리 - 기본 서블릿 매핑:
/
는 모든 요청을 처리하지만, JSP 페이지보다 우선하지 않음
이러한 규칙을 활용하여 다양한 URL 경로를 효율적으로 관리할 수 있습니다.
결론
@WebServlet 애너테이션을 사용하여 서블릿을 여러 경로에 매핑하고, 와일드카드를 사용해 경로 패턴을 유연하게 처리할 수 있습니다. 이를 통해 클라이언트의 다양한 요청을 하나의 서블릿에서 처리하거나, 특정 패턴의 경로에 맞춰 서블릿을 적절히 분배할 수 있습니다.
함께 보면 좋은 이전 게시글
- JSP와 Servlet 소개 및 활용도
- JSP/Servlet 웹 애플리케이션에서 web.xml 활용한 에러 페이지 설정
- web.xml과 애너테이션으로 서블릿 매핑 및 GET/POST 요청 처리
- JSP 내장 객체 사용법: request와 response
- JSP 액션 태그: include와 forward 사용법
이 글이 도움이 되셨다면 공유 부탁 드립니다.