๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

<dispatcher> ํƒœ๊ทธ๋ž€?

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2025. 4. 7.

<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> ← ์ƒ๋žต ์‹œ์—๋„ ํฌํ•จ๋จ

๋Œ“๊ธ€