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