Spring MVC Pattern

·2022년 4월 18일
0

Spring

목록 보기
2/8

MVC Pattern

어플리케이션의 확장을 위해 Model, View, Controller 세가지 영역으로 분리.
컴포넌트 간의 결합성이 낮아 프로그램 수정, 확장에 용이.

Model

  • 어플리케이션 상태의 캡슐화.
  • 상태 쿼리에 대한 응답.
  • 어플리케이션 기능 표현.
  • 변경을 View에 통지.

View

  • 모델을 화면에 시각적으로 표현.
  • 모델에게 업데이트 요청.
  • 사용자의 입력을 컨트롤러에 전달.
  • 컨트롤러가 View를 선택하도록 허용.

Controller

  • 어플리케이션의 행위 정의.
  • 사용자 액션을 모델 업데이트와 Mapping.
  • 응답에 대한 View 선택.


Spring MVC

DispatcherServlet

  • 모든 클라이언트의 요청을 전달받음.
  • Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성.

HandlerMapping

  • 클라이언트의 요청 URL을 어떤 Controller가 처리할 지를 결정.
  • URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할 지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있음.

Controller

  • 클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 알려줌.

ModelAndView

  • Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체.

ViewResolver

  • Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정.

View

  • Controller의 처리결과를 보여줄 응답 화면을 생성.

Spring MVC 실행 순서

1. DispatcherServlet이 요청을 수신.

  • 단일 Front Controller Servlet.
  • 요청을 수신하여 처리를 다른 컴포넌트에 위임.
  • 어느 Controller에 요청을 전송할 지 결정.

2. DispatcherServlet은 Handler Mapping에 어느 Controller를 사용할 것인지 문의.

  • URL과 Mapping.

3. DispatcherServlet은 요청을 Controller에게 전송하고 Controller는 요청을 처리한 후 결과 리턴.

  • Business Logic 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 View에서 사용됨.

4. ModelAndView Object에 수행결과가 포함되어 DispatcherServlet에 리턴.

5. ModelAndView는 실제 JSP 정보를 갖고 있지 않으며, ViewResolver가 논리적 이름을 실제 JSP이름으로 변환.

6. View는 결과정보를 사용하여 화면에 표현함.


Spring MVC 구현

Spring MVC를 이용한 Application 구현 단계

  • web.xml에 DispatcherServlet 등록 및 Spring 설정파일 등록.
  • 설정 파일에 HandlerMapping 설정.
  • Controller 구현 및 Context 설정 파일(servlet-context.xml)에 등록.
  • Controller와 JSP의 연결을 위해 View Resolver 설정.
  • JSP 코드 작성.

Controller 작성

  • 좋은 디자인은 Controller가 많은 일을 하지 않고, Service에 처리를 위임.

web.xml - DispatcherServlet 설정

  • <init-param> 을 설정 하지 않으면 "<servlet-name>-servlet.xml"에서 ApplicationContext의 정보를 로드.
  • Spring Container는 설정 파일의 내용을 읽고 ApplicationContext 객체를 생성.
  • <url-pattern>은 DispatcherServlet 설정 가능.
  • <load-on-startup>1</load-on-startup> 설정 시 WAS start시 초기화 작업 진행.
profile
SSAFY 7기

0개의 댓글