티스토리 뷰
<spring bean> : HandlerMapping, HandlerAdapter, Controller, ViewResolver
=> 스프링 빈으로 등록해야 하는 것을 의미한다.
컨트롤러와 JSP는 개발자가 직접 구현해야 하는 요소이다. 예를 들어 컨트롤러 구성 요소는 개발자가 직접 구현해야 하고 스프링 빈으로 등록해야 한다.
① 요청 전송 ② 요청 URL과 매칭되는 컨트롤러 검색
중앙에 위치한 DispatcherServlet은 모든 연결을 담당한다.
웹 브라우저로부터 요청이 들어오면 DispatcherServlet은 그 요청을 처리하기 위한 컨트롤러 객체를 검색한다.
이때 DispatcherServlet은 직접 컨트롤러를 검색하지 않고 HandlerMapping이라는 빈 객체에게 컨트롤러 검색을 요청한다.
③ 처리 컨트롤러 리턴
HandlerMapping은 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 DispatcherServlet에 전달한다. 예를 들어 웹 요청 경로가 '/hello'라면 등록된 컨트롤러 빈 중에서 '/hello' 요청 경로를 처리할 컨트롤러를 리턴한다.
④ 처리 요청
컨트롤러 객체를 DispatcherServlet이 전달받았다고 해서 바로 컨트롤러 객체의 메서드를 실행할 수 있는 것은 아니다.
DispatcherServlet은 @Controller 애노테이션을 이용해서 구현한 컨트롤러뿐만 아니라
스프링 2.5까지 주로 사용됐던 Controller 인터페이스를 구현한 컨트롤러, 그리고 특수 목적으로 사용되는 HttpRequestHandler 인터페이스를 구현한 클래스를 동일한 방식으로 실행할 수 있도록 만들어졌다.
@Controller, Controller 인터페이스, HttpRequestHandler 인터페이스를 동일한 방식으로 처리하기 위해 중간에 사용되는 것이 바로 HandlerAdapter 빈이다.
⑤ 컨트롤러 실행 결과를 ModelAndView로 변환해서 리턴
DispatcherServlet은 HandlerMapping이 찾아준 컨트롤러 객체를 처리할 수 있는 HandlerAdapter 빈에게 요청 처리를 위임한다. HandlerAdapter는 컨트롤러의 알맞은 메서드를 호출해서 요청을 처리하고, 그 결과를 DispatcherServlet에 리턴한다. 이때 HandlerAdapter는 컨트롤러의 처리 결과를 ModelAndView라는 객체로 변환해서 DispatcherServlet에 리턴한다.
⑥ 컨트롤러의 실행 결과를 보여줄 View 검색
HandlerAdapter로부터 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰를 찾기 위해 ViewResolver 빈 객체를 사용한다.
⑦ View 리턴
ModelAndView는 컨트롤러가 리턴한 뷰 이름을 담고 있는데 ViewResolver는 이 뷰 이름에 해당하는 View 객체를 찾거나 생성해서 리턴한다. 응답을 생성하기 위해 JSP를 사용하는 ViewResolver는 매번 새로운 VIew 객체를 생성해서 DispatcherServlet에 리턴한다.
⑧ 응답 생성 요청
DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청한다.
⑨ 응답(JSP) 생성
JSP를 사용하는 경우 View 객체는 JSP를 실행함으로써 웹 브라우저에 전송할 응답 결과를 생성하고 이로써 모든 과정이 끝이 난다.
'Web 개발 > Spring' 카테고리의 다른 글
POJO JAVA란? (0) | 2022.06.03 |
---|---|
객체지향 설계 5원칙 SOLID (0) | 2022.06.03 |
객체지향의 4대 특성 - 캡슐화, 상속, 다형성, 추상화 (0) | 2022.06.03 |
[Spring] Spring Boot 개념 (0) | 2022.04.27 |
[Spring] Rest API 개념 정리 (0) | 2022.04.26 |
- Total
- Today
- Yesterday