๐Ÿ“˜ spring mvc

  • ๋ชจ๋ธ, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ฐ๊ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์–ด ์„œ๋กœ ๊ตฌํ˜„์— ์˜์กด์ ์ด์ง€ ์•Š์•„ ์•ฝํ•œ ๊ฒฐํ•ฉ๋„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์‰ฌ์›€

model1 ๋ฐฉ์‹

  • jsp๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ java bean์„ ํฌํ•จํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธ
  • jsp์— ๋ทฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํ˜ผ์žฌ๋˜์–ด ๋ณต์žก๋„๊ฐ€ ๋†’์Œ - ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€

model2 ๋ฐฉ์‹

  • model - view -controller๋กœ ๋ถ„๋ฆฌ
  • ๋ทฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ถ„๋ฆฌ๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ํ™•์žฅ ์šฉ์ด

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด (์Šคํ”„๋ง mvc)

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ณ„๋„์˜ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์— ์ง‘์ค‘
    • ๋ชจ๋“  ์š”์ฒญ์˜ ๊ณตํ†ต ๋ถ€๋ถ„์„ ๋ณ„๋„(ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋กœ)๋กœ ์ฒ˜๋ฆฌ

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ = DispatcherServlet
    1. DispatcherServlet์ด http ์š”์ฒญ์„ ๋ฐ›์Œ
    2. DispatcherServlet์€ ์„œ๋ธŒ Controller๋กœ HTTP ์š”์ฒญ ์œ„์ž„
    3. ์„œ๋ธŒ Controller๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด DAO ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœ
    4. DAO ๊ฐ์ฒด๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์—‘์„ธ์Šคํ•˜์—ฌ Model ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„ ์š”์ฒญ ๊ฒฐ๊ณผ ๋ฆฌํ„ด
    5. DispatcherServlet ์€ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ์— ์ ํ•ฉํ•œ ๋ทฐ์— ํ™”๋ฉด ์ฒ˜๋ฆฌ ์š”์ฒญ
    6. ์„ ํƒ๋œ ๋ทฐ๋Š” ํ™”๋ฉด์— ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ํ™”๋ฉด ์ฒ˜๋ฆฌ
    7. HTTP ์‘๋‹ต

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด

  • DispatcherServlet : ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ Controller์—๊ฒŒ ํด๋ผ์ด์–ธ ํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ , ๋ฆฌํ„ด ๊ฒฐ๊ณผ๊ฐ’์„ View์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์•Œ๋งž์€ ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค.
  • HandlerMapping : URL๊ณผ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ์ฒด. DispatcherServlet์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ. ์• ๋…ธํ…Œ์ด์…˜์„ ์ด์šฉ ํ•  ๋•Œ์—๋Š” mvn:annotation-driven ํƒœ๊ทธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•จ

์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ ๋“ฑ๋ก ์„ค์ •

  • ContextLoadListner ํด๋ž˜์Šค
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat)์— ContextLoadListner ํด๋ž˜์Šค ๋“ฑ๋ก
    • ์„œ๋น„์Šค ๊ณ„์ธต ์ดํ•˜์˜ ๋นˆ(@Service, @Repository ๋“ฑ)์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
  • DispatcherServlet ํด๋ž˜์Šค
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat)์— ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์ธ DispatcherServlet ํด๋ž˜์Šค ๋“ฑ๋ก
    • ์ปจํŠธ๋กค๋Ÿฌ(@Controller ๋˜๋Š” @Component) ๋นˆ์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

์ˆœ์„œ : ํ†ฐ์บฃ์‹คํ–‰ ์ข…๋ฃŒ ์‹œ์ ๊ณผ wac์‹คํ–‰ ์ข…๋ฃŒ ์‹œ์  ๊ฐ™์Œ

listener(ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰)์„ ํ†ตํ•ด ์‹คํ–‰์‹œ ์ดˆ๊ธฐ ์„ค์ • ๊ฐ€๋Šฅ

root-context.xml(์„œ๋น„์Šค ์ดํ•˜ ๊ณ„์ธต ๋นˆ ๋“ฑ๋ก): component-scan ์œผ๋กœ ๋นˆ ๋“ฑ๋ก (์„œ๋น„์Šค ์ดํ•˜ di ๋“ฑ๋ก) (์„œ๋ธ”๋ฆฟ ๊ด€๋ จ ๋นˆ ์™ธ ๋ชจ๋“  ๊ณ„์ธต ๋นˆ ๋“ฑ๋ก)

servlet-context.xml(ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ๋ก) (contextLoadListener์ƒ์† ๋ฐ›์€, ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ ๋“ฑ๋ก) : component-scan ์œผ๋กœ ๋นˆ๋“ฑ๋ก ( ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ di ๋“ฑ๋ก) (์„œ๋ธ”๋ฆฟ๊ด€๋ จ ๊ณ„์ธต ๋นˆ ๋“ฑ๋ก) annotation-driven์„ ํ†ตํ•˜์—ฌ ๋“ฑ๋ก

๋งคํ•‘ ์„ค์ • ๋ฐฉ์‹

  1. url๊ฒฝ๋กœ ๋‚ด์˜ ๋ณ€์ˆ˜ ๊ฐ’์„ @PathVariable ์ ์šฉ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ
    • @RequestMapping(value=โ€/try/{msg}โ€, method = RequestMethod.GET) public String getUserTest( @PathVariable(โ€œmsgโ€) String msg)
  2. ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ @RequestParam์ ์šฉ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ
    • @RequestMapping(value=โ€/tryAโ€, method = RequestMethod.GET) public String getUserTest1( @RequestParam(โ€œmsgโ€) String msg )
  3. ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ @ModelAttribute์ ์šฉ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ
    • @RequestMapping(value=โ€/tryBโ€, method = RequestMethod.GET) public String getUserTest2( @ModelAttribute(โ€œmsgโ€) String msg )
  4. @RequestMapping(value={โ€œ/tryCโ€, โ€œ/tryDโ€}) โ€ข ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ โ€ข tryC, tryD ์–‘์ชฝ URL์— ๋Œ€์‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ
    • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ @ModelAttribute ์ ์šฉ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ

    • @RequestMapping(value={โ€œ/tryCโ€, โ€œ/tryDโ€}, method = RequestMethod.GET) public String getUserTest2( @ModelAttribute(โ€œmsgโ€) String msg )

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: