사진출처 : http://java9s.com/wp-content/uploads/2011/05/Spring-3-MVC-Basic-Flow.jpg
Client ---요청---> Server ---web.xml 분석 후 제어 넘김---> DispatcherSevlet
<--- Controller 결정 ---> HandlerMapping ---> DispatcherServlet <--- View, Model 리턴 받음 --- Controller
1) DispatcherServlet : 모든 사용자 요청 받음
2) HandlerMapping : 해당 요청 URL과 Controller를 맵핑
3) Controller : DispatcherSevlet에서 요청을 받고 요청에 따른 로직 수행
4) Controller : Model을 생성
5) DispatcherServlet : View 호출과 Model 출력
DispatcherServlet의 역할
1) HTTP 요청을 접수
2) HandlerMapping에서 해당 요청 URL에 해당하는 Controller 선정
3) 선정된 Contoller에게 웹 요청을 위임
4) 선정된 Controller에게 View객체와 Model객체를 리턴받음
5) View객체 호출과 해당 뷰에서 Model객체를 reference함
HandlerMapping의 역할
- URL과 요청정보를 기준으로 Controller 선정
- 하나 이상의 Handler Mapping 가능
HandlerMapping(Interface)의 종류
- BeanNameUrlHandlerMapping(defualt)
: bean설정 시 name속성으로 mapping
- RequestMappingHandlerMapping(defualt)
: Controller에 annotation을 부여해서 mapping
- SimpleUrlHandlerMapping : 설정파일에 한번에 모아서 설정
- ControllerClassNameHandlerMapping : 클래스명과 메서드명으로 mapping
- ControllerBeanNameHandlerMapping : Bean이름으로 mapping
참고) HandlerAdapter(Interface) : Controller의 메서드를 호출할 때 사용
View의 종류
- InternalResourceView(forward방식)
- RedirectView(redirect방식)
- MarchallingView(XML)
- MappingJacksonJsonView(Json)
ViewResolver의 역할
- Controller가 리턴한 View이름을 참고하여 View를 찾는다.
ViewResolver의 종류
- InternalResourceViewResolver
- ContentNegotiatingViewResolver
- ResourceBundleViewResolver
- XmlViewResolver
*web.xml
(경로 : WebContent/WEB-INF/web.xml)
<!-- DispatcherServlet 설정 -->
<servlet>
<servlet-name>OOO</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name> OOO </servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
Controller / Service / DAO의 Flow
요청
-> 해당 Controller(서비스에 대해 의존적-DI필요)
: 요청에 대한 서비스 호출
-> 호출받은 Service단 : 필요한 DAO호출, 이곳에서 TX (트랜잭션)수행
-> 호출받은 DAO단 : 각 DB에 SQL수행 <-> DB
Controller에서 View 리턴 방식 고려사항
- 요청에 대한 View가 필요한가?
만약 필요하다면 forward방식(view단 jsp로)
불필요하다면 redirect방식(기능단 jsp로)
(JSP파일 경로는 WEB-INF/view/OOO.jsp)
InternalResourceViewResolver - 편리한 forward방식의 View 지정
-WEB-INF/view와 .jsp 생략가능
-redirect:index.html 등으로 redirect 지정가능
<!-- 포워드 뷰 InternalResourceView를 편리하게 사용할 수 있도록 설정 -->
<!-- 경로는 WEB-INF/해당프로젝트명-servlet.xml파일 à
<bean
p:prefix="WEB-INF/view/"
p:suffix=".jsp"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
Controller Bean 등록하기
- 해당프로젝트명-servlet.xml에 등록
(예) <bean class="조직구분.회사명.프로젝트명.controller.LogController"/>
- Annotation을 이용(@Controller)
- 중복된 Url이 있는지 한번에 관리하기 용이
Model이 필요없는 요청(View만 있는 요청)
- 우리가 직접 Controller를 생성할 필요없음
<!-- view만 있는 요청들은 Controller를 안만들고 이렇게 할 수도 있습니다. -->
<!-- 경로는 WEB-INF/해당프로젝트명-servlet.xml파일 à
<mvc:annotation-driven/>
<mvc:view-controller path="/content.html"/>
Controller단에서 메서드 설정
- annotation @RequestMapping 지정
- GET/POST방식 다르게 지정 가능
@RequestMapping(value="join.html", method=RequestMethod.GET)
@RequestMapping(value="join.html", method=RequestMethod.POST)
파라미터 편리하게 받기
- annotation @ModelAttribute 이용
- parameter와 VO의 property 일치 시 자동으로 setting됨
Session에 등록
- annotation @SessionAttributes(“이름”) 이용
- Model에 이름의 Attributes가 있으면 Session에 scope등록
*scope란 객체가 살아있는 범위를 말함
*4가지 scope
- context : 웹 서비스가 유지되는 동안 유지
- session : 세션이 유지되는 동안(브라우저창이 켜져있는 동안)
- request : 포워드 방식일 경우 request가 유지되는 동안만 유지
- page : 해당 페이지내에서만 유지
'프로그래밍 > Spring Framework' 카테고리의 다른 글
Apache Maven project configuration - 메이븐 설정 (0) | 2014.10.14 |
---|---|
Spring IDE plug-in install in Eclipse Java EE keppler - 스프링 IDE플러그인 (0) | 2014.10.14 |
ModelAndView Class (0) | 2014.10.14 |
Spring MVC패턴 (Model2 개발) (0) | 2014.09.11 |
Spring의 기본개념이해 (0) | 2014.09.11 |