** Model 1 vs. Model 2
- Model1 : reqeust, response 내보내는 것 모두 한놈(보통 JSP)이 한다.
- Model2 : Model, View, Controller로 나눠서 처리해 보자. 여기서 ISSUE는 Contrller(Servlet)와 View (JSP)간 데이터 공유가 문제다. Struts에서는 request 객체를 이용해서 redirect로 처리했다.
** why FrontController DesignPattern and Command DesignPattern?
- 모든 요청 처리를 각각의 servlet이 관리하다 보니 공통적이 처리가 어렵다. - 매번 servlet 만들려니 힘들다.
- 그래서 FrontController designPettern 사용한다. => 하나의 Servlet이 모든 요청 다 받는다. - 이렇게 만들다 보니 FontController 역할을 하는 Servlet에 난리나게 많은 코드가 들어가게 된다. - 되려 유지보수가 떨어진다. if/else, case문 난리나게 들어간다.
- 이런 if/else, case 문을 OOP 사상으로 예쁘게 정리하기 위해 사용한 pattern이 Commond pattern이다. - commnad pattern은 어플리케이션의 명령을 추상화 시킨것이라 하는데.. - Controller 부분에 command pattern 적용
** SpringMVC 동작 메커니즘
① 사용자의 요청을 DispatcherServlet 이 받는다.
** Context Loader
- 어머나 이건 몰랐다. Servlet spec 2.3에서는 <listner>로 당연하게 등록했는데 2.2에서는 안된다.
- 2.2에서는 servlet으로 등록해야 한다. <servlet>
** Strtus vs. Spring MVC
- FormBean 비슷한 것 -> command 기능 : reqeust.getParameter() 자동으로 해주는거
** Controller
- AbstractController : 아주 단순한 Controller일 때 사용한다. Command 기능 사용하지 않는다. - AbstractCommandController : Command 기능 필요한 경우 - MultiActionController : strtus의 dispatchAction이랑 같은데 parameter로 method 구분할 수도 있고 uri로 하는 것도 제공한다. - SimpleFormController : Command기능과 Html 폼 연동을 합쳤다. 예를 들어 login기능 만들 때 사용자의 입력을 기다리는 loginPage 기능과 submit후에 로그인 처리를 해주는 두개의 request가 필요하다. 이것을 쌍으로 하나의 Controller에서 처리할 수 있다. 어떻게??? get 방식과 post 방식으로 구분해서.. get방식으로 오면 formView() method 실행해서 해당하는 jsp 화면을 보여주고, post방식으로 오면 onSubmit() method에서 로그인 처리 로직을 수행할 수 있도록 해준다. 이런방식은 update/add 페이지에서 유용하다. - AbstractWizardFormController : 마법사처럼 회원가입 시 여러페이지에서 데이터가 취합될 때 사용한다.
② 요청을 처리해야하는 Controller를 찾기 위해 DispatchServlet은 HandlerMapping에 대한 질의를 시작하고 HandlerMapping은 URL 패턴을 Controller 객체에 매핑하여 Controller를 찾아낸다.
③ DispatcherServlet은 찾은 Controller에게 요청을 전달하고 Controller는 서비스계층의 인터페이스를 호출하여 적절한 비즈니스 로직을 수행한다.
④ Controller는 비즈니스 로직의 수행결과로 받아낸 도메인모델 객체와 함께 뷰이름을 ModelAndView 객체에 저장하여 리턴한다.
⑤ DispatcherServlet은 응답할 View 객체를 찾기위해 ViewResolver에게 질의를 한다.
⑥ DispatcherServlet은 찾아낸 View 객체에 요청을 전달한다.
⑦ 뷰는 ModelAndView 객체에 있는 도메인모델 객체를 이용하여 화면을 구성한다.
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
'Framework' 카테고리의 다른 글
멀캠교육요약 5일차(Hibernate)-Spring,Hibernate,ibatis (0) | 2015.07.19 |
---|---|
멀캠교육요약 4일차-Spring,Hibernate,ibatis (0) | 2015.07.19 |
멀캠교육요약 3일차-Spring,Hibernate,ibatis (0) | 2015.07.19 |
멀캠교육요약 2일차(AOP)-Spring,Hibernate,ibatis (0) | 2015.07.19 |
멀캠교육요약 2일차-Spring,Hibernate,ibatis (0) | 2015.07.17 |