-
클라이언트 요청

-
CoyoteAdapter 클래스
- service 메서드 호출

- req.setRequestThread() 메서드
스레드연결


- postParseSuccess = postParseRequest(req, request, res, response); 메서드
세션 관련 정보 연결



- AuthenticatorBase클래스
invoke 메서드 호출

- AuthenticatorBase
- 세션 기반 권한 세팅

- StandardWrapperValve클래스
invoke 메서드 호출

- StandardWrapperValve
- invoke 메서드

- ApplicationFilterFactory.createFilterChain 필터등록



- ApplicationFilterChain클래스
doFilter 실행

- ApplicationFilterChain
- doFilter 메서드

- internalDoFilter 메서드 실행

- HttpServlet 클래스
service 메서드 실행

- HttpServlet
- service 메서드

- FrameworkServlet 클래스
service 메서드 실행
- FrameworkServlet
- service 메서드

- HttpServlet 클래스
service 메서드 실행
7.HttpServlet
- service 메서드

- 요청 method에 따라 메서드 실행(doGet(), doPost() 등)
FrameworkServlet 클래스
doPost() 실행

- FrameworkServlet
- DispatcherServlet
- doService 메서드

- doDispatcher() 메서드 실행

- doDispatch 메서드

- multipart 확인


- handler 확인(컨트롤러 확인)


- adapter 확인(컨트롤러를 실행할 adapter확인)


- prehandle 확인 및 실행(인터셉터 prehandle)


- adapter 에서 handler 실행

- AbstractHandlerMethodAdapter 클래스 handle 실행(컨트롤러 실행)
- AbstractHandlerMethodAdapter
- handle 메서드

- RequestMappingHandlerAdapter 클래스
handleInternal 메서드 실행
- RequestMappingHandlerAdapter
-
handleInternal메서드

-
invokeHandlerMethod 실행
1) 비동기, 동기 판별
2) argumentResolvers 세팅
3) returnValueHandlers 세팅
비동기 - wrapConcurrentResult 실행, 동기 - invokeAndHandle 실행


- ServletInvocableHandlerMethod 클래스
invokeAndHandle 메서드 실행
- ServletInvocableHandlerMethod 클래스
- invokeHandle 메서드

InvocableHandlerMethod 클래스
invokeForRequest 메서드 실행
- InvocableHandlerMethod
- invokeForRequest 메서드(argumentresolver와 returnvaluehandler를 찾아서 요청과 응답 처리)

- getMethodArgumentValues 실행(supportsParameter가 true인지 판별해 유효한 파라미터 인지 확인)

- HandlerMethodArgumentResolverComposite 클래스
resolveArgument 메서드 실행
- HandlerMethodArgumentResolverComposite
- resolveArgument 메서드

- getArgumentResolver 호출(파라미터를 실제로 처리할 argumentresolve 반환 - supportsParameter 가 true인걸 찾음)
만약 찾는다면 다음 요청에는 빠르게 사용할 수 있도록 cache map에 넣음

- resolveArgument 메서드
반환된 argumentResolve에서 요청 파라미터 처리를 수행.
- InvocableHandlerMethod 클래스
- 요청 파라미터를 처리 한 후 반환된 Object[] args로 doInvoke 메서드로 비즈니스 로직 수행 후 return을 받는다

- doInvoke 메서드

- method.invoke 메서드
실제 컨트롤러에 메서드를 수행한다.
메서드 수행 후 Object returnValue 를 받아 invokeForRequest 메서드의 결과를 반환한다.
- ServletInvocableHandlerMethod

- HandlerMethodReturnValueHandlerComposite
- handlerReturnvalue 메서드

- selectHandler 메서드에서 반복하면서 supportsReturnType 가 true인 응답을 처리할 returnValueHandlers를 찾는다.

- handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
를 실행해 반환된 returnValueHandlers로 응답값을 처리한다.
- RequestMappingHandlerAdapter
- 응답이 반환되었으면 비동기면 바로 return 하고 비동기 쓰레드에서 응답을하고 동기라면 getModelAndView메서드를 실행한다.

- getModelAndView 메서드
view나 redirectAttribute가 존재한다면 return 하고
responseentity나 responsebody 사용이면 isRequestHandled는 true 이므로 return null이 된다.

- DispatcherServlet
-
doDispatch 메서드

-
applyDefaultViewName 메서드
viewName 있으면 세팅

-
mappedHandler.applyPostHandle(processedRequest, response, mv); 메서드
인터셉터 postHandle 실행

-
processDispatchResult 메서드 실행
성공이나 예외에 관한 결과를 반환. 예외시processHandlerException 호출

-
processHandlerException 메서드
오류가 발생했다면 handlerExceptionResolvers 를 찾아 호출

-
triggerAfterCompletion 메서드
인터셉터 afterCompletion 실행


-
asyncManager.isConcurrentHandlingStarted(), multipartRequestParsed
비동기 응답 및 멀티파트 리소스 정리작업

- applyAfterConcurrentHandlingStarted

- cleanupMultipart

- FrameworkServlet 클래스
- publishRequestHandledEvent 메서드

- publishEvent 실행

- CoyoteAdapter
- response.finishResponse() 메서드
클라이언트에 응답


- clearRequestThread
스레드 초기화
