회사에서 Java 서버단을 뒤지다가 Handler가 사용된 코드들이 보였다.
Handler??? 분명 강의들으면서 공부했는데..!!
다시 떠올리니 그게 무엇인지, 어떤기능인지,, 설명하지 못한 나 자신… 다시 공부하기로 마음먹었다….
내 기준에!!!!
handler를 잘 모른다면 Java개발자야! 라고 말할 수 없다고 생각한다!!!!
스프링 MVC의 핵심인
DispatcherServlet.java…. 요녀석이 중요!!
스프링 MVC의 프론트컨트롤러이다.
Why???
스프링 MVC 동작원리
Http 요청 -> FrontController(=DIspatcherServlet) -> 핸들러 매핑정보 조회 -> 핸들러 어댑터 조회-> 핸들러 호출 -> ModelAndView반환 -> ViewResolver 호출
DispatcherSevlet
- HttpServlet을 상속받아서 사용 됨
- 스프링부트는 DispatcherServlet을 자동으로 서블릿으로 등록하면서 모든 경로에 대해서 맵핑한다.
(urlPattern=“/”) 더 자세한 경로가 우선순위가 높다.
DispatcherServlet.java > doDispatcher() 호출
protected void doDispatch(HttpServletRequest request, HttpServletResponse
response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
ModelAndView mv = null;
// 1. 핸들러 조회
mappedHandler = getHandler(processedRequest);
//2.핸들러 어댑터 조회-핸들러를 처리할 수 있는 어댑터
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
// 3. 핸들러 어댑터 실행 -> 4. 핸들러 어댑터를 통해 핸들러 실행 -> 5. ModelAndView 반환
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
}
private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, HandlerExecutionChain mappedHandler, ModelAndView mv, Exception exception) throws Exception {
// 뷰 렌더링 호출
render(mv, request, response);
}
protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception {
View view;
String viewName = mv.getViewName(); //6. 뷰 리졸버를 통해서 뷰 찾기,7.View 반환
view = resolveViewName(viewName, mv.getModelInternal(), locale, request);
// 8. 뷰 렌더링
view.render(mv.getModelInternal(), request, response);
}
스프링 MVC의 강점은 DispatcherServlet 코드를 변경없이 원하는 기능을 변경하거나 확장할 수 있다.
자, 그럼 그 안의 handlerMapping과 HandlerAdapter을 알아보자!
HandlerMapping
0 = RequestMappingHandlerMapping
: 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
1= BeanNameUrlHandlerMapping
: 스프링 빈의 이름으로 핸들러를 찾는다.
HandlerAdapter
0 = RequestMappingHandlerAdapter
: 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
1 = HttpRequestHandlerAdapter
: HttpRequestHandler 처리
2 = SimpleControllerHandlerAdapter
: Controller 인터페이스(애노테이션X, 과거에 사용) 처리
가장 우선순위가 높은 핸들러매핑과 핸들러어댑터
RequestMappingHandler
RequestMappingAdapter
@RequestMapping 의 앞글자를 따서 만든 이름.
99.9% 실무에서 사용하고 있음.
'JAVA' 카테고리의 다른 글
[java] @RequestParam, required, defaultValue, @ModelAttribute - 개발자 배찌 (0) | 2022.11.01 |
---|---|
[Java] @ResponseBody, @RestController, @Controller - 개발자 배찌 (0) | 2022.11.01 |
[Java] 인증번호 1분에 최대 5번만 호출 - 개발자 배찌 (0) | 2022.10.24 |
[Java] 이미지 일괄다운로드 - 개발자 배찌 (0) | 2022.10.19 |
[java] getSession(), getSession(true), getSession(false) 차이점 - 개발자 배찌 (0) | 2022.07.10 |