egov
Egov - jsp tiles 사용
전주천둥새
2023. 5. 15. 17:03
*** tiles란 레이아웃을 고정시키고 내부의 contents부분을 수정할수 잇는걸 뜻한다.
1. pom.xml에 dependency 추가
<!-- tiles 시작 -->
<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>
<!-- tiles -->
>>> 이후 프로젝트 우클릭 > Maven > Update Project로 프로젝트 업데이트 진행
2. dispather-servlet 설정

해당파일의 설정을 변경해준다
>>> 초기설정
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
>>> 변경설정
<!-- tiles 설정 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="1" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles-layout.xml</value>
</list>
</property>
</bean>
<!--/tiles -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="2"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
>>> 경로변경 및 p:order 1 -> 2로 변경
3. WEB-INF 폴더 하위에 tiles 폴더 및 파일 생성하기

>>> tiles.xml 파일 (아래 코드 메뉴탭타일즈 부분에 추가로 header, footer등 추가해서 컴포넌트화 가능)
<?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>
<!-- 메뉴 탭 타일즈 -->
<definition name="layouts-tiles" template="/WEB-INF/tiles/tiles-layout.jsp">
<put-attribute name="body" value=""/>
</definition>
<definition name="*/*" extends="layouts-tiles">
<put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>
</tiles-definitions>
>>> tiles.jsp파일 (아래 코드처럼 taglib로 타일즈를 적용시키고 레이아웃을 디자인한후 tiles태그를 사용해서 컨텐츠(body)부분을 작성해둔다. 그러면 이후 추가로 작업되는 페이지에서는 body부분만 작성된다.)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
//타일즈 적용할 레이아웃...//
<!-- Page content wrapper-->
<div id="page-content-wrapper">
<div class="container-fluid">
<div id="body"><tiles:insertAttribute name="body"/></div>
</div>
</div>
</div>
</body>
</html>
>>> 위 파일처럼 layout에 전부 작성할수도 있지만, component화 시켜서 아래방식처럼 작성할 수도 있다.
>>> xml 파일
?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>
<!-- 메뉴 탭 타일즈 -->
<definition name="layouts-tiles" template="/WEB-INF/tiles/tiles-layout.jsp">
<put-attribute name="loadFile" value="/WEB-INF/tiles/inc/loadFile.jsp" />
<put-attribute name="header" value="/WEB-INF/tiles/inc/header.jsp" />
<put-attribute name="left" value="/WEB-INF/tiles/inc/left.jsp" />
<put-attribute name="body" value=""/>
<put-attribute name="footer" value="/WEB-INF/tiles/inc/footer.jsp" />
</definition>
<definition name="*/*" extends="layouts-tiles">
<put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>
</tiles-definitions>
>>> jsp 파일
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE html>
<html>
<head>
<tiles:insertAttribute name="loadFile"/>
</head>
<body>
<div id="wrap">
<div id="nav"><tiles:insertAttribute name="header"/></div>
<div id="left"><tiles:insertAttribute name="left"/></div>
<div id="body"><tiles:insertAttribute name="body"/></div>
<div id="footer"><tiles:insertAttribute name="footer"/></div>
</div>
</body>
</html>
>>> 추가로 xml 파일의 extends 앞단의 name에 */*.jsp 등의 접미사를 사용해서 해당 파일에만 tiles를 적용시킬수도 있다. (controller의 return 부분에 동일한 접미사를 적용한다)
4. 작성된 타일즈 확인



>>> spring과 spring boot에서의 적용법은 다르니 해당 프로젝트 작성시에는 찾아서 해보자!!