◆ 템플릿 엔진(템플릿 프레임워크) - Tiles
일정 틀을 유지하면서 view를 꾸며야 할 때, 템플릿엔진(프레임워크)을 사용하면 쉽게 구현이 가능함.
스프링에 국한된 내용이 아니라, 굳이 스프링이 아니더라도 템플릿엔진은 사용이 가능함.
- 스프링은 이 템플릿 프레임워크를 이용해서 view를 처리하는 것을 지원함
- 다양한 종류의 템플릿엔진이 이는데, 그 중에서 Tiles라는 걸 이용해서처리
▶ 라이브러리 추가
https://tiles.apache.org/download.html로 접속하여 Tiles3.0버전 메이븐 3개중에 밑에 두개 받기
▶ 스프링 설정파일에 추가
2버전 3버전이 있지만 3버전으로 받도록 하자
definitions의 값을 array로 여러개의 tiles설정 파일을 등록할 수 있다.
▶ definitions파일 만들기
위에서 설정한 경로로 해당 이름의 xml파일을 만든다.
https://tiles.apache.org/framework/tutorial/basic/pages.html로 접속하여 아래와 비슷한 형태를 복사해서 붙여넣어준다.
▶ definitions파일 설정
위에서 만든 xml파일에서 아래와 같이 템플릿설계를 추가한다.
-
- <definition name=”index” template=”/WEB-INF/view/mainTemplate.jsp”>
- 컨트롤러에서 리턴 할 때 name에 설정한 ‘index’이름을 리턴하면 template의 경로로 이동하게 된다.
-
- <put-attribute>
- 사용되는 jsp페이지에서 문자열로 불러오거나, 해당 경로를 include하기 위해 사용하는 파라미터값
▶ 컨트롤러 경로 리턴 우선순위
Tiles의 definition name과 컨트롤러의 RequestMapping이름이 같을 때, TilesViewResolver와 InternalResourceViewResolver의 우선순위에 따라 어떤 경로로 이동할 것인지 설정할 수 있다.
-
- TilesViewResolver설정
-
- InternalResourceViewResolver설정
- InternalResourceViewResolver은 컨트롤러에서 경로를 리턴 할 때 해당 이름 앞(prefix)과 뒤(suffix)에 자동적으로 붙여질 이름을 설정하는 객체이다.
- <property name=”order” value=”1”>을 적어주어 value의 숫자가 낮은 쪽이 우선순위가 높아진다. 따라서 Tiles의 우선순위가 높을 경우 RequestMapping과 Tiles name이 겹치지 않을때만 prefix와suffix를 붙인 경로로 이동된다.
단, 주의할 점으로는 InternalResouceViewResover를 먼저 등록 시키게 되면, 페이지 낫 파운드가 발생하므로 TilesViewResolver를 먼저 등록시켜야 한다.
▶ JSP뷰 파일 만들기
definitions파일에서 설정한 template경로의 jsp파일을 만들어 <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>를 추가하여 Tiles에서 제공하는 기능을 JSTL태그를 통하여 사용할 수 있도록 한다.
-
- <tiles:getAsString name=”title”></tiles:getAsString>
- 타일즈 설정파일에 등록한 title이라는 name의 value를 문자열로 가져오기
-
- <tiles:insertAttribute name=”side”></tiles:insertAttribute>
- 타일즈 설정파일에 등록한 side라는 name의 value경로 jsp파일을 include
위 Definitions설정처럼 설정했을 시 아래와 같은 결과를 얻는다.
Attribute를 Definitions파일에 등록해두고 문자열이나 경로로 반환받기 때문에 해당 경로에 파일이 존재하지 않아도 불러오지 않으면 에러가 발생하지 않는다.
또한 tiles에 의해 합쳐진 jsp파일 모두에서 해당 Attribute를 사용할 수 있으며, EL태그를 통해 템플릿을 좀 더 동적으로 사용할 수 있다.
▶ Tiles 중복처리
반복적으로 포함되는 일정한 패턴같은 경우는 extends옵션에 포함할 name을 적어 상속받아 사용하면 일일히 추가할 필요가 없다.
템플릿을 상속받게 될 경우 중복되는 속성은 상속받은 쪽의 값이 우선으로 덮어씌워지고, 없는 값들은 추가된다.
◆ Tiles EL태그 지원
tiles에서는 EL태그를 지원해 주기 때문에 좀 더 동적으로 페이지를 설계할 수 있다.
타일즈에서 EL태그를 사용하기 위해서는 TILES EL SUPPORT 라이브러리가 필요하다
▶ 메이븐 추가
▶ 사용법
<put-attribute>태그의 값을 value가 아닌 expression으로 셋팅하면 EL태그의 값으로 설정할 수 있다.
컨트롤러에서 Map이나 Model객체를 통해 셋팅한 값을 파일명등에 셋팅시켜 동적인 페이지 변환이 가능하도록 구성할 수 있고,
Tiles설정파일의 등록할 개수를 최소화 시킬 수도 있다.
Tiles사용 주의)
Tiles로 만들어진 페이지에서 해당 페이지를 제외한 include로 포함되는 페이지들은 <head>나 <body>등 공통적인 설정태그들은 모두 지워주어야 한다.
즉, 중간에 그대로 삽입된다고 생각하고 설계해야한다.