참고 도서 : 스프링5 프로그래밍 입문 - 최범균 저 |
ch10. 스프링 MVC 프레임워크 동작 방식
[스프링 MVC 핵심 구성요소와 각 요소 간의 관계]
중앙의 DispatcherServlet은 모든 연결을 담당
➀ 웹브라우저 -> DispatcherServlet 요청 -웹브라우저로부터 요청이 들어오면 그 요청을 처러하기 위한 컨트롤러 객체를 검색하기 위해 DispatcherServlet은 HandlerMapping 빈 객체에게 컨트롤러 검색을 요청함 ➁ HandlerMapping은 클라이언트의 요청 경로를 이용하여 이 요청 경로를 처리할 컨트롤러 빈 객체를 찾고 다시 DispatcherServlet에게 전달 ➂ DspatcherServlet은 HandlerMapping이 찾아준 컨트롤러 객체를 처리할 수 있는 HandlerAdapter 빈 객체에게 요청 처리를 위임함. ➃ HandlerAdapter는 컨트롤러의 알맞은 메소드 호출하여 요청을 처리 ➄ 처리한 결과를 HandlerAdapter에 전달 ➅ HandlerAdater는 컨트롤러 실행 결과를 ModelAndView타입 객체로 변환하여 그 결과를 DispatcherServlet에 리턴 *ModelAndView 타입으로 변환 시, 컨트롤러가 리턴한 뷰 이름을 담고 있음 ➆ DispatcherServlet은 ViewResolver 빈 객체로 컨트롤러의 실행 결과 보여줄 View 검색 -ViewResolver는 뷰 이름에 해당하는 View 객체를 찾거나 생성해서 DispatcherServlet에 리턴함 ➇ DispatcherServlet은 ViewResolver 이 리턴한 View 객체에게 응답 결과 생성을 요청 ➈ 웹 브라우저에 전송할 응답 결과를 생성 |
▶ [컨트롤러와 핸들러]
- 컨트롤러 : 클라이언트의 요청을 실질적으로 처리하는 것
- 핸들러 : 웹 요청을 실제로 처리하는 객체
▶[DispatcherServlet 과 스프링 컨테이너]
-앞서, DispatcherServlet의 contextConfiguration초기화 파라미터를 이용해서 스프링 설정 클래스 목록을 전달한 바 O
-DispatcherServlet은 전달받은 설정 파일을 이용해서 스프링 컨테이너를 생성한다.
-HandlerMapping/HandlerAdapter/컨트롤러/ViewResolver 등의 빈은 모두 DispatcherServlet이 생성한 스프링 컨테이너에서 구하므로 설정 파일에 이들 빈에 대한 정의가 포함되어야 한다.
▶[@Controller를 위한 HandlerMapping과 HandlerAdapter]
-DispatcherServlet은
[HandlerMapping]를 웹 브라우저의 요청을 처리할 핸들러 객체를 찾기 위해 사용하고 [HandlerAdapter]를 핸들러를 실행하기 위해 사용한다,
-알맞은 빈이 스프링 설정에 등록되어 있어야 한다.
-이를 위해 < @EnableWebMvc 애노테이션 추가 > 한다.
-➀ @Controller 컨트롤러를 위한 설정을 생성
이 태그가 빈으로 추가해주는 클래스 중에는 @Controller타입 핸들러 객체를 처리하기 위한 다음의 두 클래스가 포함되어 있다.
-RequestMappingHandlerMapping :@Controller이 적용된 객체의 요청 매핑 애노테이션(@GetMapping) 값을 이용해서 웹 브라우저의 요청을 처리할 컨트롤러 빈을 찾는다. -RequestMappingHandlerAdapter : 컨트롤러의 메소드를 알맞게 실행하고 그 결과를 ModelAndView 객체로 변환하여 DispatcherServlet에 리턴한다, |
▶[WebMvcConfigurer 인터페이스와 설정]
@EnableWebMvc 애노테이션 사용 -➀ @Controller 컨트롤러를 위한 설정을 생성 -➁ WebMvcConfigurer 타입의 빈을 이용 -> MVC 설정 추가 생성 |
-webMvcConfigurer 인터페이스 속 메소드를 재정의하여 알맞은 뷰 관련 설정을 추가하여 사용하기도 한다,
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void configureDefalutServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enale();
}
@Override
public void configureCiewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/wiew", ".jsp");
}
}
▶[JSP를 위한 ViewResolver]
-WebMvcConfigurer 인터페이스에 정의된 configureViewResolvers() 메소드는 속 파라미터를 사용하여 jsp() 메소드를 사용하면 JSP를 위한 ViewResolver를 설정할 수 있다.
-결과적으로 컨트롤러에서 지정한 Model 속성은 requrest 객체 속성으로 JSP에 전달되기 때문에 JSP는 모델에 지정한 속성이름을 사용해서 값을 사용할 수 있게 된다.
▶[디폴트 핸들러와 HandlerMapping의 우선순위]
RequestMappingHandlerMapping 적용 우선순위 > SimpleUrlHandlerMapping의 우선순위 |
-@EnableWebMvc 이 등록하는 RequestMappingHandlerMapping 적용 우선순위가
DefaultServletHandlerConfigurer#enabler() 메소드가 등록하는 SimpleUrlHandlerMapping의 우선순위보다 높다.
따라서 DispatcherServlet은 웹 브라우저의 요청이 들어오면
➀ RequestMappingHandlermapping 사용 -> 요청 처리할 핸들러 검색
-존재 O : 해당 컨트롤러 이용 요청 처리
➁ 존재 X : SImpleUrlHandlerMapping 사용 -> 요청 처리할 핸들러 검색
<<정리>> [DispatcherServlet] -웹 브라우저의 요청 받는 창구 역할 -다른 구성요소 이용 요청 흐름 제어 역할 [HandlerMapping] -클라이언트 요청을 처리할 핸들러 객체 검색(찾아줌) [ 핸들러(커맨드)객체 ] -클라이언트의 요청을 실제로 처리한 뒤 뷰 정보와 모델을 설정 [HandlerAdapter] -DispatcherServlet과 핸들러 객체 사이의 변환 처리 [ViewResolver] -요청 처리 결과를 생성할 View 찾아주고 View는 최종적으로 클라이언트에 응답생성하여 전달 |
'Web(웹)_관련 공부 모음 > [개념]_스프링 5 프로그래밍' 카테고리의 다른 글
ch 12. MVC 2: 메시지 / 커맨드 객체 검증 (0) | 2022.02.02 |
---|---|
ch11. MVC 1: 요청 매핑/커맨드 객체/ 리다이렉트/ 폼 태그/모델 (0) | 2022.02.01 |
ch09. 스프링 MVC 시작하기 (0) | 2022.01.31 |
ch08. DB 연동 (0) | 2022.01.28 |
ch07. AOP 프로그래밍 (0) | 2022.01.27 |