Перед нашими контроллерами происходит следующее:
0. Первое с чего все начинается это идет вызов одного из методов FrameworkPortlet (обращение вообщето идет в DispatcherPortlet, который расширяет первый, но реализация методов находится в его родителе), в зависимости от фазы портлетного запроса.
// Delegate action requests to processRequest/doActionService.
void processAction(ActionRequest req, ActionResponse resp){..}
// Delegate render requests to processRequest/doRenderService.
void doDispatch(RenderRequest req, RenderResponse resp){...}
void serveResource(ResourceRequest request, ResourceResponse response){...}
void processEvent(EventRequest request, EventResponse response){...}
но все они делают в нутри одно и тоже
{
processRequest(req, resp);
}
1. org.springframework.web.portlet.DispatcherPortlet extends FrameworkPortlet
void processRequest(req, resp) //in FrameworkPortlet
//Получается фаза жизненного цикла портлетного запроса
String phase = (String) req.getAttribute(PortletRequest.LIFECYCLE_PHASE);
//на основании фазы выбирается в условиях подходящий обработчик,
//что является немного странным для меня - зачем все перенаправлять в один
// метод, чтобы потом снова разделять? - например
if (PortletRequest.ACTION_PHASE.equals(phase)) {
doActionService((ActionRequest) request, (ActionResponse) response);
}
// в конце метода не зависимо от успеха, запускается событие что портлетный запрос обработан
this.portletApplicationContext.publishEvent(
new PortletRequestHandledEvent(this,
getPortletConfig().getPortletName(),
request.getPortletMode().toString(),
(request instanceof ActionRequest ? "action" : "render"),
request.getRequestedSessionId(),
getUsernameForRequest(request),
processingTime, failureCause));
2. org.springframework.web.portlet.DispatcherPortlet
void doActionService(req, resp)
HandlerExecutionChain mappedHandler; //получает инстанцию НашКлассКонтроллера
mappedHandler = getHandler(req);
//определяет что за обработчик у нас, выбирая из двух типов либо контроллер у нас расширяет спринговый контроллер, либо помечен аннотациями
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
//например у нас ha instanceof
//org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter
//handleAction потому что у нас фаза Action,
//который внутри делает то, что вызывает ModelAndView doHandle(req, resp, handler),
//проверяет чтобы результат обязательно был null потомучто это фаза Action
ha.handleAction(req, resp, mappedHandler.getHandler());
0. Первое с чего все начинается это идет вызов одного из методов FrameworkPortlet (обращение вообщето идет в DispatcherPortlet, который расширяет первый, но реализация методов находится в его родителе), в зависимости от фазы портлетного запроса.
// Delegate action requests to processRequest/doActionService.
void processAction(ActionRequest req, ActionResponse resp){..}
// Delegate render requests to processRequest/doRenderService.
void doDispatch(RenderRequest req, RenderResponse resp){...}
void serveResource(ResourceRequest request, ResourceResponse response){...}
void processEvent(EventRequest request, EventResponse response){...}
но все они делают в нутри одно и тоже
{
processRequest(req, resp);
}
1. org.springframework.web.portlet.DispatcherPortlet extends FrameworkPortlet
void processRequest(req, resp) //in FrameworkPortlet
//Получается фаза жизненного цикла портлетного запроса
String phase = (String) req.getAttribute(PortletRequest.LIFECYCLE_PHASE);
//на основании фазы выбирается в условиях подходящий обработчик,
//что является немного странным для меня - зачем все перенаправлять в один
// метод, чтобы потом снова разделять? - например
if (PortletRequest.ACTION_PHASE.equals(phase)) {
doActionService((ActionRequest) request, (ActionResponse) response);
}
// в конце метода не зависимо от успеха, запускается событие что портлетный запрос обработан
this.portletApplicationContext.publishEvent(
new PortletRequestHandledEvent(this,
getPortletConfig().getPortletName(),
request.getPortletMode().toString(),
(request instanceof ActionRequest ? "action" : "render"),
request.getRequestedSessionId(),
getUsernameForRequest(request),
processingTime, failureCause));
2. org.springframework.web.portlet.DispatcherPortlet
void doActionService(req, resp)
HandlerExecutionChain mappedHandler; //получает инстанцию НашКлассКонтроллера
mappedHandler = getHandler(req);
//определяет что за обработчик у нас, выбирая из двух типов либо контроллер у нас расширяет спринговый контроллер, либо помечен аннотациями
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
//например у нас ha instanceof
//org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter
//handleAction потому что у нас фаза Action,
//который внутри делает то, что вызывает ModelAndView doHandle(req, resp, handler),
//проверяет чтобы результат обязательно был null потомучто это фаза Action
ha.handleAction(req, resp, mappedHandler.getHandler());
Комментариев нет:
Отправить комментарий