DispatcherServlet (디스패처 서블릿)

이건우·2025년 3월 3일

웹 프로그래밍

목록 보기
12/43

모든 HTTP 요청을 받아서 적절한 컨트롤러로 전달하고,
실행 결과를 클라이언트에게 반환하는 역할을 합니다.


DispatcherServlet의 동작

1. 클라이언트 요청 수신

클라이언트가 http 요청을 서버에 보내면,
DispatcherServlet이 요청을 가로챕니다.

2. 핸들러(Controller) 매핑

HandlerMapping이 URL에 맞는 컨트롤러를 색인합니다.

3. 컨트롤러 실행

찾은 컨트롤러가 실행되고 ModelAndView 객체를 반환합니다.

4. View 선택 및 렌더링

컨트롤러가 반환한 데이터ModelAndView에 담고, 설정된 ViewResolver를 사용하여 JSP, Thymeleaf 등의 View를 색인합니다.

5. 클라이언트 반환

해당 View에서 HTML을 생성하여 클라이언트에게 반환합니다.


DispatcherServlet 주요 컴포넌트

  • HandlerMapping 요청된 URL과 매칭되는 컨트롤러 색인
  • HandlerAdapter 컨트롤러를 실행
  • ViewResolver 컨트롤러가 반환한View 객체를 JSP, Thymeleaf 등 실제 뷰로 변환
  • ModelAndView 컨트롤러에서 반환한 데이터뷰 정보를 담고 있는 객체
  • HandlerExceptionResolver 컨트롤러에서 발생한 예외 처리

DispatcherServlet 설정하기

1) web.xml에 DispatcherServlet 등록

  <!-- Spring MVC의 핵심 컨트롤러 DispatcherServlet 등록 -->
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!-- 설정 파일들 위치 -->
      <param-value>
        /WEB-INF/springConfig/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 모든 요청(/*)을 Spring MVC의 DispatcherServlet이 처리하도록 설정 -->
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  • servlet
    DispatcherServlet을 서블릿으로 등록하는 설정,
    사용할 Spring 설정 파일의 위치를 지정하는 설정 옵션입니다.

  • servlet-mapping
    위에서 등록한 dispatcher라는 이름의 DispatcherServlet을
    특정 매핑에 연결하는 설정,
    모든 요청(/)을 DispatcherServlet이 처리하도록 설정 옵션입니다.


2) Spring 설정 파일 (servlet-context.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Component Scan (Spring Bean 자동 등록) -->
    <context:component-scan base-package="co.kr"/>

    <!-- Spring MVC 활성화 -->
    <mvc:annotation-driven/>

    <!-- View Resolver (JSP 경로 설정) -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
        <property name="cache" value="false" />
        <property name="exposeContextBeansAsAttributes" value="true"/>
    </bean>

</beans>
  • context:component-scan
    base-package속성에 설정된 패키지컴포넌트자동으로 스캔하는 설정

  • MVC 관련 어노테이션을 사용 가능하도록 활성화하는 설정

  • .jsp 뷰 파일을 /WEB-INF/views/ 경로에서 찾도록 설정

컨트롤러 예시

package co.kr;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("message", "Controller-Message");
        return "index";
    }
}

이제 해당 요청이 들어오면 "message" Model 데이터(Request Scope 속성)과 함께
.JSP 파일html로 생성하여 사용자에게 반환합니다.

profile
새싹개발자

0개의 댓글