DispatcherServlet

Developer:Bird·2020년 11월 19일
0

Spring

목록 보기
2/17

1.[DispathcerServlet이란]

HttopRequest에따라서 Controller, 또한 Controller에서 다른 Controller 및 Handler로 데이터를 보낼 수 있도록 만들어준다.
(데이터 이동 가능하게 해줌)

2.[구조]

(1) Servlet WebApplicationContext

Controllers: View의 요청에 따른 처리
ViewResolver: String핸들러에서 반환 된 논리적 기반 뷰 이름,View 를 응답에 렌더링 할 실제 경로로 변경
HandlerMapping: Web의 요청에 따른 경로 Mapping (path에따른 Controller로 위임)

(2) RootWebApplicationContext

RootWebApplicationContext 에는 일반적으로 여러 Servlet인스턴스에서 공유해야하는 데이터 저장소 및 비즈니스 서비스와 같은 인프라 빈이 포함됩니다.

3.[흐름도]

자세한과정:SpringDocs3.2

4.[코드 뜯어보기]

--DispatcherServlet--

public class DispatcherServlet extends FrameworkServlet {
 
   @Nullable
    private MultipartResolver multipartResolver;
    @Nullable
    private LocaleResolver localeResolver;
    @Nullable
    private ThemeResolver themeResolver;
    @Nullable
    private List<HandlerMapping> handlerMappings;
    @Nullable
    private List<HandlerAdapter> handlerAdapters;
    @Nullable
    private List<HandlerExceptionResolver> handlerExceptionResolvers;
    @Nullable
    private RequestToViewNameTranslator viewNameTranslator;
    @Nullable
    private FlashMapManager flashMapManager;
    @Nullable
    private List<ViewResolver> viewResolvers;
    
    public DispatcherServlet() {
        this.setDispatchOptionsRequest(true);
    }

    public DispatcherServlet(WebApplicationContext webApplicationContext) {
        super(webApplicationContext);
        this.setDispatchOptionsRequest(true);
    }

    .
    .
    .

1.DispatcherServlet은 FrameworkServlet을 상속하고 있는데
이는 HttpServletBean을 상속하며 WebApplicationServlet,비즈니스로직, Configuration을 관리하고 다룹니다.
1. 실제로 여러가지 Resolver들과 HandlerMapping관련 인터페이스를 맴버변수로 가지고 있음을 알 수 있다.

--WebApplicationContext--

public interface WebApplicationContext extends ApplicationContext {
String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT";
String SCOPE_REQUEST = "request";
String SCOPE_SESSION = "session";
String SCOPE_APPLICATION = "application";
String SERVLET_CONTEXT_BEAN_NAME = "servletContext";
String CONTEXT_PARAMETERS_BEAN_NAME = "contextParameters";
String CONTEXT_ATTRIBUTES_BEAN_NAME = "contextAttributes";

@Nullable
ServletContext getServletContext();

}

1.WebApplicationContexts=ApplicationContext+Web+ServletContext

5.[실제 로그]


1.View에서 DispatcherServlet에게 해당 경로로 데이터를 요청하게 됩니다.
2.RequestHandelrMapping에서 OwnerController의 initFindForm으로 Mapping시켜 줍니다.
3.해당 내용을 처리하고 해당내용을 return 하는데 ViewResolver에서 경로 지정하여 전달해줍니다.

6.[요약]

DispatcherServlet 은 들어오는 HttpRequest를 처리 하고 요청을 위임 하며 Spring 애플리케이션 내에서 구현 된 구성된 HandlerAdapter 인터페이스 에 따라 해당 요청을 처리합니다.(Handler,Controller,EndPoint 관련 어노테이션을 통해서)

참고출처:
baeldung,Spring5,Spring3

profile
끈임없이 발전하자.

0개의 댓글