August 31, 2021
Front Controller 패턴 - 모든 요청을 받아서 다른 컨트롤러들에게 로직을 처리하는 부분을 위임한다. 발생되는 예외 처리와 어떤 뷰를 선택해서 클라이언트에게 전달할지에 대한 처리를 담당한다. -> 애플리케이션에 들어오는 모든 요청 핸들링, 공통 작업 처리
Spring은 Front Controller 패턴을 사용해서 DispatcherServlet을 제공한다.
개발자는 Servlet을 작성하는 것이 아니라 controller를 작성하고 Spring이 작성한 controller를 호출한다.
사용자의 요청을 일일이 전달하기 위해 web.xml에 많은 servlet을 등록하고 매핑하는 과정이 필요했다. DispatcherServlet은 이러한 과정을 줄일 수 있게 한다.
DispatcherServlet을 만드는 두 가지 방법
Spring에서는 Controller를 핸들러
라고 부른다.
사용자 요청을 기준으로 어떤 핸들러에게 작업을 위임할지를 결정해주는 것 - URL, HTTP method, parameter 등을 참고하여 걸정 => 핸들러 매핑 전략 - RequestMappinHandlerMapping
핸들러가 호출될 때 핸들러가 가지고 있는 메서드 파라미터들을 메서드 파라미터에 맞는 정보로 변경해주는 것이 핸들러 어댑터
HTTP servlet request 타입의 Object를 핸들 어댑터에 전달해주면 어댑터가 컨트롤러의 메서드가 받을 수 있는 파라미터로 변환해서 전달해준다. - RequestMappingHandlerAdapter
가장 많이 쓰이는 것이 Annotation 기반
DispatcherServlet에 내부적으로 ViewResolver가 등록되어있다.
DispatcherServlet은 ViewResolver를 통해서 원하는 View를 찾아서 Reponse body를 통해 클라이언트에게 전달
content 타입에 따라서 ViewResolve -> ContentNegotiatingViewResolver
?AnnotationConfigWebApplicationContext 에 대하여
static resource 처리 : ResourceResolver
서버사이드 자바 템플릿 엔진
동적 컨텐츠를 생성하는 방법
html 파일을 작성 -> 파싱해서 만들어준다.
JSP와는 다르게 컴파일하지 않고 파싱해서 결과를 전달한다. 표현식이 강력하다.
JSP와 달리 Servlet Code로 변환되지 않다는 점이다. 따라서 비즈니스 로직과 분리되어 오로지 View에 집중할 수 있다.
서블릿 컨테이너의 세 가지 컴포넌트 : 필터, 서블릿, 리스너
ApplicationContext
가 존재하게 된다.Dispatcherservlet
은 이미 모든 빈이 정의되어 있는 루트 WebApplicationContext를 상속하는 자신만의 WebApplicationContext
를 가진다.DispatcherServlet
은 모든 요청을 처리하고, 그 요청들을 적절한 채널로 전달한다.