2023. 1. 20. 15:29ㆍspring/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 |