JSP 서블릿(어노테이션으로 매핑)
서블릿 2.5 버전까지는 web.xml 파일에 서블릿으로 등록해야 서블릿 클래스를 사용할 수 있었는데, 서블릿 3.0버전부터는 @WebServlet 어노테이션을 사용하면 web.xml파일에 따로 등록하지 않아도 서블릿으로 등록됩니다.
톰캣7(서블릿 3.0)이나 8버전(서블릿3.1)처럼 서블릿 3.0을 지원하는 웹 컨테이너는 @WebServlet이 적용된 클래스를 검색해서 서블릿으로 자동완성 됩니다.
package example;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title>인사</title></head>");
out.print("<body>");
out.print("안녕하세요");
out.print(request.getParameter("name"));
out.print("님.");
out.print("</body></html>");
}
}
이 예제에서 아르의 코드 에서 사용된 @WebServlet 어노테이션은 urlPatterns 속성을 갖는데 이 속성은 해당 서블릿과 매핑될 URL 패턴을 지정할 때 사용됩니다. 위 코드는 /hello 로 들어오는 URL을 HelloServlet이 처리하도록 설정하고 있습니다.
만약 두 개 이상의 URL 패턴을 처리하도록 하고 싶다면 다음과 같이 urlPatterns 속성값으로 배열을 전달하면 됩니다.
@WebServlet(urlPatterns = "/hello")
@WebServlet 어노테이션을 사용할 때 고려할 점은 서블릿이 범용적으로 사용되는 서블릿인지의 여부입니다.
예를 들어, MVC 프레임워크는 어떤 URL을 서블릿이 처리할지 미리 알 수 없습니다. 단지, 다양한 요청URL을 MVC 프레임워크가 처리할 수 있는 기능을 구현할 수 있을 뿐입니다.
이는 @WebServlet 어노테이션을 사용할 경우 서블릿이 처리해야할 URL 패턴이 변경될 때마다. 자바 소스 코드의 urlPatterns속성값을 변경하고 다시 컴파일해야 한다는 것을 뜻합니다. 반면 @WebServlet을 사용하지 않고 web.xml파일을 사용하면 URL,경로가 바뀔 경우 web.xml 파일만 변경하면 됩니다. 따라서 서블릿의 용도에 따라 @WebServlet 어노테이션을 사용할지 아니면 web.xml 설정을 사용할지를 알맞게 결정 해야합니다.