[Spring MVC] [1] 중간 점검
MVC 프레임워크 만들기
Model 추가-v3
프론트 컨트롤러에서 지저분한 일을 모두 처리하게 하고 핵심 로직은 최대한 단순하게!
(프론트 컨트롤러는 하나지만 개발자들이 다룰 컨트롤러는 수백개가 될 수 있으니까)
Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName)));
➡️ paramMap이라는 Map에 모든 데이터를 다 집어넣는 코드
✔️
viewResolver
는 논리 이름을 물리 이름으로 변환해주는 역할을 수행
new MyView("/WEB-INF/views/" + viewName + ".jsp");
이렇게 해주면 변환
정리
v1
- 일단 프론트 컨트롤러를 도입
v2
- 반복을 없애기 위해 MyView 도입
v3
- HttpRequest, HttpResponse 서블릿 종속성을 없앰. ViewResolver를 사용해 논리 이름을 넣으면 물리 이름을 반환하고 실제 view 까지 만들어줌.
v4
- modelview마저 프론트 컨트롤러에서 생성하도록
v5
스프링 MVC - 구조 이해
스프링 MVC 전체 구조
SpringMVC에서
DispatcherServlet
이 가장 중요 (프론트 컨트롤러 패턴을 구현한 프론트 컨트롤러)그리고 요청 흐름을 봤을 때 결과적으로
DispacherServlet.doDispatch()
가 호출되는데 이것이 가장 핵심 ⭐️
핸들러 조회
→핸들러 어댑터 조회
→핸들러 어댑터 실행
→핸들러 어댑터를 통한 핸들러 실행
→ModelAndView 반환
→뷰 리졸버를 통해 뷰 찾기
→View 반환
→뷰 렌더링
핸들러 매핑과 핸들러 어댑터
HandlerMapping 핸들러 매핑
핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 함.
ex. 스프링 빈의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑이 필요
HandlerAdapter 핸들러 어댑터
핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요.
ex. Controller 인터페이스를 실행할 수 있는 핸들러 어댑터를 찾고 실행해야 함.
뷰 리졸버
(기준은 이전 게시물에서 했던 예제)
1. 핸들러 어댑터 호출
: 핸들러 어댑터를 통해 (ex. new-form) 논리 뷰 이름을 획득2. ViewResolver 호출
: 뷰 이름으로 viewResolver를 순서대로 호출
BeanNameViewResolver의 우선 순위가 InternalResourceViewResolver보다 높으므로 먼저 찾았는데? 없어서 후자를 호출3. InternalResourceViewResolver
: 이 뷰 리졸버는 InternalResourceView를 반환4. 뷰 - InternalResourceView
: InternalResourceView는 JSP처럼 포워드 forward()를 호출해 처리할 수 있는 경우에 사용5. view.render()
: view.render()가 호출되고 InternalResourceView는 forward()를 사용해 JSP실행
스프링 MVC - 기본 기능
요청 매핑
"요청이 왔을 때 어떤 컨트롤러가 매핑 되어야 하지?"
📌 참고
/hello/랑 /hello랑 다른 url이지만 스프링은 같은 요청으로 매핑해줌
메소드 매핑을
@GetMapping
이런 식으로 POST, PUT 등등 축약해줄 수 있으며 ⭐️PathVariable(경로 변수)를 사용할 수 있다. (다중으로 값을 여러개 넣을 수도 있음)또한, 특정 파라미터, 헤더, 미디어 타입 조건을 매핑시킬 수 있다.
Author And Source
이 문제에 관하여([Spring MVC] [1] 중간 점검), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dbsrud11/Spring-MVC-1-중간-점검저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)