1) Spring MVC๋?
MVC๋?
-
MVC๋ Model-View-Controller์ ์ฝ์์ ๋๋ค.
-
์๋๋ ์ ๋ก์ค ์ฐ๊ตฌ์์์ ์ผํ๋ ํธ๋คผ๊ทธ๋ฒ ๋ฆฐ์ฆ์ปค๊ทธ๊ฐ ์ฒ์์ผ๋ก ์๊ฐํ ๊ฐ๋ ์ผ๋ก, ๋ฐ์คํธํฑ ์ดํ๋ฆฌ์ผ์ด์ ์ฉ์ผ๋ก ๊ณ ์๋์์ต๋๋ค.
-
Model : ๋ชจ๋ธ์ ๋ทฐ๊ฐ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ํ ๋ชฉ๋ก์ด๋, ์ฃผ๋ฌธ ๋ด์ญ์ด ์ด์ ํด๋นํฉ๋๋ค.
-
View : ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ทฐ(View)๋ ์ค์ ๋ก ๋ณด์ด๋ ๋ถ๋ถ์ด๋ฉฐ, ๋ชจ๋ธ์ ์ฌ์ฉํด ๋ ๋๋ง์ ํฉ๋๋ค. ๋ทฐ๋ JSP, JSF, PDF, XML๋ฑ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํํฉ๋๋ค.
-
Controller : ์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์์ ์ก์ ์ ์๋ตํ๋ ์ปดํฌ๋ํธ์ ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๊ณ , ๋ค๋ฅธ ์ก์ ์ ์ํํฉ๋๋ค.
MVC Model 1 ์ํคํ ์ฒ
๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ํ๊ฒ ๋๋ฉด ํด๋น ์์ฒญ์ JSP๊ฐ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋๊น ๋ฐ๋ผ์ ์์ฒญ๋งํผ JSP ํ์ด์ง๊ฐ ์กด์ฌํด์ผ๊ฒ ์ฃ .
์ด๋ฐ JSP๋ Java๋ก ๋ง๋ค์ด์ง ํด๋์ค์ธ Java bean์(2) ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(3)๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ ์.
์ด ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ ์ด๋ฐ ์ผ์ ํ๊ฒ ๋๋ ๊ฑฐ์ฃ .
์ฌ๊ธฐ์์ ์ด์ผ๊ธฐํ๋ Java bean์ด๋ผ๊ณ ํ๋ ๊ฒ์ JDBC๋ก ์์ฑํ๋ Role Dao ๊ฐ์ ํด๋์ค.
๋ฌธ์ ์ ์ JSP ์์ฒด์ Java ์ฝ๋๋ HTML ์ด๋ฐ ์ฝ๋๋ค์ด ๋ง ์์ฌ์์ด ์ ์ง๋ณด์ ์ด๋ ค์ -> ๋ค์ ๋ชจ๋ธ
MVC Model 2 ์ํคํ ์ฒ
์์ฒญ ์์ฒด๋ฅผ ์๋ธ๋ฆฟ์ด ๋ฐ๊ฒ ํ๊ณ ์.(1)
์๋ธ๋ฆฟ์ด Java bean์ ์ด์ฉํด์ DB์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๊ณ
์ด๋ฐ ๊ฒฐ๊ณผ๋ค์ JSP๋ฅผ ํตํด์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ฒ ํ๋ ๋ชจ๋ธ ์ฌ์ฉ (5)
์๋ธ๋ฆฟ์ ์์ฒญ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ์ํํ๊ณ ์๊ณ ์.
JSP๋ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ํ๋ View์ ์ญํ ์ ํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๊ฒ ์ฃ .
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ก์ง๊ณผ ๋ทฐ๋ฅผ ๋ถ๋ฆฌํ ์๊ฐ ์๊ฒ ๋๋ ๊ฑฐ์์.
MVC Model2 ๋ฐ์ ํํ
ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ด๋ ๋ชจ๋ ์์ฒญ์ ํ๋ก ํฐ ์ปจํธ๋กค๋ฌ๋ผ๊ณ ํ๋ ์๋ธ๋ฆฟ ํด๋์ค๊ฐ ๋ค ๋ฐ์์.
์ด ์๋ธ๋ฆฟ์ ๋ฑ ํ๋๋ง ์กด์ฌํด์. ์ด๊ฒ ๋ชจ๋ ์์ฒญ์ ๋ค ๋ฐ์ง๋ง ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์์ฒญ๋ง ๋ฐ๊ณ ์ค์ ์ผ์ ์ฒ๋ฆฌํ์ง ์์์.
์ค์ ์ผ์ ์ฌ๊ธฐ์ ๋์ค๋ ์ปจํธ๋กค๋ฌ ํด๋์ค์๊ฒ ์์ํฉ๋๋ค.
์ด๋ฐ ์ปจํธ๋กค๋ฌ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌ์ผ์ ์ปจํธ๋กค๋ฌ ํด๋์ค ํน์ ํธ๋ค๋ฌ ํด๋์ค๋ผ๊ณ ์ด์ผ๊ธฐํ๊ธฐ๋ ํด์.
์๋ธ๋ฆฟ์ ๊ด๋ จ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ์ ์กฐ๊ธ ๋ถํธํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์. ์ด๋ฐ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฌ์ฉ์์ ๋ชจ๋ ์์ฒญ์ ์๋ธ๋ฆฟ์ด ๋ฐ๊ณ ๊ทธ ์์ฒญ์ ์ค์ ์ฒ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ ํน์ ํธ๋ค๋ฌ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํด๋์ค์๊ฒ ์์ํจ์ผ๋ก์จ ๊ด๋ จ๋ URL์ ํ๋์ ํด๋์ค์์ ๋ค ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๊ฒ ๋ผ์.
์ด๋ฐ ์ปจํธ๋กค๋ฌ๋ Java bean ๋ฑ์ ์ด์ฉํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ด๊ณ ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ธ์๋ค ๋ด๊ณ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์๊ฒ ๋ณด๋ด๋ฉด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์๋ง์ ๋ทฐ์๊ฒ ๋ชจ๋ธ์ ์ ๋ฌํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค.
Spring Web Module
Model2 MVC ํจํด์ ์ง์ํ๋ Spring Module
์์์ ์๊ธฐํ ๋ชจ๋ธ 2์ ๋ฐ์ ๋ ํํ๊ฐ Spring ํ๋ ์์ํฌ ๋ชจ๋ ์ค์ ํ๋์ธ Web ๋ชจ๋์ ๊ตฌํ์ด ๋์ด ์๊ณ ์. ์ด๋ฌํ Web ๋ชจ๋์ ๋ณดํต Spring MVC๋ผ๊ณ ํด์.
2) Spring MVC๊ตฌ์ฑ์์
Spring MVC ๊ธฐ๋ณธ ๋์ ํ๋ฆ
ํ๋: ์ ๊ณต, ๋ณด๋ผ: ๊ฐ๋ฐ์์ง์ , ๋ น์: ๋ ๋ค
DispatcherServlet
-
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ (Front Controller)
-
ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ์ ํ ์ด๋ฅผ ์ฒ๋ฆฌํ ํธ๋ค๋ฌ์๊ฒ ๋๊ธฐ๊ณ ํธ๋ค๋ฌ๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฌ์ฉ์์๊ฒ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
-
DispathcerServlet์ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด ์์ ์ ์ฒ๋ฆฌํ๋ค.
DispatcherServlet ๋ด๋ถ ๋์ํ๋ฆ
์์ฒญ ์ ์ฒ๋ฆฌ ์์
์ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ
org.springframework.web.servlet.LocaleResolver
-
์ง์ญ ์ ๋ณด๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ ์ ๋ต ์ค๋ธ์ ํธ์ด๋ค.
-
๋ํดํธ์ธ AcceptHeaderLocalResolver๋ HTTP ํค๋์ ์ ๋ณด๋ฅผ ๋ณด๊ณ ์ง์ญ์ ๋ณด๋ฅผ ์ค์ ํด์ค๋ค.
org.springframework.web.servlet.FlashMapManager
-
FlashMap๊ฐ์ฒด๋ฅผ ์กฐํ(retrieve) & ์ ์ฅ์ ์ํ ์ธํฐํ์ด์ค
-
RedirectAttributes์ addFlashAttribute๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์ ์ฅํ๋ค.
-
๋ฆฌ๋ค์ด๋ ํธ ํ ์กฐํ๋ฅผ ํ๋ฉด ๋ฐ๋ก ์ ๋ณด๋ ์ญ์ ๋๋ค.
org.springframework.web.context.request.RequestContextHolder
-
์ผ๋ฐ ๋น์์ HttpServletRequest, HttpServletResponse, HttpSession ๋ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
-
ํด๋น ๊ฐ์ฒด๋ฅผ ์ผ๋ฐ ๋น์์ ์ฌ์ฉํ๊ฒ ๋๋ฉด, Web์ ์ข ์์ ์ด ๋ ์ ์๋ค.
org.springframework.web.multipart.MultipartResolver
- ๋ฉํฐํํธ ํ์ผ ์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ์ ๋ต
์์ฒญ ์ ๋ฌ์ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ
org.springframework.web.servlet.HandlerMapping
-
HandlerMapping๊ตฌํ์ฒด๋ ์ด๋ค ํธ๋ค๋ฌ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ ๋ณด๋ฅผ ์๊ณ ์๋ค.
-
๋ํดํธ๋ก ์ค์ ๋๋ ์๋ ํธ๋ค๋ฌ๋งคํ์ BeanNameHandlerMapping๊ณผ DefaultAnnotationHandlerMapping 2๊ฐ์ง๊ฐ ์ค์ ๋์ด ์๋ค.
org.springframework.web.servlet.HandlerExecutionChain
-
HandlerExecutionChain๊ตฌํ์ฒด๋ ์ค์ ๋ก ํธ์ถ๋ ํธ๋ค๋ฌ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
-
์ฆ, ๋ฌด์์ด ์คํ๋์ด์ผ ๋ ์ง ์๊ณ ์๋ ๊ฐ์ฒด๋ผ๊ณ ๋งํ ์ ์์ผ๋ฉฐ, ํธ๋ค๋ฌ ์คํ์ ๊ณผ ์คํํ์ ์ํ๋ HandlerInterceptor๋ ์ฐธ์กฐํ๊ณ ์๋ค.
org.springframework.web.servlet.HandlerAdapter
-
์ค์ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
-
ํธ๋ค๋ฌ ์ด๋ํฐ๋ ์ ํ๋ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋ต์ ModelAndView๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ณ ์๋ค.
-
๋ํดํธ๋ก ์ค์ ๋์ด ์๋ ํธ๋ค๋ฌ์ด๋ํฐ๋ HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, AnnotationMethodHanlderAdapter 3๊ฐ์ง์ด๋ค.
-
@RequestMapping๊ณผ @Controller ์ ๋ ธํ ์ด์ ์ ํตํด ์ ์๋๋ ์ปจํธ๋กค๋ฌ์ ๊ฒฝ์ฐ DefaultAnnotationHandlerMapping์ ์ํด ํธ๋ค๋ฌ๊ฐ ๊ฒฐ์ ๋๊ณ , ๊ทธ์ ๋์๋๋ AnnotationMethodHandlerAdapter์ ์ํด ํธ์ถ์ด ์ผ์ด๋๋ค.
์์ฒญ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ
org.springframework.web.servlet.ModelAndView
- ModelAndView๋ Controller์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค view์ view์์ ์ฌ์ฉํ ๊ฐ์ ์ ๋ฌํ๋ ํด๋์ค์ด๋ค.
org.springframework.web.servlet.RequestToViewNameTranslator
- ์ปจํธ๋กค๋ฌ์์ ๋ทฐ ์ด๋ฆ์ด๋ ๋ทฐ ์ค๋ธ์ ํธ๋ฅผ ์ ๊ณตํด์ฃผ์ง ์์์ ๊ฒฝ์ฐ URL๊ณผ ๊ฐ์ ์์ฒญ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์๋์ผ๋ก ๋ทฐ ์ด๋ฆ์ ์์ฑํด์ฃผ๋ ์ ๋ต ์ค๋ธ์ ํธ์ด๋ค. ๋ํดํธ๋ DefaultRequestToViewNameTranslator์ด๋ค.
์์ธ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ
org.springframework.web.servlet.handlerexceptionresolver
-
๊ธฐ๋ณธ์ ์ผ๋ก DispatcherServlet์ด DefaultHandlerExceptionResolver๋ฅผ ๋ฑ๋กํ๋ค.
-
HandlerExceptionResolver๋ ์์ธ๊ฐ ๋์ ธ์ก์ ๋ ์ด๋ค ํธ๋ค๋ฌ๋ฅผ ์คํํ ๊ฒ์ธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
๋ทฐ ๋ ๋๋ง ๊ณผ์ ์ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ
org.springframework.web.servlet.ViewResolver
-
์ปจํธ๋กค๋ฌ๊ฐ ๋ฆฌํดํ ๋ทฐ ์ด๋ฆ์ ์ฐธ๊ณ ํด์ ์ ์ ํ ๋ทฐ ์ค๋ธ์ ํธ๋ฅผ ์ฐพ์์ฃผ๋ ๋ก์ง์ ๊ฐ์ง ์ ๋ต ์คํ์ ํธ์ด๋ค.
-
๋ทฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ ์ ํ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ถ๊ฐ๋ก ์ค์ ํด์ค ์ ์๋ค.
3) Spring MVC๋ฅผ ์ด์ฉํ ์น ํ์ด์ง ์์ฑ ์ค์ต
ํ๋ก์ ํธ ์ด๋ฆ: mvcexam04
pom.xml์ ๋งํฌ์์ ๋ณด๊ธฐ
error log1 - Dynamic Web Module ๋ฒ์ ๋ฐ๊พธ๊ธฐ
.settings/org.eclipse.wst.common.project.facet.core.xml ํ์ผ์ jst.web ๋ฒ์ 2.3 -> 3.1๋ก ๋ฐ๊พธ๊ณ ์ ๋ฐ์ดํธ ์ดํด๋ฆฝ์ค ์ฌ์์
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="3.1"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/>
</faceted-project>
web.xml์ ๋ฒ์ ๋ฐ๊พธ๊ธฐ
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="3.1"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/>
</faceted-project>
error log2 - jsp ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ ํ 404 ์๋ฌ
WEB-INF/views ํด๋ ๋ด์ jsp ํ์ผ ์์ฑํ๋๋ฐ ํ์ผ๋ช ์ ์คํ๊ฐ ๋์ ์ด๋ฆ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ๊ณ์ 404์๋ฌ๊ฐ ๋จ๋ ๊ฒฝ์ฐ ๋ฐํ.ํด๊ฒฐ์ฑ : ํ์ผ ์ญ์ ํ JSP File์ ํตํด ์ ํํ ์ด๋ฆ์ผ๋ก ๋ค์ ์์ฑํ๊ธฐ
error log3 ํ๊ธ ๊นจ์ง _ web.xml์ ์ฒจ๋ถ (web-app ํ๊ทธ ์์)
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<filter-name>encodingFilter</filter-name>
<url-pattern>/\*</url-pattern>
DispatcherServlet์ FrontController๋ก ์ค์ ํ๊ธฐ (3๊ฐ์ง ๋ฐฉ๋ฒ)
-
web.xml ํ์ผ์ ์ค์ (๋ง์ด ์ฌ์ฉ, ๋ ๋ค์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋๋จ)
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ, web.xml ํ์ผ์ spring ์ค์ ์ฝ์ด๋ค์ด๋๋ก DispathcerServlet์ค์
๋๋ฒ์งธ ๋ฐฉ๋ฒ, Java config(ํด๋์ค)๋ฅผ spring ์ค์ ์ฝ์ด๋ค์ด๋๋ก DispathcerServlet์ค์ (๊ฐ์์์ ์งํํ ์ค์ต)
-
javax.servlet.ServletContainerInitializer ์ฌ์ฉ (๊ฐ์์์๋ ์๋ ค์ฃผ์ง ์์)
-
์๋ธ๋ฆฟ 3.0 ์คํ ์ด์์์ web.xmlํ์ผ์ ๋์ ํด์ ์ฌ์ฉํ ์ ์๋ค.
-
Spring MVC๋ ServletContainerInitializer๋ฅผ ๊ตฌํํ๊ณ ์๋ SpringServletContainerInitializer๋ฅผ ์ ๊ณตํ๋ค.
- SpringServletContainerInitializer๋ WebApplicationInitializer ๊ตฌํ์ฒด๋ฅผ ์ฐพ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ํด๋น ์ธ์คํด์ค์ onStartup ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๊ธฐํํ๋ค.
- ๊ทธ๋์ ๋งจ ์ฒ์ ์คํ ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ ์ ์ด ์๋ค.
-
-
org.springframework.web.WebApplicationInitializer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ ์ฌ์ฉ (๋ง์ด ์ฌ์ฉ)
Spring MVC ์ค์
kr.or.connect.webmvc.config.WebMvcContextConfiguration
error log4 - implements WebMvcConfigurer์ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋๊ฐ ๋๋ฌด ๋ง๋ค.
public class WebMvcContextConfiguration implements WebMvcConfigurer
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter
๋ ์ค ๋๋ ๊ฑธ๋ก ํ์
### ๊ด๋ จ ์ค๋ช
@Configuration
- org.springframework.context.annotation์ Configuration ์ ๋ ธํ ์ด์ ๊ณผ Bean ์ ๋ ธํ ์ด์ ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ์คํ๋ง ์ปจํ ์ด๋์ ์๋ก์ด ๋น ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ ์ ์๋ค.
@EnableWebMvc
-
DispatcherServlet์ RequestMappingHandlerMapping, RequestMappingHandlerAdapter, ExceptionHandlerExceptionResolver, MessageConverter ๋ฑ Web์ ํ์ํ ๋น๋ค์ ๋๋ถ๋ถ ์๋์ผ๋ก ์ค์ ํด์ค๋ค.
-
xml๋ก ์ค์ ์ mvc:annotation-driven/ ์ ๋์ผํ๋ค.(์์ ์๋ค๋ฃธ)
-
๊ธฐ๋ณธ ์ค์ ์ด์ธ์ ์ค์ ์ด ํ์ํ๋ค๋ฉด WebMvcConfigurerAdapter ๋ฅผ ์์๋ฐ๋๋ก Java config class๋ฅผ ์์ฑํ ํ, ํ์ํ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋๋ก ํ๋ค.
WebMvcConfigurationSupport ์ ๋ ์์ธํ ์์๋ณด๊ณ ์ถ๋ค๋ฉด
@ComponentScan
-
ComponentScan์ ๋ ธํ ์ด์ ์ ์ด์ฉํ๋ฉด Controller, Service, Repository, Component์ ๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ์ฐพ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๊ฒ ๋๋ค.
-
DefaultAnnotationHandlerMapping๊ณผ RequestMappingHandlerMapping๊ตฌํ์ฒด๋ ๋ค๋ฅธ ํธ๋๋ฌ ๋งคํ๋ณด๋ค ํจ์ฌ ๋ ์ ๊ตํ ์์ ์ ์ํํ๋ค. ์ด ๋ ๊ฐ์ ๊ตฌํ์ฒด๋ ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํด ๋งคํ ๊ด๊ณ๋ฅผ ์ฐพ๋ ๋งค์ฐ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ค ๊ตฌํ์ฒด๋ ์คํ๋ง ์ปจํ ์ด๋ ์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์๋ ์์ฒญ ์ฒ๋ฆฌ ๋น์์ RequestMapping์ ๋ ธํ ์ด์ ์ ํด๋์ค๋ ๋ฉ์๋์์ ์ฐพ์ HandlerMapping๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
-
HandlerMapping์ ์๋ฒ๋ก ๋ค์ด์จ ์์ฒญ์ ์ด๋ ํธ๋ค๋ฌ๋ก ์ ๋ฌํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ์ํํ๋ค.
-
DefaultAnnotationHandlerMapping์ DispatcherServlet์ด ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋กํ๋ ๊ธฐ๋ณธ ํธ๋ค๋ฌ ๋งตํ ๊ฐ์ฒด์ด๊ณ , RequestMappingHandlerMapping์ ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ์ง๋ง ์ฌ์ฉํ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
WebMvcConfigurer
-
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
-
@EnableWebMvc ๋ฅผ ์ด์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ด ๋ชจ๋ ์๋์ผ๋ก ๋์ง๋ง, ๊ธฐ๋ณธ ์ค์ ์ด์ธ์ ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ ํด๋น ํด๋์ค(์ธํฐํ์ด์ค)๋ฅผ ์์ ๋ฐ์ ํ, ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ฌ ๊ตฌํํ๋ค.
Controller(Handler) ํด๋์ค ์์ฑํ๊ธฐ (์ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํด๋์ค)
-
@Controller ์ ๋ ธํ ์ด์ ์ ํด๋์ค ์์ ๋ถ์ธ๋ค.
-
๋งตํ์ ์ํด @RequestMapping ์ ๋ ธํ ์ด์ ์ ํด๋์ค๋ ๋ฉ์๋์์ ์ฌ์ฉํ๋ค.
@RequestMapping
-
Http ์์ฒญ๊ณผ ์ด๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ Controller ์ ๋ฉ์๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ด๋ ธํ ์ด์
-
Http Method ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- @RequestMapping(value="/users", method=RequestMethod.POST)
- From Spring 4.3 version (@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping) -
Http ํน์ ํด๋์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- @RequestMapping(method = RequestMethod.GET, headers = "content-type=application/json") -
Http Parameter ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- @RequestMapping(method = RequestMethod.GET, params = "type=raw") -
Content-Type Header ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- @RequestMapping(method = RequestMethod.GET, consumes = "application/json") -
Accept Header ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- @RequestMapping(method = RequestMethod.GET, produces = "application/json")
Controller์์ฑ ์ค์ต
-
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:8080/mvcexam/plusform ์ด๋ผ๊ณ ์์ฒญ์ ๋ณด ๋ด๋ฉด ์๋ฒ๋ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ 2๊ฐ์ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ ์๋ ์ ๋ ฅ ์ฐฝ๊ณผ ๋ฒํผ์ด ์๋ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
-
์น ๋ธ๋ผ์ฐ์ ์ 2๊ฐ์ ๊ฐ์ ์ ๋ ฅํ๊ณ ๋ฒํผ์ ํด๋ฆญํ๋ฉด http://localhost:8080/mvcexam/plus URL๋ก 2๊ฐ์ ์ ๋ ฅ๊ฐ์ด POST๋ฐฉ์์ผ๋ก ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค. ์๋ฒ๋ 2๊ฐ์ ๊ฐ์ ๋ํ ํ, ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ JSP์๊ฒ request scope์ผ๋ก ์ ๋ฌํ์ฌ ์ถ๋ ฅํ๋ค.
Spring MVC๊ฐ ์ง์ํ๋ Controller๋ฉ์๋ ์ธ์ ํ์
-
javax.servlet.ServletRequest
-
javax.servlet.http.HttpServletRequest
-
org.springframework.web.multipart.MultipartRequest
-
org.springframework.web.multipart.MultipartHttpServletRequest
-
javax.servlet.ServletResponse
-
javax.servlet.http.HttpServletResponse
-
javax.servlet.http.HttpSession
-
org.springframework.web.context.request.WebRequest
-
org.springframework.web.context.request.NativeWebRequest
-
java.util.Locale
-
java.io.InputStream
-
java.io.Reader
-
java.io.OutputStream
-
java.io.Writer
-
javax.security.Principal
-
java.util.Map
-
org.springframework.ui.Model
-
org.springframework.ui.ModelMap
-
org.springframework.web.multipart.MultipartFile
-
javax.servlet.http.Part
-
org.springframework.web.servlet.mvc.support.RedirectAttributes
-
org.springframework.validation.Errors
-
org.springframework.validation.BindingResult
-
org.springframework.web.bind.support.SessionStatus
-
org.springframework.web.util.UriComponentsBuilder
-
org.springframework.http.HttpEntity<?>
-
Command ๋๋ Form ๊ฐ์ฒด
Spring MVC๊ฐ ์ง์ํ๋ ๋ฉ์๋ ์ธ์ ์ ๋ ธํ ์ด์
-
@RequestParam
-
@RequestHeader
-
@RequestBody
-
@RequestPart
-
@ModelAttribute ์ฌ์ฉ์์๋ UserController
-
@PathVariable
-
@CookieValue
@RequestParam ์ฌ์ฉ์์๋ PlusController
-
Mapping๋ ๋ฉ์๋์ Argument์ ๋ถ์ผ ์ ์๋ ์ด๋ ธํ ์ด์
-
@RequestParam์ name์๋ http parameter์ name๊ณผ ๋ฉฅํ
-
@RequestParam์ required๋ ํ์์ธ์ง ์๋์ง ํ๋จ
@PathVariable ์ฌ์ฉ์์๋ GoodsController
-
@RequestMapping์ path์ ๋ณ์๋ช ์ ์ ๋ ฅ๋ฐ๊ธฐ ์ํ place holder๊ฐ ํ์ํจ
-
place holder์ ์ด๋ฆ๊ณผ PathVariable์ name ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด mapping ๋จ
-
required ์์ฑ์ default true ์
@RequestHeader
-
์์ฒญ ์ ๋ณด์ ํค๋ ์ ๋ณด๋ฅผ ์ฝ์ด๋ค ์ผ ๋ ์ฌ์ฉ
-
@RequestHeader(name="ํค๋๋ช ") String ๋ณ์๋ช
Spring MVC๊ฐ ์ง์ํ๋ ๋ฉ์๋ ๋ฆฌํด ๊ฐ
-
org.springframework.web.servlet.ModelAndView
-
org.springframework.ui.Model
-
java.util.Map
-
org.springframework.ui.ModelMap
-
org.springframework.web.servlet.View
-
java.lang.String
-
java.lang.Void
-
org.springframework.http.HttpEntity<?>
-
org.springframework.http.ResponseEntity<?>
-
๊ธฐํ ๋ฆฌํด ํ์
'Spring > Boost Course Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
4.4 Controller (0) | 2020.11.19 |
---|---|
4.3 WEB API (0) | 2020.11.19 |
4.2 Layered Architecture (0) | 2020.11.19 |
3.3 Spring JDBC (0) | 2020.11.19 |
3.2 Spring Test (0) | 2020.11.19 |
3.1 Spring Core (0) | 2020.11.19 |