- FrontController -> DispatcherServlet
- handlerMappingMap -> HandlerMapping
- MyHandlerAdapter -> HandlerAdapter
- ModelView -> ModelAndView
- viewResolver -> ViewResolver
- MyView -> View
- DispacherServlet
- 스프링 부트는 DispacherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로( urlPatterns="/" )에 대해서 매핑한다.
- 동작 순서
1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
3. 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다.
4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
6. viewResolver 호출: 뷰 리졸버를 찾고 실행한다. JSP의 경우: InternalResourceViewResolver 가 자동 등록되고, 사용된다.
7. View 반환: 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다. JSP의 경우 InternalResourceView(JstlView) 를 반환하는데, 내부에 forward() 로직이 있다.
8. 뷰 렌더링: 뷰를 통해서 뷰를 렌더링 한다.
- 주요 인터페이스 목록
1. 핸들러 매핑: org.springframework.web.servlet.HandlerMapping
2. 핸들러 어댑터: org.springframework.web.servlet.HandlerAdapter
3. 뷰 리졸버: org.springframework.web.servlet.ViewResolver
4. 뷰: org.springframework.web.servlet.View
- @RequestMapping
1. RequestMappingHandlerMapping
2. RequestMappingHandlerAdapter
@Controller
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}
- @Controller :
1. 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨)
2. 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.
- @RequestMapping :
1. 요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
- ModelAndView :
1. 모델과 뷰 정보를 담아서 반환하면 된다.
- @RequestMapping이 클래스단에 있으면 메서드 전체에 RequestMapping이 적용된다.
- 실무에서 주로 사용하는 방식
/**
* v3
* Model 도입
* ViewName 직접 반환
* @RequestParam 사용
* @RequestMapping -> @GetMapping, @PostMapping
*/
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String newForm() {
return "new-form";
}
@PostMapping("/save")
public String save(
@RequestParam("username") String username,
@RequestParam("age") int age,
Model model) {
Member member = new Member(username, age);
memberRepository.save(member);
model.addAttribute("member", member);
return "save-result";
}
@GetMapping
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
- Model 파라미터
1. save() , members() 를 보면 Model을 파라미터로 받는 것을 확인할 수 있다. 스프링 MVC도 이런 편의 기능을 제공한다.
- ViewName 직접 반환
1. 뷰의 논리 이름을 반환할 수 있다.
- @RequestParam 사용
1. 스프링은 HTTP 요청 파라미터를 @RequestParam 으로 받을 수 있다.
2. @RequestParam("username") 은 request.getParameter("username") 와 거의 같은 코드라 생각하면 된다.
3.물론 GET 쿼리 파라미터, POST Form 방식을 모두 지원한다.
- @RequestMapping -> @GetMapping, @PostMapping
1. @RequestMapping 은 URL만 매칭하는 것이 아니라, HTTP Method도 함께 구분할 수 있다.
2. 예를 들어서 URL이 /new-form 이고, HTTP Method가 GET인 경우를 모두 만족하는 매핑을 하려면 다음과 같이 처리하면 된다.
@RequestMapping(value = "/new-form", method = RequestMethod.GET)
출처 : 인프런 - 우아한 형제들 기술이사 김영한의 스프링 완전 정복 (스프링 핵심원리 - 기본 편)
'Programming > Spring' 카테고리의 다른 글
Spring - 타임리프 - 기본 기능 (0) | 2023.06.20 |
---|---|
Spring - 스프링 MVC - 기본 기능 (0) | 2023.06.18 |
Spring - RequestBodyJsonController (0) | 2023.06.16 |
Spring - 웹 애플리케이션 이해 (0) | 2023.06.13 |
Spring - 빈 스코프 (0) | 2023.06.11 |