단계별로 개발하면서 스프링 MVC가 이런 구조로 만들어졌구나 이해해 보자
도입전 - 클라이언트가 공통로직을 깔고 컨트롤로직을 각각 깔아줘야 된다.
입구가 없다.. Ex)view 이동하는 로직들..
도입후 - 서블릿도입 공통로직을 두고 각자 처리하세요.. (수문장 역할 도입)
요청 매핑할때 서블릿을 사용해서 요청 매핑을 했는데.
프론트컨틀로가 직접 이제 호출해 줌.
서블릿을 만드는 이유 -> Url 매핑에서 클라이언트 가 요청에서 처음 들어가는 부분이 서블릿인데.
이제는 프론트 컨트롤러에서..
mvc코드 복사하기..
각각 등록폼 저장 리스트 코드 복사하고
프론트 컨트롤러만들기
성공..
인터페이스로 공통 함수를 만들고 각 폼 저장 목록을 상속받는다.
소스코드 보면서 다형성을 통해 깔끔하게 구현가능.. 음 대단..
컨트롤러가 직접 포워드를 하지않고
MyView로 반환
request , response 정보가 필요없는 부분들이 많다.
서블릿 기술을 몰라도 동작할 수 있다?
변경의 지점을 하나로..
이제는 ModelView를 반환
논리 이름을 물리이름으로 바꿔주는 viewResolver!
viewResolver를 사용한 이유?
물리적인 경로 이름이 바뀌면? viewResolver만 바꾸면 됨!
paramMap // 파라미터 넘어온거 다넘겨줌
컨트롤러에서는 ModelView 만들어서 넘겨줌 (논리경로 , 결과값(모델로, 리스트, 객체등)
viewResolver로 물리 주소로 변환해준뒤
Myview 생성 !
랜더링!
컨트롤러가 ViewName만 반환?
프론트가 모델도 넘겨줌 (텅텅빈 모델이라 프론트뷰가 잘 작성해서 넘겨준다)
컨트롤러에 빈 모델을 넘겨주고 컨트롤러 안에서 모델을 담아주면
모델은 채워지게 된다.
어댑터 패턴!
핸들러 = 컨트롤러
어댑터 목록에서 컨트롤러를 찾아온다.
supports 컨트롤러 어댑터를 찾는다.
handle -> 핸들러 호출 모델앤뷰를 반환해서
@RequestMapping
RequestHandlerAdapter 이 애노테이션을 처리해주는 어댑터