DispatcherServlet
- Spring MVC도 프론트 컨트롤러 패턴으로 구현되어있다.
- Spring MVC 의 프론트 컨트롤러가 바로 디스패쳐 서블릭이다.
- 그리고 DispacherServlet이 바로 Spring MVC 의 핵심이다.
DispatcherServlet의 서블릿 등록
- DispacherServlet 도 부모 클래스에서 HttpServlet을 상속 받아 사용하고 서블릿으로 동작한다.
- 스프링 부트는 DispacherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로 (urlPattern="/")에 대해서 매핑한다.
- 그럼 모든 /로 시작하는 다른 경로는? 이라는 생각이 들텐데 참고로 더 자세한 경로가 우선순위가 높다.
인터페이스 살펴보기
- 스프링 MVC 의 큰 강점은 DispatcherServlet 코드의 변경 없이, 원하는 기능을 변경하거나 확장할 수 있다는 점이 있다.
- 지금까지 설명한 대부분을 확장 가능할 수 있게 인터페이스로 제공한다.
- 이 인터페이스들만 구현해서 DispatcherServlet 에 등록하면 원하는 대로 컨트롤러를 만들 수 있다.
핸들러 매핑과 핸들러 어댑터
- handlerMapping(핸들러 매핑)
- 핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 한다.
- 스프링 빈의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑이 필요하다.
- handlerAdapter(핸들러 어댑터)
- 핸들러 매핑을 통해 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요하다.
- Controller 인터페이스를 실행할 수 있는 핸들러 어댑터를 찾고 실행해야 한다.

과거에는 Controller 인터페이스를 구현한 컨트롤러를 사용했다고 한다.
이때 @Component 어노테이션을 통해 spring bean 이름을 붙여주어
Spring bean 이름으로 핸들러를 찾을 수 있도록 했다.
따라서 주소 줄에
http://localhost:8080/springmvc/old-controller 를 입력하면 sout 찍은 것이 콘솔 창에 찍한다.
실행 순서를 보면
1. 핸들러 매핑으로 핸들러 조회
- 빈 이름으로 핸들러를 찾아야 하기 때문에 이름 그대로 빈 이름으로 핸들러를 찾아주는 'BeanNameUrlHandlerMapping' 가 생핼에 성공하고 핸들러인 MyHttpRequestHandler 를 반환한다.
- 여기에는 우선 순위가 있다.
2. 핸들러 어댑터 조회
- HandlerAdapter 의 supports()를 순서대로 호출한다.
- HttpRequestHandlerAdapter가 HttpRequestHandler 인터페이스를 지원하므로 대상이 된다.
3. 핸들러 어댑터 실행
- 디스패처 서블릿이 조회한 HttpRequestHandlerAdapter 를 실행하면서 핸들러 정보도 함께 넘겨준다.
- HttpRequestHandlerAdapter는 핸들러인 MyHttpRequestHandler 를 내부에서 실행하고 그 결과를 반환한다.
@RequestMapping
가장 우선순위가 높은 핸들러 어댑터다.
실무에서는 주로 이 방식의 컨트롤러를 사용함.
뷰리졸버

뷰의 정보를 리턴했지만
화면이 출력되지 않는다.
왜냐하면 new-form은 논리적 이름인데 물리적 이름으로 변환을 안해줬기 때무니다.
따라서 application.properties 에
prefix, suffix를 저장해주면
제대로 화면을 찾아준다.

왜냐하면 스프링 부트에서 자동 설정으로

해당 코드를 실행 시켜주기 때문이다.
(따라서 저 코드를 우리가 입력할 필요는 없다)
'👩💻 BackEnd > 🌿 스프링 [Spring]' 카테고리의 다른 글
interceptor 3가지 메서드 (0) | 2024.05.04 |
---|---|
[Spring MVC] spring mvc 실용적인 방식 (0) | 2024.01.19 |
[Spring MVC] MVC 패턴 구현해보기 / Adapter 패턴 / 유연한 컨트롤러 구현 (0) | 2024.01.17 |
[Spring MVC] Section 4. MVC 프레임워크 만들기 (0) | 2024.01.13 |
[Spring MVC] MVC 패턴 한계 (0) | 2024.01.11 |