spring mvc
๐ spring mvc
- ๋ชจ๋ธ, ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๊ฐ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์ ์๋์ด ์์ด ์๋ก ๊ตฌํ์ ์์กด์ ์ด์ง ์์ ์ฝํ ๊ฒฐํฉ๋๋ก ๊ตฌ์ฑ๋์ด ์ ์ฐํ๊ณ ํ์ฅํ๊ธฐ ์ฌ์
model1 ๋ฐฉ์
- jsp๋ง ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๊ฑฐ๋ java bean์ ํฌํจํ์ฌ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ์๋ฏธ
- jsp์ ๋ทฐ์ ๋น์ฆ๋์ค ๋ก์ง์ด ํผ์ฌ๋์ด ๋ณต์ก๋๊ฐ ๋์ - ์ ์ง๋ณด์ ์ด๋ ค์
model2 ๋ฐฉ์
- model - view -controller๋ก ๋ถ๋ฆฌ
- ๋ทฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌ๋ก ์ ์ง๋ณด์์ฑ ๋ฐ ํ์ฅ ์ฉ์ด
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด (์คํ๋ง mvc)
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ณ๋์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ ์ง์ค
- ๋ชจ๋ ์์ฒญ์ ๊ณตํต ๋ถ๋ถ์ ๋ณ๋(ํ๋ก ํธ ์ปจํธ๋กค๋ก)๋ก ์ฒ๋ฆฌ
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด ์คํ ํ๋ก์ธ์ค
- ํ๋ก ํธ ์ปจํธ๋กค๋ฌ = DispatcherServlet
- DispatcherServlet์ด http ์์ฒญ์ ๋ฐ์
- DispatcherServlet์ ์๋ธ Controller๋ก HTTP ์์ฒญ ์์
- ์๋ธ Controller๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํด DAO ๊ฐ์ฒด๋ฅผ ํธ์ถ
- DAO ๊ฐ์ฒด๋ ๋ฆฌ์์ค๋ฅผ ์์ธ์คํ์ฌ Model ๊ฐ์ฒด๋ฅผ ์์ฑ ํ ์์ฒญ ๊ฒฐ๊ณผ ๋ฆฌํด
- DispatcherServlet ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ์ ํฉํ ๋ทฐ์ ํ๋ฉด ์ฒ๋ฆฌ ์์ฒญ
- ์ ํ๋ ๋ทฐ๋ ํ๋ฉด์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ํ๋ฉด ์ฒ๋ฆฌ
- 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์ ํตํ์ฌ ๋ฑ๋ก
๋งคํ ์ค์ ๋ฐฉ์
- url๊ฒฝ๋ก ๋ด์ ๋ณ์ ๊ฐ์ @PathVariable ์ ์ฉ ๋ณ์๋ก ์ ๋ฌ
- @RequestMapping(value=โ/try/{msg}โ, method = RequestMethod.GET) public String getUserTest( @PathVariable(โmsgโ) String msg)
- ์์ฒญ ํ๋ผ๋ฏธํฐ ๊ฐ์ @RequestParam์ ์ฉ ๋ณ์๋ก ์ ๋ฌ
- @RequestMapping(value=โ/tryAโ, method = RequestMethod.GET) public String getUserTest1( @RequestParam(โmsgโ) String msg )
- ์์ฒญ ํ๋ผ๋ฏธํฐ ๊ฐ์ @ModelAttribute์ ์ฉ ๋ณ์๋ก ์ ๋ฌ
- @RequestMapping(value=โ/tryBโ, method = RequestMethod.GET) public String getUserTest2( @ModelAttribute(โmsgโ) String msg )
- @RequestMapping(value={โ/tryCโ, โ/tryDโ})
โข ๋ฐฐ์ด ํํ์ ๊ฐ์ ์ง์ ํ ์ ์์
โข tryC, tryD ์์ชฝ URL์ ๋์ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์์
-
์์ฒญ ํ๋ผ๋ฏธํฐ ๊ฐ์ @ModelAttribute ์ ์ฉ ๋ณ์๋ก ์ ๋ฌ
-
@RequestMapping(value={โ/tryCโ, โ/tryDโ}, method = RequestMethod.GET) public String getUserTest2( @ModelAttribute(โmsgโ) String msg )
-