일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- react
- Java
- 컴퓨터구조
- MSA
- Spring
- 운영체제
- spring webflux
- 알고리즘
- 파이썬
- MySQL
- Proxy
- IT
- C
- mongoDB
- JPA
- JavaScript
- OS
- Heap
- Galera Cluster
- Data Structure
- Algorithm
- 네트워크
- 백준
- redis
- Kafka
- c언어
- design pattern
- 자료구조
- 디자인 패턴
- 자바
Archives
- Today
- Total
시냅스
Spring MVC 구조 : 핸들러어댑터 ,핸들러 매핑, 메세지 컨버터 handler mapping handler adapter, message converter 본문
Java, Spring
Spring MVC 구조 : 핸들러어댑터 ,핸들러 매핑, 메세지 컨버터 handler mapping handler adapter, message converter
ted k 2022. 8. 2. 17:28
- 프론트 컨트롤러 패턴으로 이뤄져있다.
- 서블릿이 호출되면 HttpServlet이 제공하는 service가 호출된다.
- 스프링 mvc는 DispatcherServlet의 부모인 FrameworkServlet에서 service를 override해두었다.
- FrameworkServlet.service를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDispatch()가 호출된다.
- doDispatch()는 다음과 같다.
- 요청이 들어오면 핸들러 매핑을 통해 핸들러(컨트롤러)를 조회할 수 있는지 확인하고
- 핸들러 어댑터 목록에서 핸들러를 처리할 수 있는 핸들러 어댑터가 있는지 확인해서
- 핸들러 어댑터를 통해 핸들러의 컨트롤러를 실행하고 반환하는 정보를 ModelAndView로 변환해서 반환한다.
- 반환 받은 modelandview에서 model을 view에 전달하여 view를 응답으로 보내준다.
핸들러 매핑과 핸들러 어댑터
컨트롤러가 호출되려면 다음 2가지가 필요하다.
- HandlerMapping(핸들러 매핑)
- 핸들러 매핑에서 컨트롤러를 찾을 수 있어야 한다.
- e.g. 스프링 빈의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑이 필요하다.
- 0 = RequestMappinghandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
- 1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다.
- HandlerAdapther(핸들러 어댑터)
- 핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요하다.
- e.g. Conroller 인터페이스를 실행할 수 있는 핸들러 어댑터를 찾고 실행해야 한다.
- 0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
- 1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리
- 2 = SimpleControllerHandlerAdapter : Controller 인터페이스 (애노테이션X, 과거에 사용)처리
HTTP 메세지 컨버터
- HTML을 생성해서 응답하는 것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 바디에서 직접 읽거나 쓰는 경우
- @ResponseBody를 사용
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신 HttpMessageConverter가 동작
- 기본 문자 처리 : StringHttpMessageConverter
- 기본 객체 처리 : MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
- HTTP 요청 : @RequestBody, HttpEntity(RequestEntity)
- HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity)
- 0 = ByteArrayHttpMessageConverter
- byte[] 데이터 처리
- 클래스 타입 : byte[], 미디어 타입 */*
- 1 = StringHttpMessageConverter
- String 문자로 데이터 처리
- 클래스 타입 : String, 미디어 타입 : */*
- 2 = MappingJackson2httpMessageconverter
- application/json
- 클래스 타입 : 객체 또는 HashMap, 미디어 타입 : application/json
RequestMappingHandlerAdapter 동작 방식
- ArgumentsResolver(다양한 인자를 받을 수 있게 해준다.)를 호출해서 해당 파라미터를 지원하는지 체크 후 실제 객체를 생성하여 객체가 컨트롤러 호출 시 넘어간다.
- ReturnValueHandler (다양한 응답 값을 지원한다.)
- 요청의 경우 ArgumentResolver로 HTTP 메세지 컨버터를 사용해서 필요한 객체를 생성한다.
- 응답의 경우 ReturnValueHandler를 통해 HTTP 메세지 컨버터를 호출해서 응답 결과를 만든다.
'Java, Spring' 카테고리의 다른 글
Java 커넥션 풀과 데이터 소스 (0) | 2022.08.25 |
---|---|
Java - JDBC 정리 (2) | 2022.08.24 |
[JAVA] 서블릿 (servlet) 이란? (0) | 2022.08.02 |
웹 서버와 와스 web server and WAS - Web Application Server (0) | 2022.08.02 |
스프링 빈 스코프 Spring Bean Scope (0) | 2022.07.25 |
Comments