유블로그

[Spring] View 반환 : String, void, ModelAndView, View 본문

Spring

[Spring] View 반환 : String, void, ModelAndView, View

yujeong kang 2020. 11. 1. 21:02

Controller가 View 이름 혹은 객체를 반환하여 DispatcherServlet에게 전달하면, ViewResolver 와 View를 통해 이름 혹은 객체에 맞는 view를 생성하게 된다.

 

그래서 일단 servlet-context.xml 에 ViewResolver를 설정해야한다.

- servlet-context.xml

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<beans:property name="prefix" value="/WEB-INF/views/" />
	<beans:property name="suffix" value=".jsp" />
</beans:bean>

파일 매핑은 prefix+요청된 뷰+suffix 로 된다.

예로 들어 /board/list 가 view 이름으로 리턴되었다면

/WEB-INF/views/board/list.jsp 로 매핑된다.

 

1. String 리턴타입

- jsp

<a href="${root}/return/test01.do">

- controller

/**
	  반환타입이 String 일 경우 (ajax 호출이 아닌 경우)
	  - 페이지 이름의 개념으로 사용
	  - 설정된 뷰 리졸버를 활용한다. (redirect: 이 아닌 경우)
	  - prefix + 사용자가 리턴한 문자열 + suffix : 페이지 호출
	  
	 servlet-context.xml 파일의 내용
	 <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	
	아래가 호출된다.
	 /WEB-INF/views/return/test01.jsp
	 
	 */
	@GetMapping("test01.do")
	public String test01() {
		return "return/test01";
	}

 

2. void 리턴타입

- jsp

<a href="${root}/return/test02.do">

- controller

/**
	 * void 왕왕왕 추천!!!!!!!!!
	 void 일 경우
	 .jsp 페이지 이동 시 요청한 URI 를 이용한다.
	 
	 prefix + 요청한 URI(확장자 제거) + suffix
	 		${root}/return/test02.do
	 
	 요청한 URI : lecture/return/test02.do
	 요청한 URI(프로젝트 경로(/lecture), 확장자 제거(.do))
	 : /return/test02
	 
	 /WEB-INF/views/ + /return/test02 + .jsp
	 /WEB-INF/views/return/test02.jsp (실제 호출되는 페이지)
	 */
	@GetMapping("test02.do")
	public void test02() { }

 

3. ModelAndView 리턴타입

- jsp

<a href="${root}/return/test03.do">

- controller

/**
	 * ModelAndView 로도 이동할 수 있다는 거지 사실 void 가 젤 많이 쓰이고 그 다음 String 이 제일 많이 쓰인다.
	 /WEB-INF/views/ + return/test03 + .jsp
	 -> /WEB-INF/views/return/test03.jsp (실제 호출되는 페이지)
	 */
	@GetMapping("test03.do")
	public ModelAndView test03(ModelAndView mav) {
		mav.setViewName("return/test03");
		return mav;
	}

 

4. View 리턴타입

- jsp

<a href="${root}/return/test04.do">

- controller

/**
	   반환 타입이 View 인 경우에는
	   뷰리졸버를 적용하지 않는다.
	   직접 전체 호출 경로를 설정한다.
	   
	  suffix , prefix 적용 안 됨!!
	  
	  이 방법도 그냥 이렇게 할 수 있다로만~
	 */
	@GetMapping("test04.do")
	public View test04() {
		View view = new InternalResourceView("/WEB-INF/views/return/test04.jsp");	// 이동할 페이지를 파라미터로 준다.
		return null;
	}