봄수의 연구실

DispatcherServlet 본문

DEV/Java

DispatcherServlet

berom 2023. 5. 19. 21:00

DispatcherServlet

DispatcherServlet은 Spring MVC 프레임워크의 핵심 요소 중 하나로, 모든 HTTP 요청을 최초로 받아들이는 ‘프론트 컨트롤러’ 역할을 합니다.

Spring의 web MVC 프레임워크의 중앙 서블릿인 DispatcherServlet는 클라이언트의 요청을 받아 적절한 컨트롤러에게 전달하고, 그 컨트롤러에서의 처리 결과를 바탕으로 적절한 뷰를 선택해주는 중요한 역할을 합니다

DispatcherServlet의 주요 역할은 다음과 같습니다:

  1. 요청 분석: 클라이언트로부터 오는 HTTP 요청을 분석합니다.
  2. 핸들러 매핑: 분석된 요청을 해당하는 컨트롤러에게 전달하기 위해 핸들러 맵핑을 수행합니다.
  3. 요청 처리: 매핑된 컨트롤러가 요청을 처리하고 결과를 반환하면, DispatcherServlet은 이 결과를 다시 분석합니다.
  4. 뷰 선택 및 렌더링: 컨트롤러가 반환한 뷰 이름을 바탕으로 실제 뷰를 찾아 렌더링합니다.

DispatcherServlet의 설정은 보통 web.xml 파일이나 Java의 WebApplicationInitializer를 통해 이루어집니다.

DispatcherServlet의 포지션


Front Controller가 DispatchServlet입니다

  1. DispatcherServlet는 실제 서블릿(HttpServlet 클래스를 상속)으로서, 웹 애플리케이션의 web.xml에서 선언됩니다.
  2. DispatcherServlet가 처리하게 될 요청들은 web.xml에서 URL 매핑을 사용하여 매핑해야 합니다.
  3. 각 DispatcherServlet은 자신만의 WebApplicationContext를 가집니다.
  4. DispatcherServlet 초기화 시, 프레임워크는 웹 애플리케이션의 WEB-INF 디렉토리에서 [servlet-name]-servlet.xml 파일을 찾고, 해당 파일에 정의된 빈들을 생성합니다.

URL 맵핑

먼저 Servlet URL 매핑 전략을 알고 갑시다

  1. 정확한 매핑 지정된 경로와 정확히 일치합니다.
    • 이것은 web.xml 파일에서 /path 형식의 URL 패턴으로 표시됩니다.
  2. 경로 매핑
    • 디렉토리와 유사한 패턴을 기반으로 요청을 일치시킵니다.
    • 이것은 /path/*와 같은 패턴으로 표시됩니다.
  3. 확장자 매핑
    • 요청의 파일 확장자를 기준으로 요청을 일치시킵니다.
    • 이것은 *.ext와 같은 패턴으로 표시됩니다.
  4. 기본 매핑
    • 일치하는 다른 매핑이 없을 때를 위한 폴백입니다. 단일 /로 표시됩니다.

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 태그로 데이터에 액세스할 수 있으므로 동적 웹 콘텐츠를 보다 쉽게 ​​생성할 수 있습니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'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