MVC Architecture를 이해한다.

Goal

  • MVC Architecture를 이해한다.
  • RequestDispatcher의 역할과 동작과정을 이해한다.

MVC Architecture란

Model, View, Controller를 분리한 디자인 패턴

JSP와 Servlet을 모두 이용하는 모델 (MVC Architecture)

구체적인 MVC Flow of Control(Annotated)


RequestDispatcher

Implementing MVC with RequestDispatcher

  1. Define beans to represent result data
    • 결과 데이터를 표현하기 위해 beans를 정의한다.
    • 하나 이상의 getXXX 메서드가 있는 Java 클래스
  2. Use a servlet to handle requests
    • 사용자 요청을 다루기 위해 Servlet을 사용한다.
    • Servlet은 요청 파라미터를 읽어 누락된 데이터와 잘못된 데이터를 확인하고 비즈니스 로직을 호출한다.
  3. Perform business logic and get a bean that contains result
    • 비즈니스 로직을 수행하고 결과를 포함하는 bean을 가져온다.
    • Servlet은 비즈니스 로직(application-specific code) 또는 데이터 접근 코드를 호출하여 결과를 가져온다.
  4. Store the bean in the request, session, or servlet context
    • Servlet은 요청의 결과를 나타내는 bean에 대한 참조를 저장하기 위해 request, session, 또는 servlet context에 대해 setAttribute를 호출한다.
  5. Forward the request to a JSP page
    • JSP 페이지에 요청을 전달한다.
    • Servlet은 상황에 적합한 JSP 페이지를 결정하고 RequestDispatcher의 forward 메서드를 사용하여 해당 JSP 페이지로 제어를 전송한다.
  6. Extract the data from the beans
    • bean으로부터 data를 추출한다.
    • JSP 1.2 (이전 버전)
      • JSP 페이지는 jsp:useBean 및 4단계의 location와 일치하는 scope가 있는 bean에 접근한다.
      • 그런 다음 jsp:getProperty를 사용하여 bean properties를 출력한다.
    • JSP 2.0 (선호!) : EL(Expression Language)
      • JSP 페이지는 ${nameFromServlet.property}를 사용하여 bean properties를 출력한다.
    • 어느 쪽이든, JSP 페이지는 bean을 생성하거나 수정하지 않는다.
    • Servlet이 생성한 데이터를 단순히 추출하여 표시한다.

예시 및 동작 과정

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// 1. servlet reads request parameters
	String customerId = request.getParameter("customerId");

	// 2-1). Do business logic and get a bean that contains result
	
 	// 2-2). Store the bean in the request context
    request.setAttribute("customer", customer);
    
    // forward the request to a jsp page
    String address;
    if (customer == null) {
      request.setAttribute("badId", customerId);
      address = "/error.jsp";
    } else  {
      address = "/success.jsp";
    } 

    // 3) Servlet invokes JSP page 
	RequestDispatcher dispatcher = request.getRequestDispatcher(address);
    dispatcher.forward(request, response);
}
  1. Servlet이 사용자 요청에 응답한다.
    • request.getParameter를 이용하여 form data를 가져온다.
  2. Servlet은 비즈니스 로직을 호출한다.
    • 1) 비즈니스 로직의 결과를 포함하는 bean을 가져온다.
    • 2) 요청의 결과를 나타내는 bean을 HttpServletRequest(request), HttpSession(session) 또는 ServletContext(application)에 저장한다.
  3. Servlet은 RequestDispatcher.forward를 통해 JSP 페이지를 호출한다.
  4. JSP 페이지는 bean에서 데이터를 읽는다.
    • JSP 2.0: ${beanName.propertyName} 이용
    • JSP 1.2: 적절한 scope(request, session, 또는 application)의 jsp:useBeanjsp:getProperty 이용

참고 Scopes

참고 Bean 객체

관련된 Post

References