7. StandardWrapperValve → FrameworkServlet: service()
Tomcat의 StandardWrapperValve가 서블릿 인스턴스를 찾아 service()를 호출하는 과정을 실제 코드 근거로 분석합니다.
전체 흐름 요약
- StandardWrapperValve가 서블릿 인스턴스를 획득
- 해당 서블릿(예: Spring의 DispatcherServlet, FrameworkServlet 등)의 service() 메서드를 호출
- 이 시점부터 Spring MVC의 진입점이 실행됨
실제 코드 흐름 분석
1) StandardWrapperValve
// StandardWrapperValve.java
public final void invoke(Request request, Response response) throws IOException, ServletException {
...
Servlet servlet = ...; // 서블릿 인스턴스 획득
...
servlet.service(request, response); // 실제 서블릿 호출
...
}
2) FrameworkServlet (Spring)
// FrameworkServlet.java
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
...
processRequest((HttpServletRequest) req, (HttpServletResponse) res);
}
시퀀스 다이어그램
sequenceDiagram
participant WrapperValve as StandardWrapperValve
participant FrameworkServlet
WrapperValve->>FrameworkServlet: service()
FrameworkServlet->>FrameworkServlet: processRequest()
설계 의도 및 이유
- Tomcat이 서블릿 인스턴스를 직접 관리하고, 요청마다 service()를 호출
- Spring MVC의 DispatcherServlet/FrameworkServlet이 이 진입점에서 모든 웹 요청을 처리
- 이 구조 덕분에 서블릿 컨테이너와 프레임워크의 역할이 명확히 분리됨
← 이전: 6. ApplicationFilterChain → StandardWrapperValve | 다음: 8. (작성 예정)