Deep Dive /Java Web /7

7. StandardWrapperValve → FrameworkServlet: service()

Tomcat의 StandardWrapperValve가 서블릿 인스턴스를 찾아 service()를 호출하는 과정을 실제 코드 근거로 분석합니다.


전체 흐름 요약

  1. StandardWrapperValve가 서블릿 인스턴스를 획득
  2. 해당 서블릿(예: Spring의 DispatcherServlet, FrameworkServlet 등)의 service() 메서드를 호출
  3. 이 시점부터 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. (작성 예정)