본문 바로가기

SPRING

[Spring] tiles ViewResolver 설정하기

728x90

- ViewResolver 이란 ?

Controller가 넘긴 view 이름을 통해 알맞은 view를 찾는 역할

View 이름으로부터 사용할 View Object를 매핑하는 역할

① Controller는 ModelAndview 객체에 응달할 view이름을 넣어 리턴

② DispachServlet은 ViewResolver에게 응답할 view를 요청한다

③ ViewResolver는 View 이름을 이용해 알맞은 view 객체를 찾아 DispatcherServlet에게 전달

 

 

1.  tile ViewResolver 추가

tiles.xml과 그 안에서 view에 맞는 해당 definition을 찾아줄 tile ViewResolver 추가

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	    <property name="viewClass" 
	    		  value="org.springframework.web.servlet.view.tiles3.TilesView" />
	    <property name="order" value="1" /> <!-- 순서1 -->
	</bean>

 

2. dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
       
      <!-- 어노테이션 사용하기위함 -->  
     <context:annotation-config/>

	<!-- /index url요청이 오면 class를 객체화하여 호출 -->
    <bean id="/index" class="com.newlecture.web.controller.indexController"/> 
    <bean id="/notice/list" class="com.newlecture.web.controller.notice.ListController">  
    	<!-- <property name="noticeService" ref="noticeService" />  -->
    	<!-- listController의 name=setter명(set생략,소문자시작), ref=매개변수명 -->
    	<!-- 인터페이스명 -->
    </bean>
    <bean id="/notice/detail" class="com.newlecture.web.controller.notice.DetailController"/>  
    
    
	<!-- tilesViewResolver설정 : 기존의 viewResolver이 받아서 prefix,suffix로 쓰는 InternalResourceViewResolver 대신
	     xml파일 설정으로 jsp를 만든다  -->
	<!-- InternalResourceViewResolver 는 UrlBasedViewResolver 의 하위 클래스 -->
	<!-- UrlBasedViewResolver-페이지를 합지고 이어주는 끈 역할 (타일즈를 이용하기 위한 뷰 리졸버)-->
	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	    <property name="viewClass" 
	    		  value="org.springframework.web.servlet.view.tiles3.TilesView" />
	    <property name="order" value="1" /> <!-- 순서1 -->
	</bean>
	
	<!-- TilesConfigurer : tiles.xml파일을 받아오는 소스 설정  -->
	<bean
	    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	    <property name="definitions" value="/WEB-INF/tiles.xml" />
	</bean>
  

	<!-- view까지 경로 ?-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property> <!-- prefix-페이지 찾기위한 접두사 -->
		<property name="suffix" value=".jsp"></property> <!-- suffix-페이지 찾기위한 접미사 -->
		<property name="order" value="2" /> <!-- 순서2 -->
		
	</bean>

 

Tiles세팅인 UrlBasedViewResolver이 기존의 ViewResolver보다 우선순위가 높아야하므로 order을 1로 set해준다.

기존의 ViewResolver인 InternalResourceViewResolver을 우선순의 2로 set 해준다.

 

 

-- InternalResourceViewResolver

- Default(기본) 뷰 리졸버. JSP를 뷰로 사용할 때 쓰임

- DispatcherServlet에게 아무런 뷰 리졸버를 등록하지 않으면, 기본으로 동작하는 뷰 리졸버에요. 

- 뷰 리졸버를 등록하지 않고 사용하는 일은 거의 없다.

 

- InternalResourceViewResolver 빈 등록 & prefix,suffix 설정

   -- 컨트롤러에서 리턴하는 뷰 이름에 접두,접미어를 붙여서 JSP페이지의 경로를 찾는다.

   -- 만약 컨트롤러가 “kbh"라는 문자열로 된 뷰 이름을 리턴하면

       뷰 리졸버는 "/WEB-INF/view/kbh.jsp"라는 위치의 JSP 뷰를 참고해서 모델을 이용하여 페이지를 만듬

 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/view"/>

<property name="suffix" value=".jsp"/>

</bean>

 

 

-- UrlBasedViewResolver

tiles사용할 때 이용

페이지를 이어주는 페이지를 합치는 작업을 할 때 이것에 해당하는 페이지를 찾아주는 역할

 

728x90