๋ง์ฝ ์ด๋ค ๊ฐ๋ฐ์๋ ControllerV3 ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ถ๊ณ ,
์ด๋ค ๊ฐ๋ฐ์๋ ControllerV4 ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ํ๊ฐ์ง ๋ฐฉ์์ ์ปจํธ๋กค๋ฌ ์ธํฐํ์ด์ค๋ง ์ฌ์ฉํ ์ ์๋ค.
ControllerV3 , ControllerV4 ๋ ์์ ํ ๋ค๋ฅธ ์ธํฐํ์ด์ค์ด๋ค. ๋ฐ๋ผ์ ํธํ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๋ง์น v3๋ 110v์ด๊ณ , v4๋ 220v ์ ๊ธฐ ์ฝ์ผํธ ๊ฐ์ ๊ฒ์ด๋ค. ์ด๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก ์ด๋ํฐ์ด๋ค.
์ด๋ํฐ ํจํด์ ์ฌ์ฉํด์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ๋ค์ํ ๋ฐฉ์์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ณ๊ฒฝํด๋ณด์.
V5 ๊ตฌ์กฐ - ์ด๋ํฐ ํจํด
ํธ๋ค๋ฌ ์ด๋ํฐ: ์ค๊ฐ์ ์ด๋ํฐ ์ญํ , ๋ค์ํ ์ข ๋ฅ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ ์ ์๋ค.
ํธ๋ค๋ฌ: ์ปจํธ๋กค๋ฌ์ ์ด๋ฆ์ ๋ ๋์ ๋ฒ์์ธ ํธ๋ค๋ฌ๋ก ๋ณ๊ฒฝ .
์ด๋ ํ ๊ฒ์ด๋ ํด๋นํ๋ ์ข ๋ฅ์ ์ด๋ํฐ๋ง ์์ผ๋ฉด ๋ค ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ
1. ํธ๋ค๋ฌ ์กฐํ
private Map<String, Object> handlerMappingMap = new HashMap<>();
private List<MyHandlerAdapter> handlerAdapters = new ArrayList<>();
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ ์๋ ์ ๋ณด๋ค
ํธ๋ค๋ฌ ๋งคํ์ ๋ณด - handleerMappingMap
ํธ๋ค๋ฌ ์ด๋ํฐ ๋ชฉ๋ก - handlerAdapters
private Object getHandler(HttpServletRequest request) {
String requestURI = request.getRequestURI();
return handlerMappingMap.get(requestURI);
}
HTTP ์์ฒญ request ์์ getRequestURL() ๋ฉ์๋๋ฅผ ํตํด ์์ฒญ URL๋ฅผ ์ป์ด
๋งคํ์ ๋ณด๋ฅผ ํตํด ํธ๋ค๋ฌ๋ฅผ ๋ฐํํ๋ค
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
public boolean supports(Object handler) {
return (handler instanceof ControllerV4);
}
supprots(Object handler) : ์กฐํํ ์ด๋ํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๋ ๋ฉ์๋
private MyHandlerAdapter getHandlerAdater(Object handler) {
for (MyHandlerAdapter adapter : handlerAdapters) {
if (adapter.supports(handler)) {
return adapter;
}
}throw new IllegalArgumentException("handler adapter๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. handler=" + handler);
}
MyHandlerAdapter adapter = getHandlerAdater(handler);
์กฐํํ ํธ๋ค๋ฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ด๋ํฐ๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ ์ด๋ํฐ๋ฅผ ๋ฐํํ๋ค
3. ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ํตํ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ) ํธ์ถ -> ModelView ๋ฐํ
ModelView mv = adapter.handle(request, response, handler);
์ด๋ํฐ๋ฅผ ํตํด ์ค์ ์ปจํธ๋กค๋ฌ(ํธ๋ค๋ฌ)๋ฅผ ํธ์ถํ๊ณ , ModelView๋ฅผ ๋ฐํํ๋ค
@Override
public ModelView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
Map<String, Object> model = new HashMap<>();
Map<String, String> paramMap = createParamMap(request);
ControllerV4 controller = (ControllerV4) handler;
String viewName = controller.process(paramMap, model);
ModelView mv = new ModelView(viewName);
mv.setModel(model);
return mv;
}
model ๋ชจ๋ธ ์์ฑ
-> controller.process ๋ฅผ ํตํด model ์ ๊ฐ์ด ๋ด๊น
-> mv.setModel() ํธ์ถ
handler๋ฅผ ์ปจํธ๋กค๋ฌ V4๋ก ๋ณํํ ๋ค์์ V4 ํ์์ ๋ง๋๋ก ํธ์ถํ๋ค.
supports() ๋ฅผ ํตํด ControllerV4 ๋ง ์ง์ํ๋ ๊ฒ์ ํ์ธํ๊ธฐ ๋๋ฌธ์(์์์ ๊ฑธ๋ ๊ธฐ ๋๋ฌธ์)
ํ์ ๋ณํ(์บ์คํ )์ ๊ฑฑ์ ์์ด ์คํํด๋ ๋๋ค.
ModelView mv = new ModelView(viewName);
mv.setModel(model);
return mv;โ
์ค์ ์ปจํธ๋กค๋ฌ๊ฐ ModelView๋ฅผ ๋ฐํํ์ง ๋ชปํ๋ฉด, ์ด๋ํฐ๊ฐ ModelView๋ฅผ ์ง์ ์์ฑํด์๋ผ๋ ๋ฐํํด์ผ ํ๋ค.
์ด๋ํฐ๊ฐ ํธ์ถํ๋ ControllerV4 ๋ ๋ทฐ์ ์ด๋ฆ์ ๋ฐํํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ํฐ๋ ๋ทฐ์ ์ด๋ฆ์ด ์๋๋ผ ModelView ๋ฅผ ๋ง๋ค์ด์ ๋ฐํํด์ผ ํ๋ค.
์ด๋ํฐ๋ ์ด๊ฒ์ ModelView๋ก ๋ง๋ค์ด์ ํ์์ ๋ง์ถ์ด ๋ฐํํ๋ค.
4. ViewResolver , render , ์๋ต
MyView view = viewResolver(mv.getViewName());
view.render(mv.getModel(),request,response);
'Spring > Spring MVC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง MVC] - 11. @Controller / @RequestMapping (0) | 2023.02.15 |
---|---|
[์คํ๋ง MVC] - 10. DispatcherServlet / ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ (0) | 2023.02.15 |
[์คํ๋ง MVC] - 8. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ - ModelView (0) | 2023.02.14 |
[์คํ๋ง MVC] - 7. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ (0) | 2023.02.14 |
[์คํ๋ง MVC] - 6. MVC ํจํด - ์ ์ฉ , ํ๊ณ (0) | 2023.02.13 |