JSP

JSP 서블릿(어노테이션으로 매핑)

요리하다그만둠 2022. 7. 20. 15:02

서블릿 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 설정을 사용할지를 알맞게 결정 해야합니다.

출력 화면