Tiles framework
웹페이지의 반복되는 부분들을(nav, footer 등) 한곳에서 관리할 수 있게 도와주는 템플릿 프레임워크
Tiles 3.0.8 버전 요구 사항
- JSTL 필수
- JDK 1.8
- Servlet 2.5
- Spring 5.1.8
버전 정보들은 아래 URL에서 확인하시면 좋을 것 같습니다.
https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp
1. Maven Dependency 추가
<!-- pom.xml -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
pom.xml을 통해 라이브러리 종속성 추가
2. Servlet-Context.xml에 tiles 설정추가
<!-- Tiles -->
<beans:bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<beans:property name="definitions">
<beans:list>
<beans:value>/WEB-INF/tiles/tiles.xml</beans:value>
<!-- 타일즈 설정파일 위치 -->
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView" />
<beans:property name="order" value="1" />
<!--value="1" tiles세팅이 우선순위 1순위다. -->
</beans:bean>
<!-- viewResolver 설정 (사용자 view의 위치, 확장명 설정) -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="2" />
<!--value="2" 기존의 viewResolver 세팅이 2순위다. -->
</beans:bean>
jsp파일(view)를 불러올 때 tiles를 우선순위로 둠 [value="1"]
3. tiles.xml 설정파일 생성
<tiles-definitions>
<!-- (1) 레이아웃을 적용하지않는화면-->
<definition name="baseEmpty" template="/WEB-INF/views/template/baseEmpty.jsp">
</definition>
<!-- (1) 레이아웃 미적용 - 적용하지않는화면을 extends하고있다. -->
<definition name="*.part" extends="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/login/{1}.jsp" />
</definition>
<definition name="*/*.part" extends="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/login/{1}/{2}.jsp" />
</definition>
<definition name="*/*/*.part" extends="baseEmpty">
<put-attribute name="body" value="/WEB-INF/views/login/{1}/{2}/{3}.jsp" />
</definition>
<!-- (2) 레이아웃을 적용하는화면-->
<definition name="base" template="/WEB-INF/views/template/baseLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="common" value="/WEB-INF/views/template/common.jsp" />
<put-attribute name="header" value="/WEB-INF/views/template/header.jsp" />
<put-attribute name="menu" value="" />
<put-attribute name="footer" value="/WEB-INF/views/template/footer.jsp" />
</definition>
<!-- (2) 레이아웃 적용 - 적용화면을 extends하고있다. -->
<definition name="*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/template/{1}.jsp" />
</definition>
<definition name="*/*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" />
</definition>
<definition name="*/*/*.page" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp" />
</definition>
</tiles-definitions>
(1) 레이아웃 적용하지 않는 화면(Tiles미적용)
**Tiles미적용 화면은 보통 로그인화면, layout이 굳이 필요하지 않는 화면을 만들때 사용합니다.
(2)레이아웃 적용화면(Tiles적용)
Tiles적용하기 위해 보통 사용합니다.
크게 common(css, js 등), header, footer, title, menu 등 공통 include.jsp를 설정합니다.
사용하지않는 것들은 삭제해도 상관없고 value값을 ""비워놓으면 됩니다.
- put-attribute: 나중에 하나의 layout jsp에서 사용하기 위한 name을 지정하는 것.
- value: 사용할 jsp 풀네임을 작성
- definition name: Controller에서 사용할 name
4. Tiles 합치기 - 하나의 레이아웃 jsp파일 생성
<body>
<h1>baseLayout.jsp</h1>
<tiles:insertAttribute name="common"/>
<tiles:insertAttribute name="header"/>
<tiles:insertAttribute name="body"/>
<tiles:insertAttribute name="footer"/>
</body>
(2)에서 만든 tile들을 합치는 곳입니다.
baseLayout.jsp(가제)를 생성해서 위에서만든 put-attribute에서 지정한 name들을 이곳에서 뿌려줍니다.
insertAttribute name = put-attribute
5. Controller
/* 타일즈 적용 */
@RequestMapping(value = "index.do", method = RequestMethod.GET)
public String test(Locale locale, Model model) {
return "layoutTest.page";
}
/* 타일즈 미적용 */
@RequestMapping(value = "index.do", method = RequestMethod.GET)
public String test1(Locale locale, Model model) {
return "layoutTest.part";
}
Controller return값 → Tiles.xml에서 설정한 definition name을 끝에 적어줍니다.
ex) return "layoutTest.page";
layoutTest(Tiles body jsp name).page(Tiles.xml에서 설정한 definition name)
정리 출처 : https://admm.tistory.com/45
정리 출처 : https://updateset.tistory.com/11
정리 출처 : https://myhappyman.tistory.com/81
'STUDY > SpringLegacy' 카테고리의 다른 글
[Spring] @RequestBody @ResponseBody 어노테이션과 @RestController (0) | 2023.04.19 |
---|---|
[Spring] RestTemplate 한글 깨짐 (0) | 2023.04.18 |
[JSP] JSP란? JSP와 서블릿의 차이점 (0) | 2022.12.25 |
[SPRING] 프로젝트 폴더 구조 분석 (0) | 2022.12.21 |
[JSP] import · JSP태그 · taglib · Include · c:url (0) | 2022.12.20 |