Spring
FrontControllerServlet
Minseo26262
2023. 5. 30. 20:05
728x90
http://localhost:8080/front-controller/v5/v3/members/new-form 주소가 들어오면
handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3());
Object handler = getHandler(request);
MemberFromControllerV3가 반환된다.
MyHandlerAdapter adapter = getHandlerAdapter(handler);
private MyHandlerAdapter getHandlerAdapter(Object handler) {
for (MyHandlerAdapter adapter : handlerAdapters) {
if(adapter.supports(handler)){
return adapter;
}
}
throw new IllegalStateException("handler adapter를 찾을 없습니다. handler=" + handler);
}
그 후 ControllerV3의 HandlerAdapter의 support를 호출한다.
@Override
public boolean supports(Object handler) {
return (handler instanceof ControllerV3);
}
V3가 있으면 true가 반환되고 adapter를 반환한다.
MyHandlerAdapter adapter = getHandlerAdapter(handler);
그 후 해당되는 adapter의 handler를 호출한다.
ControllerV3 controller = (ControllerV3) handler;
ControllerV3로 캐스팅을 한다.
Map<String, String> paramMap = createParamMap(request);
ModelView mv = controller.process(paramMap);
process가 호출되고,
return new ModelView("new-form");
ModelView를 반환한다.
String viewName = mv.getViewName();//논리이름 new-form
MyView view = viewResolver(viewName);
view.render(mv.getModel(), request, response);
그 후 viewResolver로 viewName을 찾고 rendering을 해주면 cycle이 끝이 난다.
728x90