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
은 복잡한 설정이 필요한 경우에 유리하며, 보안 설정, 필터, 리스너 등 전체 애플리케이션 설정이 필요한 경우 여전히 중요한 역할을 합니다.