[ETC] Spirng MVC 와 Tiles 2 연동하기(기본)

황제낙엽 2009.10.13 04:59 조회 수 : 523 추천:101

http://yunsunghan.tistory.com/258

Tiles는 기존에 UI Layout에서 인기있었던 라이브러리였다. 비록 각각의 뷰 파일을 만들어야 하는 번거러움이 있음에도 불구하고, include를 제거할수 있는 좋은 대안으로 인기가 있었다. 그후 Sitemesh 라는게 유행했는데 뷰마다 각각의 파일을 만들필요가 없어서 인기가 있었다. 최근까지도 나는 이걸 이용했었다. 다시또 유행하는게 Tiles 2 인데 이놈은 Spring Reference에 나올 정도로 인기가 급상승 중이다. 이런 Layout 라이브러리(또는 프레임웍)는 왼만해서는 새로 변경하지 않는데, Sitemesh의 불편한점(누구나 처음 쓸때 겪은 Sitemesh의 곤란함)을 털어보고자 Tiles2에 도전해 본다.

일반적인 Controller 를 이용한 매핑 예제를 알아본다.(Tiles는 Annotaion과 무관함으로 annotation 기반이라고 해서 특별히 설정할것은 없다.)

Spring MVC 설정에서 ViewResolver는 보통 아래와 같다.

 <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />  
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
 </bean>

이것은 Controller를 Annotation기반으로 할때도 변함없다. 그러나 Tiles2는 UrlBasedViewResolver를 사용하고 뷰클래스도 TilesView를 사용한다.

 <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
 </bean>

물론 Sitemesh처럼 설정파일도 있다.
Sitemesh와 설정의 차이점은 설정이 Spring Bean으로 Integration되었다는것이다. TilesConfigurer를 아래와 같이 설정한다.

 <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
   <list>
    <value>/WEB-INF/tiles-defs/templates.xml</value>
   </list>
  </property>
 </bean>

이것이 Spring과 연동하는 끝이다. 두개의 Bean 설정만으로 연동이 끝이다.

나머지 Tiles2 사용법은 Sitemesh를 사용해봤다면 크게 다를만한 것이 없다. 간단히 개념만 정리한다면 Controller View Name만 Tiles2 definition과 일치하면 해당 layout으로 랜더링된다. 이해하기 쉽게 순서적으로 나열해 보면 먼저 Controller를 다음과 같이 만든다.

 @RequestMapping("/index.do")
 public void index(ModelMap model){
  model.addAttribute("msg","Donkey!!");
 }

이것은 index.do를 요청하면 index() 메서드를 호출하고 msg변수를 model에 담아 index viewName과 매핑한다. 만약 Tiles2 설정파일(templates.xml)이 아래와 같다면,

 <definition name="default" template="/WEB-INF/templates/layout1.jsp">
  <put-attribute name="header" value="/WEB-INF/templates/header.jsp" />
  <put-attribute name="footer" value="/WEB-INF/templates/footer.jsp" />
  <put-attribute name="body" value="/WEB-INF/templates/body.jsp" />
 </definition>
 <definition name="index" extends="default">
  <put-attribute name="body" value="/WEB-INF/jsp/index.jsp" />
 </definition>


definition name이 index인것과 매핑되여 해당 /WEB-INF/jsp/index.jsp 파일과 랜더링 된다. 물론 default definition을 상속했으니 해당 layout의 특성을 가져오고 body속성(attribute)만 index.jsp로 바뀐다.

이렇게 일일히 모든 view를 definition 테그로 만든다는것은 별로 좋은생각이 아닌것 같다. 이런 설정을 줄여줄수 있는 방법이 있다. 거기에 대해서 다음글에 포스트하기로 한다.


번호 제목 글쓴이 날짜 조회 수
50 Hello React 황제낙엽 2025.04.04 479
49 Bootstrap Icons 황제낙엽 2024.10.13 611
48 navbars 예제 황제낙엽 2024.07.15 589
47 Chatbot 용 디자인 템플릿 (ChatGPT) file 황제낙엽 2024.01.28 637
46 (Bing) Mustache 의 특징 황제낙엽 2023.12.21 587
45 문자열의 셀렉션 동작 구현 (<p>, <input>) 황제낙엽 2023.10.02 536
44 Bootstrap 5 Gallery Examples & Freebies 황제낙엽 2023.09.26 696
43 Small Business Template (Start Bootstrap) 황제낙엽 2023.09.25 626
42 Card Component 에 background image 출력하기 황제낙엽 2023.09.08 543
41 Bootstrap Gallery 를 상품 전시용으로 활용하기 위한 분석 황제낙엽 2023.09.06 578
40 dom element 에 collapse 적용하기 file 황제낙엽 2023.08.16 562
39 <i> 태그의 아이콘 종류 찾기 (fontawesome, icon) file 황제낙엽 2023.07.09 554
38 Vanilla JS Datepicker 에서 locales 지정 (한국어로 출력) 황제낙엽 2023.06.19 773
37 Feather-icons (svg) 황제낙엽 2023.06.10 532
36 프레임셋처럼 외부페이지를 동적으로 로드하기 (from bing) 황제낙엽 2023.05.24 578
35 Modal 컴포넌트를 스크립트로 감추고 보이기 황제낙엽 2023.05.22 574
34 bootstrap free date-picker 종류 (from bing) 황제낙엽 2023.05.20 566
33 라디오 버튼을 선택 해제하는 샘플 코드 (from bing) 황제낙엽 2023.05.16 558
32 radio group 에서 아이템을 선택한 값 가져오기 황제낙엽 2023.05.15 531
31 부트스트랩(Bootstrap) 테마(Theme), 템플릿(Template) 무료 사이트 file 황제낙엽 2023.04.05 562