기존 Java 프로그램은 main() 메서드에서 시작하지만,
Spring Web MVC는 Tomcat이 애플리케이션을 실행하며 WebApplicationInitializer가 시작점 역할을 한다.
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
Tomcat 시작
↓
WebApplicationInitializer 실행
↓
Spring Container 생성
↓
DispatcherServlet 등록
AnnotationConfigWebApplicationContext context =
new AnnotationConfigWebApplicationContext();
context.register(WebConfig.class);
여기서 Spring Container가 생성되고, WebConfig를 읽어 Bean을 생성한다.
DispatcherServlet dispatcherServlet =
new DispatcherServlet(context);
DispatcherServlet은 모든 HTTP 요청을 가장 먼저 받아 적절한 Controller에게 전달한다.
브라우저
↓
DispatcherServlet
↓
Controller
↓
View
registration.addMapping("/");
"/"로 매핑했기 때문에 모든 요청은 DispatcherServlet을 거친다.
/
/food
/shirt
/login
↓
DispatcherServlet
@Configuration
@EnableWebMvc
@ComponentScan("org.example.webmvc")
각 어노테이션의 역할
| Annotation | 역할 |
|---|---|
| @Configuration | Spring 설정 클래스 |
| @EnableWebMvc | Spring MVC 기능 활성화 |
| @ComponentScan | Controller, Service 등을 Bean으로 등록 |
return "index";
Controller에서는 View 이름만 반환한다.
ViewResolver가
return "index"
↓
/WEB-INF/views/index.jsp
로 변환한다.
정적 리소스(CSS, JS, Image)의 경로를 등록한다.
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
Tomcat 실행
↓
WebApplicationInitializer
↓
Spring Container 생성
↓
WebConfig 읽기
↓
DispatcherServlet 등록
↓
브라우저 요청
↓
DispatcherServlet
↓
Controller
↓
ViewResolver
↓
JSP
↓
브라우저