[6] 스프링 MVC (5) - 프론트 컨트롤러(FrontController) 패턴 -V4 / V5
개요
MVC패턴
에서 발생되는 많은 중복
을 개선
하기 위해 프론트 컨트롤러(FrontController) 패턴 도입
공통된 부분을 처리
해주는 FrontController
로 중복을 줄일 수 있음
점진적으로 개선
V1
: 프론트 컨트롤러(FrontController) 패턴 도입
V2
: view render를 처리
해주는 MyView 도입
V3
: 서블릿(Servlet) 종속성 제거
/ 뷰 리졸버(View Resolver) 도입으로 논리 뷰 이름 사용
V4
: V3 코드
에서 반환타입
을 논리 주소명으로 변경
V5
: 어댑터(Adapter) 패턴 도입
으로 다양한 종류의 컨트롤러 처리
V5까지 점진적으로 개선시킨 구조
는 실제 스프링 MVC의 핵심 구조와 동일
V4
[ 구조 & 설명 ]
기존 V3 구조
와 동일
하며 각 Controller
는 ModelView객체가 아닌
String 타입의 view path만 반환
--> 매번 ModelView 객체를 return 하지 않아도 되서
덜 귀찮음
--> 대신 ModelView를 사용하지 않기 때문
에 model 정보를 저장
하는 <String, Object> model
이 필요!
(V3와 큰 차이가 없으니 코드는 생략
)
V5
[ 구조 ]
다양한 종류의 인터페이스를 처리
하기 위해 어댑터(Adapter) 패턴
추가
핸들러(Handler)
: 컨트롤러의 이름
을 더 넓은 범위인 핸들러(Handler)
로 변경
함
--> 이제 어댑터(Adapter)가 있기 때문
에 컨트롤러가 아닌 어떤것도 알맞게 처리할 수 있기 때문!
핸들러 어댑터(Handler Adapter)
: 중간에 어댑터(Adapter) 역할을 하는 인터페이스를 추가
해서 다양한 컨트롤러를 호출
하게 함
[ 코드 ]
( FrontControllerServletV5 )
( MyHandlerAdapter - Interface )
boolean supports(Object handler)
: 어댑터(Adapter)
가 해당 컨트롤러를 처리할 수 있는지 판단
하는 메서드
MoydelView handle(HttpServletRequest req, HttpServletResponse resp, Object handler)
: 어댑터(Adapter)
를 통해서 실제 컨트롤러의 비즈니스 로직을 호출
하는 메서드
(이제 더이상 FrontController
는 실제 Controller를 호출하지 않는다
)
( ControllerV3HandlerAdapter )
(handler instanceof ControllerV3)
: handler
가 ControllerV3
와 같은 인스턴스인지 검사
( ControllerV4HandlerAdapter )
(handler instanceof ControllerV4)
: handler
가 ControllerV4와 같은 인스턴스인지 검사