본문 바로가기
Web/Servlet

Servlet / @ (Annotation), 요청 처리 메소드

by 키튼햄 2023. 6. 20.
@ : 어노테이션(Annotation)
  • PI 문서에 특별한 설명을 제공하기 위해 만들어진 기능이다.
  • 프로그램 작성에 필요한 특별한 의미를 제공하거나 실행에 필요한 정보를 제공하는 기능을 갖는다.

 

@WebServlet : 서블릿 클래스를 서블릿으로 등록하고 URL 패턴을 매핑하기 위한 어노테이션

  • [web.xml] 파일의 servlet 엘리먼트와 servlet-mapping 엘리먼트로 제공하는 기능과 동일하다.
  • @WebServlet 어노테이션 속성을 이용하여 서블릿의 이름과 URL 패턴 매핑을 설정할 수 있다.
    * name 속성 : 서블릿의 이름을 속성값으로 설정 (속성을 생략하면 자동으로 클래스이름을 서블릿의 이름으로 설정한다.)
    * value 속성 : 서블릿을 요청하기위한 URL 패턴을 속성값으로 설정 (생략 불가능. 필수
    하지만, value 속성 외 다른 속성이 없는 경우에는 속성값만 설정 가능.(-> 아래의 예제에서 "/Frist.itwill"이 value 속성만 존재하여 속성값만 설정한 것이다.)

 

 

protected void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }

클라이언트 요청에 의해 자동 호출되는 메소드이다. (= 요청 처리 메소드(GET, POST, Service))

클라이언트 요청에 대한 처리 명령과 응답될 실행결과를 저장한 파일을 생성하는 명령을 작성한다.

 

 

<요청처리 메소드 속에서의 진행>

 

1. 먼저 클라이언트에게 줄 요청에 대한 실행결과를 저장할 공간이 필요하다. 따라서, 파일형태 변경 및 응답파일을 생성하기 위한 출력스트림을 반환받아 저장한다.

 

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

(클라이언트에게 URL 주소로 응답할 경우, 응답파일로 제공하지 않으므로 위의 두 코드는 생략가능하다.)

 

2. 요청에 대한 처리 명령 및 처리결과를 저장할 응답파일들을 생성한다.

서블릿은 모든 클라이언트에게 "일관성있는 동일한 처리결과"를 "동적"으로 생성하여 제공한다. (클라이언트가 어느나라에서 있던 상관없다.)

 

 

서블릿의 가장 큰 단점이 나오는데,
자바를 이용해서 HTML까지 모두 응답파일로 만들어야 한다는 것이다. 그 과정이 생각보다 어렵고 복잡하다.ㅠㅠ

 

 

 

예시
@WebServlet("/first.itwill")
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	//요청 처리 메소드
	protected void service(HttpServletRequest request, HttpServletResponse response) 
    	throws ServletException, IOException {
		
        response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		
		//요청에 대한 처리 명령 및 처리결과를 저장할 응답파일 생성
		//서버 플렛폼의 현재 날짜와 시간이 저장된 Date 객체 생성
		Date now=new Date();
		
		//날짜와 시간에 대한 패턴정보를 저장한 SimpleDateFormat 객체 생성
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
		
		String displayNow=dateFormat.format(now);
		
		//실행결과를 저장한 응답파일 생성
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>Servlet</title>");
		out.println("<style type='text/css'>");
		out.println("p {");
		out.println("width: 600px;");
		out.println("margin: 0 auto;");
		out.println("padding: 30px 0;");
		out.println("font-size: 2em;");
		out.println("font-weight: bold;");
		out.println("text-align: center;");
		out.println("border: 2px solid black;");
		out.println("}");
		out.println("</style>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>서블릿 시계</h1>");
		out.println("<hr>");
		out.println("<p>"+displayNow+"</p>");
		out.println("<script type='text/javascript'>");
		out.println("setInterval(function() {");
		out.println("location.reload();");
		out.println("}, 1000);");
		out.println("</script>");
		out.println("</body>");
		out.println("</html>");
	}
}

'Web > Servlet' 카테고리의 다른 글

Servlet 정의  (0) 2023.06.19