<목차>
ㅇ Handler Mapping
ㅇ ViewResolver (뷰 리졸버)
ㅇ 스프링 웹 MVC
ㅇ 스프링의 핵심 기능들은 내부적으로 다 만들어져 있어
ㅇ 최종 경로
ㅇ 데이터 공유는? Model 모델
ㅇ Handler Mapping
- 프론트 컨트롤러가 알바생한테 : 포조야 list.do 해줘, insert.do 해줘, delete.do 해줘, update.do해줘 이렇게 요청하겠지
- 이런 클라이언트의 요청을 '핸들'이라고 해 (운전사 핸들을 좌/우로 틀면 그대로 가듯)
- 이 요청도 직접 하는 게 아냐. 중간에 또 다른 사람을 거쳐
- Handler Mapping : 이런 핸들을 연결시켜주는 클래스
요청을 선택해서 = choose handler해서 알바생한테 연결시켜줘
- 핸들러매핑도 파란색이야. 스프링이 제공해 줘
ㅇ 핸들러 매핑 어디 있나
- 톰캣 서버를 실행하면, 콘솔창에 핸들러매핑 검은 글씨(=이 클래스가 동작한다.)
- 핸들러매핑은 내부적으로 일하는 클래스
(은행에서 일을 하지만 고객 눈에는 안 보이는 사람들 있듯이)
- mapped / : 슬러시라는 요청이 오면
(쭉 오른쪽으로 이동) 알바생 홈콘트롤러의 홈이라는 메서드를 실행하라 라고 해석이 돼
- 실제 웹 페이지에서 슬러시가 오면 홈이라는 메서드를 처리하게 되어 있어
- 톰캣 서버가 시~작!하면 이렇게 이미 스탠바이를 하고 있어
: 슬러시가 오면 홈컨트롤러 클래스의 홈이라는 메소드가 동작이 되어야 한다
- 그래서 주소 적고 엔터를 빵 하면, 이 /에 의해 home 메소드가 동작이 되는 거야
ㅇ 핸들러 매핑 실행 과정
- 톰캣 서버 실행 시 스탠바이 중 (핸들러매핑에 의해) -> 엔터 빵 하면 home 메소드 실행 -> 메소드 내부의 것들 실행 되고 (로거로 찍기, 날짜 만들기) -> 모델에 값을 담아서 -> home 이라는 jsp 리턴 -> 뷰에 home.jsp로 넘어가서 -> 헬로월드가 동작하는거야
- 포조에서 이걸 연결하는 부분이 메소드 위의 @RequestMapping
누가 오면 어떤 메소드로 갈지 이미 맵핑을 쫙 해둬지고 있어
- 우리가 프론트컨트롤러랑 핸들러매핑을 직접 만들지는 않지만, 얘들이 뭔지는 알고 있어야 하는 거야
ㅇ 리턴은 어디로? => 프론트 컨트롤러로
- return home;
- 이 문자열 home을 프론트 컨트롤러가 받으면, 프론트컨트롤러는 홈이 뭔지 전혀 몰라
- home은 논리적인 이름
- 접두사(/WEB-INF/views)와 접미사(jsp)를 붙여 물리적인 경로이름으로 바꿔야 해
Q. return에 그냥 경로를 주면 되는 거 아닌가요?
A. 나중에 views라는 폴더 이름이 수정되면 유지보수 어려워져
- 그래서 접두사와 접미사를 붙이는 역할을 해 줄 클래스가 하나 더 필요 => ViewResolver
ㅇ ViewResolver (뷰 리졸버)
- 뷰에 경로를 만들어 줌. 논리적 경로를 물리적 경로로 바꿔 줌
- 접두사와 접미사를 붙여서 경로를 만든 뒤(⑥) 다시 프론트 컨트롤러에게 줘 (⑦)
- 프런트 컨트롤러 -> 핸들러 매핑 -> 포조 -> 핸들러매핑 -> 프런트 컨트롤러 -> 뷰 리졸버
- 뷰 리졸버도 스프링이 제공해 줘 (파란색)
ㅇ 뷰 리졸버 위치 : 서블릿-컨텍스트.xml
ㅇ 스프링의 핵심 기능 3가지는 내부적으로 다 만들어져 있어
ㅇ 프론트 컨트롤러, 핸들러 매핑, 뷰 리졸버
- 겉으로 드러나진 않지만 내부에서 스프링 프레임워크를 동작시키고 있는 핵심
- 이 3가지가 스프링 내부에 이미 만들어져 있으니 직접 코딩할 필요 x => 얼마나 효율적이야
- 우리는 포조만 만들면 돼
ㅇ 최종 경로
- 프론트 컨트롤러가 중심
- 요청이 들어오면
- 핸들러 매핑에게 보내서 -> 매핑해 둔 곳으로 가서 -> 포조가 일을 하고 -> 돌려 받아
- 그걸 뷰 리졸버에게 보내서 접두사 , 접미사 붙인 경로로 돌려 받아
- 그 경로에 해당하는 뷰로 보내서 JSP한테 포워딩 -> 결과를 돌려 받아서
- 응답해 줘
ㅇ 데이터 공유는? Model 모델
- 기존 Servlet과 JSP
- 특정 메모리에다가 값을 셋어트리뷰트로 담고 -> RequestDispacher로 포워딩 후 -> JSP에서 다시 겟어트리뷰트로 꺼내서 뷰를 만들었어
- 리퀘스트 바인딩으로 값을 계속 공유해야 해
- 스프링에서는 모델이 그런 역할을 해
- 스프링에서 모델도 제공해 줘 (파란색)
=> 그래서 우리는 포조와 JSP뷰단만 만들면 끝
- 샘플코드도 포조와 뷰만 있어
- DB 연결할 모델 만들면 MVC 끝이야