<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
개발하는지호