엄지월드

Srping Handler 본문

카테고리 없음

Srping Handler

킨글 2022. 9. 2. 11:14

1) 사용자로부터 요청이 오면 Filter를 통해 DispatcherServlet으로 요청이 간다.

2) HandlerMapping Bean에게 매칭되는 Handler가 있는지 조회를 요청한다.

3) HandlerMapping은 클라이언트의 요청 경로를 이용해 컨트롤러 Bean 객체를 DispatcherServlet에게 전달해준다.
(Ex @PostMapping("/admin/list")

4) HandlerAdapter에게 매칭된 Handler를 전달해서 처리를 요청한다. 

5) HandlerAdapter는 컨트롤러의 알맞은 메서드를 호출한다.
(Ex public String list(Model model, CourseParam parameter){ ... } 

6)7)8) Controller는 처리한 후에 결과를 ViewName에 전달해주고, 
HandlerAdapter를 통해 ModelAndView로 만들어 DispatcherServlet에게 반환해준다.

9) DispatcherServlet은 결과를 보여줄 View를 찾기 위해 ViewResolver Bean 객체를 사용한다.

10) ViewResolver는 ModelAndView 내부에 있는 뷰 이름에 해당하는 View 객체를 찾거나 생성해서 리턴한다.

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

 

<핸들러 흐름의 연관된 설명들>

- Controller 안에서 실제 요청을 처리하는 메소드를 핸들러(Handler)라고 한다. 사용자로부터 서버로 요청이 가면, 해당 요청에 맞는 컨트롤러의 핸들러로 요청 정보가 전해지고, 핸들러는 이를 처리하여 적절한 값을 반환 한다. 

그리고 요청과 핸들러를 연결하는 것을 핸들러 맵핑(Handler Mapping)이라고 하고, @RequestMapping 어노테이션을 사용하여 맵핑이 이루어진다.

 

-Controller가 실행되려면 HandlerMapping, HandlerAdapter 두 가지가 필요하다. 

 

- 클라이언트의 요청을 실제로 처리하는 것은 컨트롤러이고 DispatcherServlet은 클라이언트의 요청을 전달받는 창구 역할을 한다. 즉, DispatcherServlet은 클라이언트의 요청을 처리 할 컨트롤러를 찾기 위해 HandlerMapping을 사용한다.

 

- DispatcherServlet은 핸들러 객체의 실제 타입에 상관 없이, 실행 결과를 ModelAndView라는 타입으로만 받을 수 있으면 된다.

그런데 핸들러의 실제 구현 타입에 따라 ModelAndView를 리턴하는 객체도 있고, 그렇지 않은 구현 객체도 있다.

따라서, 핸들러의 처리 결과를 ModelAndView로 변환해주는 객체가 필요하며, HandlerAdapter가 바로 이 변환을 수행해준다.

 

 

 

Comments