'ViewResolver'에 해당되는 글 2건

  1. 2014.10.14 Spring MVC Flow
  2. 2014.10.14 ModelAndView Class
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 루피아빠
2014. 10. 14. 06:43

(번역)

Spring MVC framework에서 ModelAndView class Model class View class 모두를 소유하는 클래스입니다. 두 클래스를 모두 소유하지만 이 두 클래스는 완전히 별개입니다. ModelAndView class단지 Controller Model객체와 View객체를 단 하나의 값으로 리턴하는 것이 가능하게 해줍니다. 그리고 이 클래스는 handler DispatcherServlet class에 의해 리턴됩니다. View class form ViewResolver객체를 이용해서 String view name으로 처리합니다. 다른 방법으로는 View객체로 직접 처리됩니다. Model클래스는 Map인데 이 Map name에 의해 키값화된 복수 객체의 사용이 가능하게 합니다


(부연설명)

원래는 View에 대한 리턴을 ModelAndView 객체로 해야하지만 View객체만 리턴해도 됩니다. Forward ViewInternalResourceView객체를 사용합니다. 그래서 우리가 직접InternalResourceView객체를 넘기면 그냥 그 View를 이용합니다. 하지만 이게 너무 귀찮으니까 SpringMVC는 우리에게 편리한 방법을 제공합니다. 우리가 단지 JSP의 경로를 쓰면 알아서 InternalResourceView를 자동으로 만들어서 작동해줍니다. WEB-INF/view/XXX.jsp라는 접미,접두사가 항상 똑같고 길기 때문에 우리가 String으로 넘길때 InternalResourceViewResolver가 있어서 그게 편리하게 작동해줍니다. , 우리는 String을 그냥 JSP의 이름만 넘기면 알아서 접두(prefix),접미사(suffix)를 만들어서 InternalResourceView를 생성해줍니다. 그런데 더 편리하게 하기 위해서 Spring MVC는 심지어 우리가 리턴하지 않으면 알아서 해당주소(index.html)에서 .html를 제외한 이름의(index)jsp를 알아서 찾습니다.(RequestMapping)


(원문)

외부링크 : java.lang.Object

org.springframework.web.servlet.ModelAndView

public class ModelAndView

extends Object


Holder for both Model and View in the web MVC framework. Note that these are entirely distinct. This class merely holds both to make it possible for a controller to return both model and view in a single return value.Represents a model and view returned by a handler, to be resolved by a DispatcherServlet. The view can take the form of a String view name which will need to be resolved by a ViewResolver object; alternatively a View object can be specified directly. The model is a Map, allowing the use of multiple objects keyed by name.

Author : Rod Johnson, Juergen Hoeller, Rob Harrop



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

 


Posted by 루피아빠