[Spring] 5.์คํ๋ง MVC - ๊ตฌ์กฐ ์ดํด
1. ์คํ๋ง MVC ์ ์ฒด ๊ตฌ์กฐ
Spring MVC ๊ตฌ์กฐ
FrontController -> DispatcherServlet
handlerMappingMap -> HandlerMapping MyHandlerAdapter -> HandlerAdapter ModelView -> ModelAndView viewResolver -> ViewResolver MyView -> View |
DispatcherServlet ๊ตฌ์กฐ ์ดํด๋ณด๊ธฐ
ใด org.springframework.web.servlet.DispatcherServlet
DispatcherServlet ๋ฑ๋ก
- 'DispatcherServlet'๋ ๋ถ๋ชจ ํด๋์ค์์ 'HttpServlet'์ ์์๋ฐ์์ ์ฌ์ฉํ๊ณ , ์๋ธ๋ฆฟ์ผ๋ก ๋์
DispatcherServlet -> FrameworkdServlet -> HttpServletBean -> HttpServlet
- ์คํ๋ง ๋ถํธ๋ 'DispatcherServelt'์ ์๋ธ๋ฆฟ์ผ๋ก ์๋์ผ๋ก ๋ฑ๋กํ๋ฉด์ ๋ชจ๋ ๊ฒฝ๋ก ( urlPatterns"/")์ ๋ํด์ ๋งตํ
๋ ์์ธํ ๊ฒฝ๋ก๊ฐ ์ฐ์ ์์ ๋์ (๊ธฐ์กด ๋ฑ๋กํ ์๋ธ๋ฆฟ๋ ํจ๊ป ๋์)
์์ฒญ ํ๋ฆ
- ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ฉด HttpServlet์ด ์ ๊ณตํ๋ service()๊ฐ ํธ์ถ๋จ
- ์คํ๋ง MVC๋ DispatcherServlet์ ๋ถ๋ชจ์ธ FrameworkServlet์์ service()๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด๋
- FrameworkServlet.service()๋ฅผ ์์์ผ๋ก ์ฌ๋ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด์ DispatcherServlet.doDispatch()๊ฐ ํธ์ถ๋จ
DispatcherServlet์ ํต์ฌ์ธ doDispatch()* ์์ธ์ฒ๋ฆฌ, ์ธํฐ์ ํฐ ๊ธฐ๋ฅ ์ ์ธ
DispatcherServlet.doDispatch(); = ํต์ฌ ์ฝ๋
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
ModelAndView mv = null;
// 1. ํธ๋ค๋ฌ ์กฐํ
mappedHandler = getHandler(processedRequest);
if (mappedHandler == null) {
noHandlerFound(processedRequest, response);
return;
}
//2.ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ-ํธ๋ค๋ฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ด๋ํฐ
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
// 3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ -> 4. ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ํตํด ํธ๋ค๋ฌ ์คํ -> 5. ModelAndView ๋ฐํ
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
}
private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, HandlerExecutionChain mappedHandler,
ModelAndView mv, Exception exception) throws Exception {
// ๋ทฐ ๋ ๋๋ง ํธ์ถ
render(mv, request, response);
}
protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception {
View view;
String viewName = mv.getViewName();
//6. ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ํตํด์ ๋ทฐ ์ฐพ๊ธฐ,7.View ๋ฐํ
view = resolveViewName(viewName, mv.getModelInternal(), locale, request);
// 8. ๋ทฐ ๋ ๋๋ง
view.render(mv.getModelInternal(), request, response);
}
๋์ ์์
1. ํธ๋ค๋ฌ ์กฐํ : ํธ๋ค๋ฌ ๋งตํ์ ํตํด ์์ฒญ URL์ ๋งตํ๋ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ) ์กฐํ 2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ : ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ 3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์คํ 4. ํธ๋ค๋ฌ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ค์ ํธ๋ค๋ฌ๋ฅผ ์คํ 5. ModelAndView ๋ฐํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ๋๋ด๊ฐ ๋ฐํํ๋ ์ ๋ณด๋ฅผ ModelAndView๋ก ๋ณํํด์ ๋ฐํ 6. viewResolver ํธ์ถ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ฐพ๊ณ ์คํ JSP์ ๊ฒฝ์ฐ InternationalResourceViewResolver๊ฐ ์๋ ๋ฑ๋ก๋๊ณ ์ฌ์ฉ๋จ 7. View ๋ฐํ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ์ ๋ฌผ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊ตฌ๊ณ ๋ ๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํ JSP์ ๊ฒฝ์ฐ InternalResourceView(JstlView)๋ฅผ ๋ฐํํ๋๋ฐ ๋ด๋ถ์ forward()๋ก์ง์ด ์๋ค 8. ๋ทฐ ๋ ๋๋ง : ๋ทฐ๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ ๋๋ง |
์ธํฐํ์ด์ค ์ดํด๋ณด๊ธฐ
- ์คํ๋ง MVC ๊ฐ์ : DispatcherServlet ์ฝ๋ ๋ณ๊ฒฝ์์ด ์ํ๋ ๊ธฐ๋ฅ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅ ๊ฐ๋ฅ
- ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ DispatcherServlet์ ๋ฑ๋กํ๋ฉด ์์ ๋ง์ ์ปจํธ๋กค๋ฌ ๋ง๋ค ์ ์์ (์ด๋ด ์ผ์ ๊ฑฐ์ ์์)
์ฃผ์ ์ธํฐํ์ด์ค ๋ชฉ๋ก
์ ๋ฆฌ
์คํ๋ง MVC๋ ์ฝ๋ ๋ถ๋ ๋ง์์ ๋ด๋ถ ํ์ ์ด๋ ค์
๋๋ถ๋ถ ๊ธฐ๋ฅ ๊ตฌํ๋์ด์์
2. ํธ๋ค๋ฌ ๋งตํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ
์คํ๋ง์ ํธ๋ค๋ฌ ๋งตํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ๋๋ถ๋ถ ๊ตฌํํด๋์์
๊ฐ๋ฐ์๊ฐ ์ง์ ํธ๋ค๋ฌ ๋งตํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ๋ง๋๋ ์ผ์ ๊ฒ์ ์์
HandlerMapping ์ฐ์ ์์
0 = RequestMappingHandlerMapping : ์ ๋
ธํ
์ด์
๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ 1 = BeanNameUrlHandlerMapping : ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ (url๋ค์ด์ค๋ฉด ํด๋น url ์ด๋ฆ๊ณผ ๋๊ฐ์ ์ด๋ฆ์ ์คํ๋ง ๋น ์ฐพ์) |
HandleAdapter ์ฐ์ ์์
0 = RequestMappingHandlerAdapter : ์ ๋
ธํ
์ด์
๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping ์ด์ฉ 1 = HttpRequestHandlerAdapter : HttpRequestHandler ์ฒ๋ฆฌ 2 = SimpleControllerHandlerAdapter : Controller ์ธํฐํ์ด์ค (์ ๋ ธํ ์ด์ X, ๊ณผ๊ฑฐ์ ์ฌ์ฉ) ์ฒ๋ฆฌ |
์์)
1. ํธ๋ค๋ฌ ๋งตํ์ผ๋ก ํธ๋ค๋ฌ ์กฐํ
- HandlerMapping์ ์์๋๋ก ์คํํด์ ํธ๋ค๋ฌ ์ฐพ์
- ์ด ๊ฒฝ์ฐ ๋น ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ฆ ๊ทธ๋๋ก ๋น ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ฃผ๋ BeanNameUrlHandlerMapping๊ฐ ์คํ์ ์ฑ๊ณตํ๊ณ ํธ๋ค๋ฌ์ธ OldController๋ฅผ ๋ฐํ
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
- HandlerAdapter์ supports()๋ฅผ ์์๋๋ก ํธ์ถ
- SimpleControllerHandlerAdapter๊ฐ Controller ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋์์ด ๋จ
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
- DispatcherServlet์ด ์กฐํํ SimpleControllerHandlerAdapter๋ฅผ ์คํํ๋ฉด์ ํธ๋ค๋ฌ ์ ๋ณด๋ ํจ๊ป ๋๊ฒจ์ค
- SCHA๋ ํธ๋ค๋ฌ์ธ OldController๋ฅผ ๋ด๋ถ์์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
HttpRequestHandler
- ์๋ธ๋ฆฟ๊ณผ ๊ฐ์ฅ ์ ์ฌํ ํํ์ ํธ๋ค๋ฌ
์คํ ์์
1. ํธ๋ค๋ฌ ๋งคํ์ผ๋ก ํธ๋ค๋ฌ ์กฐํ
HandlerMapping ์ ์์๋๋ก ์คํํด์, ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค. ์ด๊ฒฝ์ฐ๋น์ด๋ฆ์ผ๋กํธ๋ค๋ฌ๋ฅผ์ฐพ์์ผํ๊ธฐ๋๋ฌธ์์ด๋ฆ๊ทธ๋๋ก๋น์ด๋ฆ์ผ๋กํธ๋ค๋ฌ๋ฅผ์ฐพ์์ฃผ๋ BeanNameUrlHandlerMapping ๊ฐ ์คํ์ ์ฑ๊ณตํ๊ณ ํธ๋ค๋ฌ์ธ MyHttpRequestHandler ๋ฅผ ๋ฐํํ๋ค. 2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ HandlerAdapter ์ supports() ๋ฅผ ์์๋๋ก ํธ์ถํ๋ค. HttpRequestHandlerAdapter ๊ฐ HttpRequestHandler ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋์์ด ๋๋ค. 3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์กฐํํ HttpRequestHandlerAdapter ๋ฅผ ์คํํ๋ฉด์ ํธ๋ค๋ฌ ์ ๋ณด๋ ํจ๊ป ๋๊ฒจ์ค๋ค. HttpRequestHandlerAdapter ๋ ํธ๋ค๋ฌ์ธ MyHttpRequestHandler ๋ฅผ ๋ด๋ถ์์ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. |
--> ๋ ๋ค ์์์
@RequestMapping
- ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ํธ๋ค๋ฌ ๋งตํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋ RequestMappingHandlerMapping, RequestMappingHandlerAdapter
- ์ค๋ฌด์์ ์ฃผ๋ก ์ด ๋ฐฉ์์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํจ
3. ๋ทฐ ๋ฆฌ์กธ๋ฒ
application.properties์ ๋ค์ ์ฝ๋ ์ถ๊ฐ
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
์คํ๋ง ๋ถํธ๋ InternalResourceViewResolver ๋ผ๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ๋๋ฐ,
์ด๋ application.properties ์ ๋ฑ๋กํ spring.mvc.view.prefix , spring.mvc.view.suffix ์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํด์ ๋ฑ๋กํ๋ค. ์ฐธ๊ณ ๋ก ๊ถ์ฅํ์ง๋ ์์ง๋ง ์ค์ ์์ด ๋ค์๊ณผ ๊ฐ์ด ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ฃผ์ด๋ ๋์ํ๊ธฐ๋ ํ๋ค. return new ModelAndView("/WEB-INF/views/new-form.jsp"); |
1. ํธ๋ค๋ฌ ์ด๋ํฐ ํธ์ถ
ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ํตํด new-form ์ด๋ผ๋ ๋ ผ๋ฆฌ ๋ทฐ ์ด๋ฆ์ ํ๋ํ๋ค. 2. ViewResolver ํธ์ถ new-form ์ด๋ผ๋ ๋ทฐ ์ด๋ฆ์ผ๋ก viewResolver๋ฅผ ์์๋๋ก ํธ์ถํ๋ค. BeanNameViewResolver ๋ new-form ์ด๋ผ๋ ์ด๋ฆ์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ ๋ทฐ๋ฅผ ์ฐพ์์ผ ํ๋๋ฐ ์๋ค. InternalResourceViewResolver ๊ฐ ํธ์ถ๋๋ค. 3. InternalResourceViewResolver ์ด ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ InternalResourceView ๋ฅผ ๋ฐํํ๋ค. 4. ๋ทฐ - InternalResourceView InternalResourceView ๋ JSP์ฒ๋ผ ํฌ์๋ forward() ๋ฅผ ํธ์ถํด์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. 5. view.render() view.render() ๊ฐ ํธ์ถ๋๊ณ InternalResourceView ๋ forward() ๋ฅผ ์ฌ์ฉํด์ JSP๋ฅผ ์คํํ๋ค. |
์ฐธ๊ณ
> InternalResourceViewResolver ๋ ๋ง์ฝ JSTL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉด InternalResourceView ๋ฅผ ์์๋ฐ์ JstlView ๋ฅผ ๋ฐํํ๋ค. JstlView ๋ JSTL ํ๊ทธ ์ฌ์ฉ์ ์ฝ๊ฐ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ค. ์ฐธ๊ณ > ๋ค๋ฅธ ๋ทฐ๋ ์ค์ ๋ทฐ๋ฅผ ๋ ๋๋งํ์ง๋ง, JSP์ ๊ฒฝ์ฐ forward() ํตํด์ ํด๋น JSP๋ก ์ด๋(์คํ)ํด์ผ ๋ ๋๋ง์ด ๋๋ค. JSP๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ทฐ ํ ํ๋ฆฟ๋ค์ forward() ๊ณผ์ ์์ด ๋ฐ๋ก ๋ ๋๋ง ๋๋ค. ์ฐธ๊ณ > Thymeleaf ๋ทฐ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ThymeleafViewResolver ๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค. ์ต๊ทผ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ถ๊ฐํ๋ฉด ์คํ๋ง ๋ถํธ๊ฐ ์ด๋ฐ ์์ ๋ ๋ชจ๋ ์๋ํํด์ค๋ค. |
4. ์คํ๋งMVC - ์์ํ๊ธฐ
- ์คํ๋ง์ด ์ ๊ณตํ๋ ์ปจํธ๋กค๋ฌ๋ ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๋์ (์ ์ฐํ๊ณ ์ค์ฉ์ )
@RequestMapping
- RequestMappingHandlerMapping -> ์ปจํธ๋กค๋ฌ ์ฐพ์์ค (๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์)
- RequestMappingHandlerAdapter -> ์ฐพ์ ์ปจํธ๋กค๋ฌ ์คํ (๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์)
ํ์ ๋ฑ๋ก ํผ
@Controller
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}
@Controller
- @Component ๋ค์ด์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ๋น ๋ฑ๋กํ๊ณ ComponentScan ๋์์ด ๋จ
- ์คํ๋ง MVC์์ ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ปจํธ๋กค๋ฌ๋ก ์ธ์ (RequestMappingHandlerMapping์์ ํธ๋ค๋ฌ ์ ๋ณด ๋์์ด๋จ)
@RequestMapping
- ์์ฒญ์ ๋ณด ๋งตํ / ํด๋น URL์ด ํธ์ถ๋๋ฉด ์ด ๋ฉ์๋๊ฐ ํธ์ถ๋จ
- ์ ๋ ธํ ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋์ ์ด๋ฆ์ ์์๋ก ์ง์ผ๋ฉด ๋จ
ModelAndView
- ๋ชจ๋ธ๊ณผ ๋ทฐ ์ ๋ณด๋ฅผ ๋ด์์ ๋ฐํํ๋ฉด ๋จ
ServletApplication
//์คํ๋ง ๋น ์ง์ ๋ฑ๋ก
@Bean
SpringMemberFormControllerV1 springMemberFormControllerV1() {
return new SpringMemberFormControllerV1();
}
ํ์ ์ ๋ณด ์ ์ฅ
@Controller
public class SpringMemberSaveControllerV1 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/springmvc/v1/members/save")
public ModelAndView process(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mv = new ModelAndView("save-result");
mv.addObject("member", member);
return mv;
}
}
mv.addObject("member", member);
ใด Model ๋ฐ์ดํฐ ์ถ๊ฐ
5. ์คํ๋งMVC - ํตํฉ
@RequestMapping์ ์ ๋ณด๋ฉด ํด๋์ค ๋จ์๊ฐ ์๋๋ผ ๋ฉ์๋ ๋จ์์ ์ ์ฉ๋ ๊ฒ์ ํ์ธ
๋ฐ๋ผ์ ์ปจํธ๋กค๋ฌ ํด๋์ค๋ฅผ ์ ์ฐํ๊ฒ ํ๋๋ก ํตํฉ ๊ฐ๋ฅ
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public ModelAndView newForm() {
return new ModelAndView("new-form");
}
@RequestMapping("/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mav = new ModelAndView("save-result");
mav.addObject("member", member);
return mav;
}
@RequestMapping
public ModelAndView members() {
List<Member> members = memberRepository.findAll();
ModelAndView mav = new ModelAndView("members");
mav.addObject("members", members);
return mav;
}
}
@RequestMapping("/springmvc/v2/members") + @RequestMapping("/new-form")
ํด๋์ค ๋ ๋ฒจ + ๋ฉ์๋ ๋ ๋ฒจ ์กฐํฉ
6. ์คํ๋งMVC - ์ค์ฉ์ ์ธ ๋ฐฉ์
์คํ๋ง MVC๋ ๊ฐ๋ฐ์๊ฐ ํธ๋ฆฌํ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ์๋ง์ ํธ์๊ธฐ๋ฅ ์ ๊ณต์ค๋ฌด์์๋ ์ง๊ธ๋ถํฐ ์ค๋ช ํ๋ ๋ฐฉ์์ ์ฃผ๋ก ์ฌ์ฉ
Controller
/**
* v3
* Model ๋์
* ViewName ์ง์ ๋ฐํ
* @RequestParam ์ฌ์ฉ
* @RequestMapping -> @GetMapping, @PostMapping
*/
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String newForm() {
return "new-form";
}
@PostMapping("/save")
public String save( @RequestParam("username") String username, @RequestParam("age") int age, Model model) {
Member member = new Member(username, age);
memberRepository.save(member);
model.addAttribute("member", member);
return "save-result";
}
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
- Model์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ๋ฐ๋ก ์ ์ฅ
- View์ ๋ ผ๋ฆฌ ์ด๋ฆ ๋ฐํ
- @RequestParam ์ฌ์ฉ (GET POST ๋ชจ๋ ์ง์)
- @RequestMapping -> @GetMapping, @PostMapping
'๐จโ๐ป Web Development > Spirng - MVC ํจํด l' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] 7.์คํ๋ง MVC - ์น ํ์ด์ง ๋ง๋ค๊ธฐ (0) | 2023.03.18 |
---|---|
[Spring] 6.์คํ๋ง MVC - ๊ธฐ๋ณธ ๊ธฐ๋ฅ (0) | 2023.03.15 |
[Spring] 4.MVC ํ๋ ์์ํฌ ๋ง๋ค๊ธฐ (0) | 2023.03.13 |
[Spring] 3.์๋ธ๋ฆฟ, JSP, MVC ํจํด (0) | 2023.03.13 |
[Spring] 2.์๋ธ๋ฆฟ (0) | 2023.03.12 |
์ต๊ทผ๋๊ธ