개발하는지호

<dispatcher> 태그란?

by 개발하는지호

<dispatcher> 태그란?

위치

<filter-mapping> 또는 <servlet-mapping> 안에서 사용된다.

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

 

 


 

<dispatcher>는 어떤 역할을 하는가?

: 요청이 어떤 종류의 디스패치(분배) 과정으로 왔는지를 기준으로 필터/서블릿이 동작할지를 결정하는 역할

 


 

사용할 수 있는 <dispatcher> 종류

dispatcher 종류 설명
REQUEST 클라이언트가 직접 보낸 HTTP 요청
FORWARD 서버 내부에서 RequestDispatcher.forward() 로 전달된 요청
INCLUDE 다른 자원(RequestDispatcher.include()) 을 포함한 요청
ERROR 예외나 상태코드로 매핑된 에러 처리 요청
ASYNC 비동기 요청 (AnsycContexet)에 의해 처리되는 요청

 


1. REQUEST

  • 사용자가 브라우저에서 직접 /hello 요청
  • 필터나 서블릿이 이 요청을 처리할지 설정
  • 기본값
<dispatcher>REQUEST</dispatcher>

 

2. FORWARD

  • A에서 B로 요청을 넘길 때 request.getRequestDispatcher("/other").forward(req, res) 같은 방식
  • 사용자가 직접 요청하지 않았지만, 내부적으로 다른 자원에게 요청이 전달됨
<dispatcher>FORWARD</dispatcher>

 

예시 흐름도

클라이언트 → /first → 내부적으로 /second 로 forward → 필터도 second에 작동!

 

 

3. INCLUDE

  • 하나의 자원에서 다른 자원의 결과를 "포함"할 때 (include() 사용)
  • 보통 JSP에서 jsp:include 할 때 발생함
  • 포함된 자원에도 필터를 적용하고 싶을 때 사용
<dispatcher>INCLUDE</dispatcher>

 

 

4. ERROR

  • 에러가 발생하면 web.xml에 등록된 <error-page> 설정에 따라 이동
  • 이 이동되는 요청에 대해서도 필터나 서블릿이 작동할 수 있음
<dispatcher>ERROR</dispatcher>

 

예시 흐름도

/hello 요청 중 예외 발생 → /error.jsp 로 이동 → 이때도 필터 적용하고 싶으면 ERROR!

 

5. ASYNC

  • 서블릿에서 AsyncContext.start() 같은 비동기 처리를 할 경우
  • 비동기 응답 중에도 필터가 작동하길 원할 때
  • 서블릿 3.0 이상에서 비동기 기능을 쓸 때만 적용
<dispatcher>ASYNC</dispatcher>

 


 

여러 개 중복 사용 가능

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

디폴트

  • <dispatcher>를 생략하면 기본적으로 REQUEST 로 작동함
<dispatcher>REQUEST</dispatcher> ← 생략 시에도 포함됨

'개발 지식, 스크립트 > Spring' 카테고리의 다른 글

DispatcherServlet 이란  (0) 2025.04.04
스프링 부트 필터의 동작 구조  (3) 2024.10.21
@ManyToOne, OneToMany, OneToOne - 정리중 -  (1) 2024.04.01
@Singular - 정리중 -  (1) 2024.04.01
Spring security  (2) 2024.03.24

블로그의 정보

DevSecOps

개발하는지호

활동하기