Servlet 애너테이션(@WebServlet)을 사용하면, web.xml 파일에 서블릿 설정을 작성하지 않고도 서블릿의 URL 매핑을 쉽게 지정할 수 있습니다. 애너테이션 방식은 코드 내에서 직접 서블릿을 설정할 수 있어 직관적이고, 설정이 간단하다는 장점이 있습니다.
@WebServlet 애너테이션을 통해 서블릿의 URL 패턴을 지정할 수 있습니다. 애너테이션은 서블릿 클래스 위에 추가하며, web.xml에 별도로 서블릿을 등록할 필요 없이 자동으로 매핑됩니다.
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/hello") // 서블릿 URL 매핑 설정
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("<h1>Hello, Servlet with Annotation!</h1>");
}
}
/hello 경로로 요청이 오면 HelloServlet이 실행되도록 설정합니다.web.xml 파일 없이도 서블릿을 인식하고, 매핑 설정을 자동으로 처리합니다.@WebServlet 애너테이션은 다양한 속성을 통해 서블릿의 동작을 세부적으로 설정할 수 있습니다.
value 또는 urlPatterns: 서블릿이 매핑될 URL 패턴을 지정합니다.
@WebServlet(value = "/hello") // 단일 URL 패턴
@WebServlet(urlPatterns = {"/hello", "/greet"}) // 여러 URL 패턴
name: 서블릿 이름을 지정합니다. 기본값은 클래스 이름이 사용됩니다.
@WebServlet(name = "HelloServlet", urlPatterns = "/hello")
loadOnStartup: 서블릿의 로드 우선순위를 설정합니다. 값이 0 이상이면 서버 시작 시 서블릿이 로드됩니다.
@WebServlet(urlPatterns = "/hello", loadOnStartup = 1)
initParams: 서블릿에 초기화 매개변수를 전달합니다. 여러 매개변수를 설정할 수 있습니다.
@WebServlet(urlPatterns = "/hello", initParams = {
@WebInitParam(name = "param1", value = "value1"),
@WebInitParam(name = "param2", value = "value2")
})
| 항목 | 애너테이션 방식 | web.xml 방식 |
|---|---|---|
| 설정 위치 | 코드 내부 | 외부 설정 파일(web.xml) |
| 가독성 | 코드와 설정이 함께 있어 가독성 증가 | 설정이 코드와 분리되어 가독성 떨어질 수 있음 |
| 유연성 | 간단한 설정에 적합 | 복잡한 설정, 필터, 리스너, 보안 설정에 유리 |
| 변경 용이성 | 코드 수정 시 서블릿 설정 자동 반영 | 설정을 수정하려면 web.xml을 따로 수정해야 함 |
| 사용 시기 | 단일 서블릿이거나 간단한 설정에 적합 | 대규모 애플리케이션이나 복잡한 설정에 적합 |
애너테이션과 web.xml을 함께 사용할 수도 있습니다. 예를 들어, 주로 간단한 서블릿 매핑은 애너테이션을 사용하고, 복잡한 필터와 리스너 설정이나 환경별 설정이 필요한 경우에는 web.xml을 사용하는 방식으로 혼합 사용이 가능합니다.
web.xml은 복잡한 설정이 필요한 경우에 유리하며, 보안 설정, 필터, 리스너 등 전체 애플리케이션 설정이 필요한 경우 여전히 중요한 역할을 합니다.