인프런 커뮤니티 질문&답변

인프러너님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

Model 추가 - v3

FrontControllerServletV3의 기능중 이해가 안되는 부분이 있습니다.

21.09.22 11:21 작성

·

319

3

Map<String, String> paramMap = createParamMap(request);
ModelView mv = controller.process(paramMap);

String viewName = mv.getViewName();
MyView view = viewResolver(viewName);

view.render(mv.getModel(), request, response);

안녕하세요

위 소스에 대한 내용이 궁금해서 문의 드립니다.

제가 이해한대로 우선 설명을 드리면..

Map<String, String> paramMap = createParamMap(request);

request에서 받아온 값들을 Key, Value 형식으로 paramMap에 담아주는 역할을 함.(key: username, value : 34)이런식으로

ModelView mv = controller.process(paramMap);

주소값에 따라 value에 저장되어있는 컨트롤러(ex> MemberListControllerV3에서 저장한 viewName을 반환해준다(안에 값이 있으면 같이 보내준다(컨트롤러의 기능에 따라 저장된 값들)

String viewName = mv.getViewName();

이 부분이 위의 mv에 저장되어있던 값들중 viewName값(save-resultemd)을 가져온다.

MyView view = viewResolver(viewName);

이곳에서 전체적인 경로(/WEB-INF/views/ + viewName + .jsp)를 조합해서 리턴할 풀 경로를 만들어준다.

view.render(mv.getModel(), request, response);

이 부분이 제일 이해가 안가는 부분입니다.

모델에 있는 값들을 꺼내서 request에 담아서 jsp쪽으로 보내주는 내용인데..

render를 할 때 mv.getModel() 이 값에 모델 정보들을 넘겨주는데 getModel이라는 정보가 위에서 controller.process(paramMap)의 컨트롤러에서 process메소드를 실행해서 넣어준 mv.getModel().put() 값을 말하는게 맞는거죠?

그렇게 만들어준 값들을 view 화면에 넘겨주기 위해서 render를 할 때 mv.getModel정보를 같이 render에 넘겨줘서 render에서는 해당 값들을 뽑아서 request값에 setAttribute로 key, value로 넣어줘야 jsp 파일에서 쉽게 사용을 할 수 있기 때문에 render에서 request에 담아서 화면단으로 넘겨주는게 맞는거죠??

정리가 안되는 부분이 있어서 문의글을 적으면서 차근차근 글을 적다보니 대략적으로 이런식으로 흘러가는거구나.. 하고 감이 잡히는 것 같은데 제가 이해하고 있는 부분이 맞는건지, 아니면 놓치는 부분이 있는지 궁금합니다.

 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

2021. 09. 22. 19:37

안녕하세요. 아버지님

생각하신 내용이 맞습니다.

공부하시고 잘 정리가 안되면 한번 정도 정리하면서 복습하시면 쉽게 이해가 되실거에요.

감사합니다.

인프러너님의 프로필 이미지
인프러너
질문자

2021. 09. 22. 20:52

답변 감사합니다.^^

맞게 이해하고 있다니 다행이네요^^;

질문을 할려고 내용을 차근차근 정리하다보면 의도치않게 자문 자답을 할 때가 있기는 하더라구요.

그럴때는 은근히 뿌듯하기도 하고, 맞게 이해하고 있는지 확인만 하는 차원에서도 조금이라도 궁금하거나 이해가 안가는 부분이 있으면 정리하면서 질문글을 올리는것도 좋은 것 같네요^^