클라이언트가 서버에 요청을 하면, front controller인 DispatcherServlet
클래스가 요청을 받는다.
DispatcherServlet
는 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임 컨트롤러를 찾아 매핑(mapping)된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메서드로 이동한다.
컨트롤러는 해당 요청을 처리할 Service(서비스)를 받아 비즈니스로직을 서비스에게 위임한다.
Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
DAO는 DB정보를 DTO를 통해 받아 서비스에게 전달한다.
서비스는 전달받은 데이터를 컨트롤러에게 전달한다.
컨트롤러는 Model(모델) 객체에게 요청에 맞는 View(뷰) 정보를 담아 DispatcherServlet
에게 전송한다.
DispatcherServlet
는 ViewResolver
에게 전달받은 View정보를 전달한다.
ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
DispatcherServlet
는 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.
DispatcherServlet
는 클라이언트에게 Rendering된 뷰를 응답하며 요청을 마친다.
DispatcherServlet이 기본적으로 사용하는 클래스들을 의미
사용자의 요청을 처리하기 위해 협력한 클래스들 그 종류가 여러개가 있다.
➡️ 기본적으로 무엇을 쓸껀지가 결정되어 있다. 그 정보가 프로퍼티안에 있다.
우리가 언제든지 바꿀 수도 있다.
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
// LocaleResolver: 지역(한국, 미국 등)에 대한 정보를 처리하는 클래스를AcceptHeaderLocaleResolver로 쓰겠다.
// 요청에 대한 헤더 정보를 가지고 지역 정보를 알아내는 것.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
// HandlerMapping: HandlerAdapter가 요청이 오면 HandlerMapping에게 어떤 메서드가 처리할 수 있는지 물어본다. 이때, BeanNameUrlHandlerMapping, RequestMappingHandlerMapping 이 둘이 사용된다. (순서가 있다.)
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
// HttpRequestHandlerAdapter: 실제로 요청을 처리할 객체가 꼭 Controller만 있는 것이 아니다. Servlet이 될 수도 있다. 그래서 여러개가 등록이 되어있다.
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
// HandlerExceptionResolver: 예외 처리 담당
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
// RequestToViewNameTranslator: 요청 URL을 가지고 어떤 View를 사용할지 알아내는 역할
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
// ViewResolver: Controller가 반환될 수도 실제 어떤 View인지 알려줌
// InternalResourceViewResolver을 기본 전략으로 쓰고 있다.
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
// FlashMapManager: 데이터를 맵 형태로 저장할 수 있다.
// 기본적으로 session을 이용하는 SessionFlashMapManager이 기본 전략으로 쓰이고 있다.
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
RequestMappingHandlerMapping
이 처리해 주고 있다.✔️ mapping 정보에 map 형식으로 등록 저장
{[/ex]}
같은 것과 어떤 메서드와 연결되어 있는지 쭉 나온다.
@RequestMapping 정보를 읽어서 mapping 정보에 map형식으로 등록을 한다.
➡️ "{[/ex]}" : java.lang.String kr.ac.jipark09.ExceptionController.main
➡️ "{[/ex2]}" : java.lang.String kr.ac.jipark09.ExceptionController.main2()
: 이런식으로 연결되어 저장된다.
매핑이 잘못되면 consol창에 나오지 않는다. 매핑이 되지 않으면 404에러가 뜬다.
Reference
: https://fastcampus.co.kr/dev_academy_nks