Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 8. ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - ModelView

hello_u 2023. 2. 14. 17:21

 

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

 

์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., -

www.inflearn.com