MVC(4)

Jiwon·2022년 2월 19일
0

인프런

목록 보기
9/14
post-thumbnail

프론트컨트롤러


공통의 관심사. 프론트 컨트롤러를 앞에 두고 각각 알아서 찾아가세요~ 라고 호출
프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출

스프링 웹 MVC와 프론트 컨트롤러

  • 스프링 웹 MVC의 핵심도 바로 FrontController
  • 스프링 웹 MVC의 DispatcherServlet이 FrontController패턴으로 구현되어 있음.

ControllerMap -> Controller 경로 찾아줄거야 ~ !
(v2에서 개선)

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

모든 컨트롤러에서 뷰로 이동하는 부분에 중복이 있고, 깔끔하지 않다.
-> MyView 로 개선

뷰 이름 중복 제거
/WEB-INF/views/new-form.jsp -> new-form
/WEB-INF/views/save-result.jsp -> save-result
/WEB-INF/views/members.jsp -> members

컨트롤러는 뷰의 논리 이름을 반환하고, 실제 물리 위치의 이름은 프론트 컨트롤러에서 처리하도록 단순화 하자.
이렇게 해두면 향후 뷰의 폴더 위치가 함께 이동해도 프론트 컨트롤러만 고치면 됨.

viewResolver : 실제 view를 찾아주는 기능


기존 구조에서 모델을 파라미터로 넘기고,
뷰의 논리 이름을 반환한다.

두 개가 뭔가 안 맞을 때 중간에 무언가를 껴서 맞추는 걸 어댑터 패턴 이라고 한다.

ModelView mv = new ModelView(viewName);
mv.setModel(model);

return mv;

--> 어댑터 변환

어댑터가 호출하는 ControllerV4 는 뷰의 이름을 반환.
그런데 어댑터는 뷰의 이름이 아니라 ModelView 를 만들어서 반환해야 한다.
그래서 어댑터가 필요!

ControllerV4는 뷰의 이름을 반환했지만, 어댑터는 이것을 ModelView로 만들어서 형식을 맞추어 반환한다.
마치 110v 전기 콘센트를 220v 전기 콘센트로 변경하듯이

이 모든건 Spring 에 구현되어 있다.

profile
과연 나는 ?

0개의 댓글