이였다면 이번 Part는 tiles 설정 및 활용 방안에
대해서 말씀 드리겠습니다.
- Tiles Definition
Paste your text here.<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<!-- = Abstract root definition ============ -->
<!-- default -->
<definition name=".default"
template="/WEB-INF/views/jsp/layout/defaultLayout.jsp">
<put-attribute name="title" value="CHANGE-ME" />
<put-attribute name="meta" value="/WEB-INF/views/jsp/layout/meta.jsp" />
<put-attribute name="left" value="/WEB-INF/views/jsp/layout/left.jsp" />
<put-attribute name="footer"
value="/WEB-INF/views/jsp/layout/footer.jsp" />
</definition>
<!-- empty -->
<definition name=".empty" template="/WEB-INF/views/jsp/layout/emptyLayout.jsp">
<put-attribute name="meta" value="/WEB-INF/views/jsp/layout/meta.jsp" />
</definition>
<!-- = implement definition ============ -->
<!-- default depth3 -->
<definition name="*/*/*" extends=".default">
<put-attribute name="title" value="Tiles2 Test" />
<put-attribute name="body" value="/WEB-INF/views/jsp/{1}/{2}/{3}.jsp" />
</definition>
<!-- default depth2 -->
<definition name="*/*" extends=".default">
<put-attribute name="title" value="Tiles2 Test" />
<put-attribute name="body" value="/WEB-INF/views/jsp/{1}/{2}.jsp" />
</definition>
<!-- default depth1 -->
<definition name="*" extends=".default">
<put-attribute name="title" value="Tiles2 Test" />
<put-attribute name="body" value="/WEB-INF/views/jsp/{1}.jsp" />
</definition>
<!-- empty -->
<definition name="dummy/empty" extends=".empty">
<put-attribute name="body"
value="/WEB-INF/views/jsp/dummy/empty.jsp" />
</definition>
</tiles-definitions>
definition name이 ".default"는 전체 layout을
선언하는 부분 입니다.
definition name이 ".empty" 부분은 web application에서
보면 기본 Layout을 적용이 되지 않고 싶을때 (팝업,iframe 등)
에서 사용할때 필요한 말 그대로 빈 페이지를 위한 레이 아웃입니다.
위에 설명한 2개의 설정은 layout 템플릿 설정이고 이제부터는
실제로 요청시 body 부분을 설정 하도록 해보겠습니다.
원래는 tiles는 매번 요청 마다 definition name를 설정해야
하는 엄청난 노가다를 해야 했습니다. 물론 spring examples
같은 곳에서 만든 라이브러리를 사용하면 일정부분
해결이 되긴 하지만 tiles2 부터는 와이들 카드로
설정 할수가 있습니다.
definition name이 "*/*/*"인 경우 위에서 extends=".default"
를 통해서 속성을 상속 받습니다.
그리고 호출 URL이 3 depth일 경우 해당 definition이
적용 됩니다.
예를 들어서
http://localhost:8080/dummy/depth1/depth2.ssc
라고 호출하면 스프링은 자동으로 view name을
"dummy/depth1/depth2.ssc" 변환 해서
해당 ViewResolver를 찾습니다.
"UrlBasedViewResolver"에 해당하기 때문에 tiles2 뷰로
포워딩 됩니다.
Tiles2 View에 도착한 View는 해당 definition을 찾습니다.
위의 view name은 "*/*/*" 패턴에 해당 하기 때문에
이 definition을 사용합니다.
요청 URL을 순서별로 body로 선언된 jsp를 찾습니다.
{1}:dummy,{2}:depth1,{3}:depth2.ssc
결국 /WEB-INF/views/jsp/dummy/depth1/depth2.jsp
로 포워딩이 됩니다.
"*/*" 이것도 위와 동일한 메커니즘 입니다.
마지막으로 "dummy/empty"로 선언된 것은 빈 페이지
layout template를 타기 위해서 선언된 것으로
이렇게 명시적으로 선언하면 wild card로 선언된
것은 무시하고 명시된 body를 찾습니다.
- 샘플 다운로드 받기
svn 주소로 full checkout 받으시면 됩니다.
소스 다운로드 : (https://springshowcase.googlecode.com/svn/trunk/ssc-webtemplate)
실행 하기 앞서서 참고로 JDK1.6 과 tomcat 6.0 에서 개발했습니다.
실행 방법은 "http://localhost:8080/" 치면 화면이 열리고
왼쪽 메뉴에 케이스별로 링크를 걸어 놓았습니다.
앞으로 spring best practice를 위한 오픈 소스를 개인적으로
하려고 합니다. 관심있는 분들은 springorg@gmail.com
로 주시면 감사 하겠습니다.
앞으로 되도록 샘플 소스를 이런식으로 배포 하고자 합니다.
댓글 없음:
댓글 쓰기