티스토리 뷰

전체적인 흐름

 

우선 그림을 보면 DispatcherServlet이 모든 연결을 담당한다는 것을 알 수 있다.

DispatcherServlet은 web.xml에서 servlet으로 설정해줬던 그것이다.

web.xml

 

1. 웹 브라우저에서 DispatcherServlet으로 요청이 들어온다 

예를들어 웹 브라우저에서 웹 요청 경로가 '/hello' 가 들어왔다고 해보자. 

 

 

2. 요청 URL과 매칭되는 컨트롤러 검색

요청이 들어왔으니 해당 요청을 처리하기 위한 컨트롤러 객체를 찾아야 한다.

그런데 컨트롤러 객체를 찾을때 DispatcherServlet이 직접 찾는것이 아니고 HandlerMapping 이라는 빈 객체에게 컨트롤러 검색을 요한다. 

 

HandlerMapping 은 컨트롤러 빈 객체를 찾아서 DispatcherServlet에 전달한다. 

웹 요청 경로가 '/hello'가 들어 왔으니, 등록된 컨트롤러 빈 들 중에서 '/hello' 를 처리할 컨트롤러 객체를 리턴할 것이다. 

 

ControllerConfig.java
'/hello' 경로 처리하는 HelloController 빈 객체

 

이렇게 HandlerMapping이 컨트롤러 객체를 찾아서 DispatcherServlet에 리턴할때 바로 리턴되는 것은 아니다.

DispatcherServlet은 위의 HelloController 빈 객체 처럼 @Controller 애노테이션이 붙여 구현한 컨트롤러 뿐 만 아니라 이전 버전에서 사용하던 Controller 인터페이스, 특수 목적으로 만들어진 HttpRequestHandler 인터페이스를 동일하게 처리할수 있도록 만들어 졌기 때문에 중간에 이를 처리할 어뎁터가 있는데 바로 HandlerAdapter이다. 

 

 

3. DispatcherServlet은 HandlerMapping이 찾아준 컨트롤러 객체를 실행하도록 HandlerAdapter에게 요청한다

컨트롤러를 찾아주는 객체 이름이 ControllerAdpater가 아닌 HandlerAdpater인 이유는 스프링 MVC는 웹 요청을 처리하는 범용 프레임워크이고 @Controller가 붙은 객체가 아닌 개발자가 직접 만든 객체도 컨트롤러가 될수 있다.

스프링 MVC는 웹 요청을 실제로 처리하는 객체를 Handler라고 부른다.

 

4. HandlerAdapter는 알맞은 메서드를 찾아 호출한다.

여기서는 HelloController 클래스의 hello() 가 실행될 것이다

 

5. 컨트롤러의 메소드 실행 결과가 HandlerAdapter에 리턴된다.

 

6. 컨트롤러의 메소드 실행 결과를 받은 HandlerAdapter가 해당 결과를 다시 DispatcherServlet에 리턴한다

이때 그냥 리턴하는 것이 아닌, 컨트롤러의 처리 결과를 ModelAndView라는 객체로 변환해 리턴한다.

HandlerAdapter는 컨트롤러를 찾는 역할도 하지만, 처리 결과를 ModelAndView 객체로 변환하는 역할도 한다. 

DispatcherServlet은 결국 실행 요청 실행 결과를 ModelAndView라는 타입으로 받기만 하면되는데, 핸들러들은 ModelAndView를 리턴하는 객체도 있고, 그렇지 않은 객체도 있기 때문에 (HelloController는 문자열을 리턴한다) 이를 ModelAndView로 변환해주는 중간다리가 필요하다. 

 

 

7. 컨트롤러의 처리 결과를 보여줄 View를 찾는다

컨트롤러의 처리 결과가 나왔으니 이제 이를 유저에게 보여줄 view를 찾아야 한다. 

컨트롤러의 처리 결과를 ModelAndView 객체에 받았고 이 객체에는 컨트롤러가 리턴한 뷰 이름이 담겨있다.

뷰를 찾기 위해 ViewResolver라는 빈 객체를 사용하는데 ModelAndView에 담겨있는 뷰 이름을 찾아 생성해 DispatcherServlet에 리턴한다.

 

8. DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청한다. 

 

9. 요청을 받은 View 객체는 웹 브라우저에 전송할 응답 결과를 생성한다.

JSP를 사용하는 경우 View 객체는 JSP를 실행할 것이다. 

 

 

 

 

 

 

출처 : 스프링5 프로그래밍 입문 (최범균 저) 

'Web' 카테고리의 다른 글

Ch11. MVC 1 : 리다이렉트  (0) 2022.07.14
Ch11. MVC 1 : 요청 매핑  (0) 2022.07.12
Ch9. 스프링 MVC  (0) 2022.07.11
Ch8. 스프링의 DB 정리  (0) 2022.07.11
Ch8. 스프링의 트랜잭션 관리  (0) 2022.07.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함