ModelView - V3
ModelView
์๋ธ๋ฆฟ์ ์ข ์์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด Model์ ์ง์ ๋ง๋ค๊ณ , ์ถ๊ฐ๋ก View ์ด๋ฆ๊น์ง ์ ๋ฌํ๋ ๊ฐ์ฒด
0. HTTP ์์ฒญ
@WebServlet(name = "frontControllerServletV3",urlPatterns = "/front-controller/v3/*")
public class FrontControllerServletV3 extends HttpServlet {
/front-controller/v3 ํ์ ๋ชจ๋ ์์ฒญ์ ์ด ์๋ธ๋ฆฟ์์ ๋ฐ์๋ค์ธ๋ค.
1. ์ปจํธ๋กค๋ฌ ์กฐํ
private Map<String, ControllerV3> controllerMap = new HashMap<>();
public FrontControllerServletV3() {
controllerMap.put("/front-controller/v3/members/new-form",new MemberFormControllerV3());
controllerMap.put("/front-controller/v3/members/save",new MemberSaveControllerV3());
controllerMap.put("/front-controller/v3/members",new MemberListControllerV3());
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FrontControllerServletV2.service");
String requestURI = request.getRequestURI();
ControllerV3 controller = controllerMap.get(requestURI);
if(controller==null){
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
๋งคํ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ํด๋นํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์กฐํํ๋ค .
2. ์ปจํธ๋กค๋ฌ ํธ์ถ
private static Map<String, String> createParamMap(HttpServletRequest request) {
Map<String, String> paramMap = new HashMap<>();
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> paramMap.put(paramName,request.getParameter(paramName)));
return paramMap;
}
Map<String, String> paramMap = createParamMap(request);
Front Controller ์์ paramMap ์ ์์ฑํ๋ค .
HttpServletRequest์์ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ๊บผ๋ด์ Map์ผ๋ก ๋ณํํ๋ค.
ModelView mv = controller.process(paramMap);
๊ทธ๋ฆฌ๊ณ ํด๋น Map( paramMap )์ ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํ๋ฉด์ ํธ์ถํ๋ค.
3. ModelView ๋ฐํ
public ModelView process(Map<String, String> paramMap) {
String username = paramMap.get("username");
int age = Integer.parseInt(paramMap.get("age"));
Front Controller ์์ ์์ฑํ paramMap (์ฌ๊ธฐ์ HttpServletRequest์์ ๊บผ๋ด์จ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ค์ด ์๋ค)
map์์ ํ์ํ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐํํ๋ฉด ๋๋ค.
Member member = new Member(username, age);
memberRepository.save(member);
ํ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐํํ์ฌ ๋ฉค๋ฒ๋ฅผ ์์ฑํ๊ณ ์ ์ฅ
ModelView mv = new ModelView("save-result");
mv.getModel().put("member",member);
return mv;
๋ทฐ์์ ํ์ํ member ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ์ ๋ด๊ณ ์ปจํธ๋กค๋ฌ์ ๋ฐํํ๋ค.
4. ViewResolver ํธ์ถ
private MyView viewResolver(String viewName) {
return new MyView("/WEB-INF/views/" + viewName + ".jsp");
}
์ปจํธ๋กค๋ฌ๊ฐ ๋ฐํํ ๋ ผ๋ฆฌ ๋ทฐ ์ด๋ฆ์ ์ค์ ๋ฌผ๋ฆฌ ๋ทฐ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝํ๋ค.
5. MyView ๋ฐํ
MyView view = viewResolver(viewName);
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ฌผ๋ฆฌ ๊ฒฝ๋ก๊ฐ ์๋ MyView ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
6. render(model) ํธ์ถ
view.render(mv.getModel(),request,response);
private static void modelToRequestAttribute(Map<String, Object> model, HttpServletRequest request) {
model.forEach((key, value) -> request.setAttribute(key,value));
}
JSP๋ request.getAttribute() ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ request.setAttribute() ๋ก ๋ด์๋๋ค.
๋จ์ํ๊ณ ์ค์ฉ์ ์ธ ์ปจํธ๋กค๋ฌ - v4
์์ ๋ง๋ v3 ์ปจํธ๋กค๋ฌ๋ ์๋ธ๋ฆฟ ์ข ์์ฑ์ ์ ๊ฑฐํ๊ณ ๋ทฐ ๊ฒฝ๋ก์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฑ, ์ ์ค๊ณ๋ ์ปจํธ๋กค๋ฌ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํญ์ ModelView ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํด์ผ ํ๋ ๋ถ๋ถ์ด ์กฐ๊ธ์ ๋ฒ๊ฑฐ๋กญ๋ค.
V4 ๊ตฌ์กฐ
String process(Map<String, String> paramMap, Map<String, Object> model);
์ปจํธ๋กค๋ฌ๊ฐ ModelView ๋ฅผ ๋ฐํํ์ง ์๊ณ , ViewName ๋ง ๋ฐํํ๋ค.
public String process(Map<String, String> paramMap, Map<String, Object> model) {
return "new-form";
model ๊ฐ์ฒด๋ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ์ฌ์ฉํ๋ฉด ๋๊ณ , ๊ฒฐ๊ณผ๋ก ๋ทฐ์ ์ด๋ฆ๋ง ๋ฐํํด์ฃผ๋ฉด ๋๋ค.
Map<String, Object> model = new HashMap<>();
๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์์ฑํด์ ๋๊ฒจ์ค๋ค. ์ปจํธ๋กค๋ฌ์์ ๋ชจ๋ธ ๊ฐ์ฒด์ ๊ฐ์ ๋ด์ผ๋ฉด ์ฌ๊ธฐ์ ๊ทธ๋๋ก ๋ด๊ฒจ์๊ฒ ๋๋ค.
model.put("member",member);
์ปจํธ๋กค๋ฌ์์ ๋ชจ๋ธ ๊ฐ์ฒด ๋ด๊ธฐ
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
'Spring > Spring MVC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง MVC] - 10. DispatcherServlet / ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ (0) | 2023.02.15 |
---|---|
[์คํ๋ง MVC] - 9. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ - ์ด๋ํฐ (0) | 2023.02.15 |
[์คํ๋ง MVC] - 7. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ (0) | 2023.02.14 |
[์คํ๋ง MVC] - 6. MVC ํจํด - ์ ์ฉ , ํ๊ณ (0) | 2023.02.13 |
[์คํ๋ง MVC] - 5. ์๋ธ๋ฆฟ๊ณผ JSP์ ํ๊ณ / MVC ํจํด์ ๋ฑ์ฅ (0) | 2023.02.13 |