스프링강의 2일차 MVC 패턴 view 추가

정병웅·2023년 3월 4일
0

Spring 강의

목록 보기
2/3

우선 이건 인프런의 김영한 강사님의 강의를 들으면서 본인이 스터디하고, 복습하기 위해 작성되는 글입니당,,,

목표

MVC 패턴에서 view의 역할에 대해 알아보고 구현해본다.

1. view 클래스 생성

클라이언트가 요청한 값에 알맞은 화면을 rendering 해주는 역할을 담당하는 객체

객체명은 MyView 로 생성했다.

public class MyView 

이 객체는 viewPath라는 String 문자열 값을 가진다.

private String viewPath;

생성자

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

myview 에서 render는 viewPath를 파라미터로 전달 받고 해당 viewPath에 맞는 jsp 화면을 클라이언트에게 보여준다.


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

전체 코드

//요청 경로에 맞는 jsp 화면 즉 view로 넘겨주는 객체
public class MyView {
    private String viewPath;

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

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

2. Controller interface 생성

기존에는 void로 리턴 타입을 정했지만 이제 서블릿이 jsp로 반환하는 것을 Myview로 넘겨주기 때문에 Myview로 반환을 지정해주었다.

MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;

3. 각 구현 Controller 생성

회원 가입을 담당하는 controller

String name = request.getParameter("name");
        int age = Integer.parseInt(request.getParameter("age"));
        Member member = new Member(name,age);
        memberRepository.save(member);

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

중요것은 return 타입이 MyView로 되어있기 때문에 return 했을 때 myView를 생성하여 return 해준다. 그리고 해당 controller에 알맞은 jsp 경로를 파라미터로 넘긴다.

4. FrontController 생성

스프링 강의 1일차의 frontController 와 거의 비슷하지만 마지막에 화면을 render 해서 클라이언트에 응답하는 코드가 다르다.
//controllerV2.process 메서드는 myview 타입을 리턴한다 따라서 Myview 객체에 넣어준다.
MyView myView = controllerV2.process(req, resp);
//myview의 render를 호출하면서 /WEB-INF/views/new-form.jsp 값을 함께 넘겨줌
        myView.render(req,resp);
profile
인생은 IT 노가다

0개의 댓글