DispatcherServlet
DispatcherServlet
은 Spring MVC 프레임워크의 핵심 요소 중 하나로, 모든 HTTP 요청을 최초로 받아들이는 ‘프론트 컨트롤러’ 역할을 합니다.
Spring의 web MVC 프레임워크의 중앙 서블릿인 DispatcherServlet
는 클라이언트의 요청을 받아 적절한 컨트롤러에게 전달하고, 그 컨트롤러에서의 처리 결과를 바탕으로 적절한 뷰를 선택해주는 중요한 역할을 합니다
DispatcherServlet
의 주요 역할은 다음과 같습니다:
- 요청 분석: 클라이언트로부터 오는 HTTP 요청을 분석합니다.
- 핸들러 매핑: 분석된 요청을 해당하는 컨트롤러에게 전달하기 위해 핸들러 맵핑을 수행합니다.
- 요청 처리: 매핑된 컨트롤러가 요청을 처리하고 결과를 반환하면,
DispatcherServlet
은 이 결과를 다시 분석합니다. - 뷰 선택 및 렌더링: 컨트롤러가 반환한 뷰 이름을 바탕으로 실제 뷰를 찾아 렌더링합니다.
DispatcherServlet
의 설정은 보통 web.xml
파일이나 Java의 WebApplicationInitializer
를 통해 이루어집니다.
DispatcherServlet의 포지션
Front Controller가 DispatchServlet입니다
- DispatcherServlet는 실제 서블릿(HttpServlet 클래스를 상속)으로서, 웹 애플리케이션의 web.xml에서 선언됩니다.
- DispatcherServlet가 처리하게 될 요청들은 web.xml에서 URL 매핑을 사용하여 매핑해야 합니다.
- 각 DispatcherServlet은 자신만의 WebApplicationContext를 가집니다.
- DispatcherServlet 초기화 시, 프레임워크는 웹 애플리케이션의 WEB-INF 디렉토리에서
[servlet-name]-servlet.xml
파일을 찾고, 해당 파일에 정의된 빈들을 생성합니다.
URL 맵핑
먼저 Servlet URL 매핑 전략을 알고 갑시다
- 정확한 매핑 지정된 경로와 정확히 일치합니다.
- 이것은
web.xml
파일에서/path
형식의 URL 패턴으로 표시됩니다.
- 이것은
- 경로 매핑
- 디렉토리와 유사한 패턴을 기반으로 요청을 일치시킵니다.
- 이것은
/path/*
와 같은 패턴으로 표시됩니다.
- 확장자 매핑
- 요청의 파일 확장자를 기준으로 요청을 일치시킵니다.
- 이것은
*.ext
와 같은 패턴으로 표시됩니다.
- 기본 매핑
- 일치하는 다른 매핑이 없을 때를 위한 폴백입니다. 단일
/
로 표시됩니다.
- 일치하는 다른 매핑이 없을 때를 위한 폴백입니다. 단일
Spring에서 DispatcherServlet
은 애플리케이션에 들어오는 모든 요청을 처리하는 전면 컨트롤러입니다.
각 요청은 검사되어 애플리케이션 구성에 정의된 URL 패턴에 따라 적절한 핸들러(컨트롤러)로 발송됩니다.
DispatcherServlet
은 정적 및 동적 리소스를 모두 처리합니다.
요청이 들어오고 해당 요청에 대한 특정 처리기가 없는 경우 DispatcherServlet
은 해당 요청을 처리하는 기본 서블릿 역할을 합니다.
또한 Spring에서 서블릿(DispatcherServlet
포함)은 서블릿 컨텍스트에 등록되어 애플리케이션 전체에서 액세스할 수 있습니다.
DispatcherServlet
이 요청 흐름
HandlerMapping
요청이 발생하면 HandlerMapping은 URL을 확인하고 URL 패턴에 따라 호출할 컨트롤러를 결정합니다.
기본적으로 미리 구성된 규칙 또는 매핑 세트를 기반으로 들어오는 요청을 처리기 메서드와 일치시킵니다.
HandlerAdapter
HandlerAdapter는 DispatcherServlet과 컨트롤러 사이의 브리지 역할을 합니다.
컨트롤러가 요청을 처리하도록 준비합니다.
DispatcherServlet에서 사용할 수 있는 공통 인터페이스로 서로 다른 컨트롤러를 래핑하여 컨트롤러 실행을 가능하게 합니다.
이 설계를 통해 응용 프로그램이 변경 사항에 쉽게 적응할 수 있으므로 컨트롤러를 유연하게 선택할 수 있습니다.
ViewResolver
Spring MVC의 ViewResolver는 뷰 해상도 전략을 구현하는 인터페이스입니다.
보기 이름(String 형태)이 주어지면 해당하는 뷰를 찾아줍니다
모델이 컨트롤러에 의해 반환되면 ViewResolver는 뷰 이름에 접두사와 접미사를 추가하고(servlet-context.xml의 구성에 따라) JSP 또는 Thymeleaf 템플릿과 같은 뷰 리소스로 변환합니다.
JstView
JstlView는 JSTL 기반(JavaServer Pages Standard Tag Library) 뷰를 처리하는 Spring MVC의 View 인터페이스 구현 중 하나입니다.
클라이언트를 위한 뷰를 렌더링하는 데 중요한 역할을 합니다.
DispatcherServlet은 모델 데이터를 JstlView로 전달할 때 요청을 지정된 JSP 페이지로 전달하는 동시에 전달하기 전에 모든 모델 데이터를 요청 속성으로 사용할 수 있도록 하는 책임을 집니다.
이를 통해 JSP 페이지에서 JSTL 태그로 데이터에 액세스할 수 있으므로 동적 웹 콘텐츠를 보다 쉽게 생성할 수 있습니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
예외처리 with Spring (0) | 2023.05.26 |
---|---|
Spring MVC의 Redirect와 Forward (2) | 2023.05.19 |
Spring은 어떻게 매개변수만 적으면 라우팅을 해주는걸까 (0) | 2023.05.19 |
Spring MVC @ModelAttribute (0) | 2023.05.19 |
Servlet filter (0) | 2023.05.19 |