๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์ธํ”„๋Ÿฐ - ์Šคํ”„๋ง MVC 1ํŽธ] view ๋ถ„๋ฆฌ - v2

by YeonBu 2024. 6. 14.
728x90

 

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

 

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

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

www.inflearn.com

 

 

 

1. V2 ๊ตฌ์กฐ

 

-  ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ๋กœ ์ด๋™ํ•˜๋Š” ๋ถ€๋ถ„์— ์ค‘๋ณต์ด ์žˆ๊ณ , ๊น”๋”ํ•˜์ง€ ์•Š์•˜๋‹ค.

String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);

 

- ์ด ๋ถ€๋ถ„์„ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ๋ทฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

- V1์—์„œ๋Š” Contoroller์—์„œ ๋ฐ”๋กœ JSP๋กœ ์ง์ ‘ forward ํ•ด์คฌ๋‹ค๋ฉด V2์—์„œ๋Š” MyView๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ

  ๋ฐ˜ํ™˜์„ ํ•˜๋„๋ก ๊ต์ฒดํ–ˆ๋‹ค

 

 

 

2. ๊ตฌํ˜„

 

MyView

public class MyView {

    private String viewPath;

    public MyView(String viewPath) {
        this.viewPath = viewPath;
    }

    public void render(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request,response);
    }
    
}

 

 

ControllerV2

public interface ControllerV2 {
    MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}

 

 

MemberFormControllerV2 - ํšŒ์› ๋“ฑ๋ก ํผ

public class MemberFormControllerV2 implements ControllerV2 {

    @Override
    public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        return new MyView("/WEB-INF/views/new-form.jsp");
    }
    
}

 

- ์ด์ œ ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ณต์žกํ•œ dispather.forward()๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 

 

 

MemberSaveCotrollerV2 - ํšŒ์› ์ €์žฅ

public class MemberSaveControllerV2 implements ControllerV2 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        // Model์— ๋ฐ์ดํ„ฐ ๋ณด๊ด€
        request.setAttribute("member", member);

        return new MyView("/WEB-INF/views/save-result.jsp");

    }
}

 

 

 

MemberListCotrollerV2 - ํšŒ์› ์ €์žฅ

public class MemberListControllerV2 implements ControllerV2 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Member> members = memberRepository.findAll();
        request.setAttribute("members", members);

        return new MyView("/WEB-INF/views/members.jsp");
    }
}

 

 

 

FrontControllerV2

@WebServlet(name = "frontControllerServletV2", urlPatterns = "/front-controller/v2/*")
public class FrontControllerServletV2 extends HttpServlet {

    private Map<String, ControllerV2> controllerMap = new HashMap<>();

    public FrontControllerServletV2() {
        controllerMap.put("/front-controller/v2/members/new-form", new MemberFormControllerV2());
        controllerMap.put("/front-controller/v2/members/save", new MemberSaveControllerV2());
        controllerMap.put("/front-controller/v2/members", new MemberListControllerV2());
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String requestURI = request.getRequestURI();

        ControllerV2 controller = controllerMap.get(requestURI);

        if(controller == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        MyView view = controller.process(request, response);
        view.render(request,response);
    }
}

 

- ControllerV2์˜ ๋ฐ˜ํ™˜ํƒ€์ž…์ด MyView์ด๋ฏ€๋กœ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋กœ MyView๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค.

   ๊ทธ๋ฆฌ๊ณ  view.render()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด forward ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ด JSP๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

 

 

V3์—์„œ๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ•ด๋ณด์ž.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตฌํ˜„ ์ฝ”๋“œ๋„ ๋‹จ์ˆœํ•ด์ง€๋ฉฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ์‰ฌ์›Œ์ง„๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•