DispatcherServlet
- HttpServlet을 상속 받아서 서블릿으로 동작 (프론트 컨트롤러 역할)
- 서블릿 호출 시, HttpServlet 이 제공하는 service()를 시작으로 DispacherServlet.doDispatch()가 실행
- 스프링 MVC의 큰 강점은 DispatcherServlet 코드의 변경 없이, 원하는 기능을 변경하거나 확장할 수 있다 (인터페이스 제공)
DispacherServlet.doDispatch()
- 핸들러 조회
- 핸들러 어댑터 조회 -> 핸들러를 처리할 수 있는 어댑터
- 핸들러 어댑터 → 핸들러 실행
- ModelAndView 반환
- View Resolver 실행 (View 조회)
- View 렌더링
핸들러 매핑과 핸들러 어댑터
스프링 MVC는 이미 내부적으로 구현되어 있다.
- 가장 우선순위가 높은 RequestMappingHandlerMapping,RequestMappingHandlerAdapter
- RequestMappingHandler은 @RequestMapping 또는 @Controller가 붙어있는 스프링 빈을 보고 매핑 정보로 인식
View Resolver
- 스프링 부트는 InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록
- application.properties에 등록한 spring.mvc.view.prefix , spring.mvc.view.suffix 설정 정보를 사용해서 등록
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
그 외 간단 정리
- @Controller : 컨트롤러는 반환 값이 String이면 뷰 이름으로 인식, 그래서 뷰를 찾고 뷰가 랜더링
- @RequestMapping : URL 요청 정보를 매핑 (메서드단에 적용해서 컨트롤러 클래스를 유연하게 통합 가능)
- @RequestParam : HTTP 요청 파라미터를 애노테이션으로 받을 수 있음 (생략 가능)
- @PathVariable : URL 경로를 템플릿화하여 조회 가능 (members/{memberId})
- @ModelAttribute : 요청 파라미터를 전달 받고, 객체를 생성해서 Model에 저장하는 과정을 자동화 (생략 가능)
HTTP 메시지 컨버터
- view를 사용하지 않고, HTTP 메시지 컨버터를 통해서 HTTP 메시지를 직접 입력
- RequestMapping 핸들러 어댑터에서 핸들러(컨트롤러)로 넘어가기 전 ArgumentResolver 에서 HTTP 메시지 컨버터 호출
- ArgumentResolver는 컨트롤러의 파라미터, 애노테이션을 기반으로 필요한 데이터를 생성하고 컨트롤러에 전달
- ReturnValueHandler는 컨트롤러 응답 값을 전달 받아 변환하고 처리
- @RequestBody : HTTP 메시지 컨버터가 HTTP 메시지 바디를 원하는 문자나 객체 등으로 변환 (json도 객체로 변환 가능)
- @ResponseStatus(HttpStatus.OK) 애노테이션으로 응답 코드도 설정 가능하지만 동적으로 응답 코드를 생성하는 경우 ResponseEntity를 사용
- 컨트롤러에서 @ReqeustBody 사용 시, Message Converter가 해당 메시지를 읽을 수 있는지 확인하기 위해 canRead() 또는 canWrite()를 호출하고 가능하면 read() 또는 write() 호출
[참고]인프런 김영한님 강의를 공부한 내용입니다.
'Spring' 카테고리의 다른 글
[스프링 MVC2] 메시지, 국제화 (0) | 2022.06.15 |
---|---|
[스프링 MVC2] 타임리프(Thymeleaf) 기본 문법 (0) | 2022.06.14 |
[스프링 MVC1] 서블릿(Servlet), MVC 패턴 (1/2) (0) | 2022.06.13 |
[Spring] 스프링 핵심 개념 (2/2) (0) | 2022.06.13 |
[Spring] 스프링 핵심 개념 (1/2) (0) | 2022.06.10 |