2014. 10. 14. 13:11

사진출처 : 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)

 : Controllerannotation을 부여해서 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 / DAOFlow

요청

-> 해당 Controller(서비스에 대해 의존적-DI필요)

: 요청에 대한 서비스 호출

-> 호출받은 Service: 필요한 DAO호출, 이곳에서 TX (트랜잭션)수행

-> 호출받은 DAO: DBSQL수행 <-> 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 이용

- parameterVOproperty 일치 시 자동으로 setting

 

Session에 등록

- annotation @SessionAttributes(“이름”) 이용

- Model에 이름의 Attributes가 있으면 Sessionscope등록

*scope란 객체가 살아있는 범위를 말함

*4가지 scope

- context : 웹 서비스가 유지되는 동안 유지

- session : 세션이 유지되는 동안(브라우저창이 켜져있는 동안)

- request : 포워드 방식일 경우 request가 유지되는 동안만 유지

- page : 해당 페이지내에서만 유지



크리에이티브 커먼즈 라이선스


Posted by 루피아빠