스프링 mvc1 - MVC 프레임워크 만들기

2023. 1. 20. 15:29spring/mvc

1/19

 

프론트 컨트롤러 (문지기 역할)

: 공통로직을 모아서 한 번에 처리함.

 

V1 구조 =============================================================================

 

상위 경로에 frontController 생성

Controller 정보 Map에 저장

public FrontControllerServletV1(){
    controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
    controllerMap.put("/front-controller/v1/members/new-form", new MemberSaveControllerV1());
    controllerMap.put("/front-controller/v1/members/new-form", new MemberListControllerV1());
}

 

V2 구조 =============================================================================

: v1 에서는 FrontController 에서 각각 view를 불렀음

이를 개선하기 위해

 

++++++

public class MyView {
    private String viewPath;

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

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

    }
}

MyView를 반환해서 MyView 에서 render 함수 호출

 

 

V3 구조 =============================================================================

: 기존에는 request.setAttribute("member", member) 처럼 request를 model로 사용

: 뷰 중복 제거

"/WEB-INF/views/members.jsp"

=> members

 

ModelView : url , 실제 객체가 들어있는 Map

 

요청

->  FrontController에 맵핑되어 있는 실제 Controller 을 찾아서 반환

->  Controller.getRequestUrl로 해당 컨트롤러 request 받아서 파라미터 정보 Map 만들어 저장

-> Controller에는 클라이언트로부터 받은 파라미터의 값이 들어있는 Map을 보냄

-> 값 뽑아서 리턴값 만들어준 상태로 변수명과 해당 리턴타입 객체이 들어있는 Map을 가지고 있는 ModelView 반환

-> 반환된 ModelView에서 url주소값을 뽑아 MyView 호출

-> view. render 실행 (model 값 모두 빼서 request.setAttribute !!!!

-> JSP 에게로 !

 

* 뷰 리졸버 컨트롤러가 반환한 논리 뷰 이름을 실제 물리 뷰 경로로 변경한다. 그리고 실제 물리 경로가 있는 MyView 객체를 반환한다.

ex)

논리 뷰 이름: members

물리 뷰 경로: /WEB-INF/views/members.jsp

 

V4 구조 =============================================================================

기본적인 구조는 V3와 같다. 대신에 컨트롤러가 ModelView 를 반환하지 않고, ViewName 만 반환한다

 

- model을 직접 만들지 않고 파라미터로 전달되서 사용하기만 하면 된다.

- 따라서 controller의 반환값이 String 타입으로 viewName 만 반환하면 된다.

 

 

 

'spring > mvc' 카테고리의 다른 글

스프링 mvc1 - 웹 페이지 만들기  (0) 2023.01.25
스프링 mvc1 - 스프링 mvc 구조  (0) 2023.01.22