티스토리 뷰
Tiles Framework란?
Tiles는 웹페이지의 상단메뉴나 좌측메뉴, 공통 파일 include 등의 반복적인 부분을 한 곳에서 깔끔하게 관리할 수 있게 도와주는 템플릿 프레임워크 입니다.
https://tiles.apache.org/
위 URL은 Tiles Framework의 공식 사이트입니다.
Tutorial과 API문서가 상세하게 잘 나와있지만 영어라 그런지 보기가 쉽지 않습니다.
공식 사이트를 보고 따라하기 어려운 분만 아래 내용을 참고해주시면 되겠습니다.
Step 0. 최소 요구사항 확인
※ 현재 최종 버전인 3.08 버전 기준입니다.
※ Spring STS 플러그인의 Spring MVC Project 예제에 Tiles를 연동하는 방법을 기술 한 것입니다. 프로젝트 구성 별로 설정파일명이 다를 수 있습니다.
- JSTL 필요
* STS를 사용하고 있다면 기본적으로 탑재되어 있고, 그렇지 않다면 JSTL Dependency를 Maven에 추가해줘야 함.
* JSTL이 없으면 아래와 같은 에러 발생
HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
- JDK 1.7 이상
- Servlet 2.5 이상(2.4도 가능은 함)
- JSP 2.1 이상(2.0도 가능은 함)
- Spring 3.2 이상
* 현재 Spring 3.x의 최종 버전인 3.2.18과 4.x의 최종 버전인 4.3.18에서만 테스트 진행 하였습니다.
Step 1. Maven Dependency 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <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> | cs |
Step 2. servlet-context.xml 파일에 Tiles 설정 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <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" /> </beans:bean> <context:component-scan base-package="com.my.test" /> <!-- 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" /> </beans:bean> </beans:beans> | cs |
※ 27~38라인이 Tiles 관련 설정이 추가된 것이고, 22라인은 기존 viewResolver를 Tiles 다음으로 순서만 변경한 것입니다. 그 외에는 STS 플러그인의 Spring MVC Project 예제와 동일합니다.
Step 3. tiles.xml 설정 파일 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <tiles-definitions> <!-- 메뉴 표시 --> <definition name="base" template="/WEB-INF/tiles/template.jsp"> <put-attribute name="left" value="/WEB-INF/tiles/left.jsp" /> <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" /> <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" /> </definition> <definition name="*.page" extends="base"> <put-attribute name="body" value="/WEB-INF/views/{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> <!-- 메뉴 미표시 --> <definition name="baseEmpty" template="/WEB-INF/tiles/templateEmpty.jsp"> </definition> <definition name="*.part" extends="baseEmpty"> <put-attribute name="body" value="/WEB-INF/views/{1}.jsp" /> </definition> <definition name="*/*.part" extends="baseEmpty"> <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" /> </definition> <definition name="*/*/*.part" extends="baseEmpty"> <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp" /> </definition> </tiles-definitions> | cs |
※ Step 2의 31라인과 동일한 경로에 동일한 파일명으로 생성해야 합니다.
Step 4. Template 파일 생성
/WEB-INF/tiles/template.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>제목</title> <style> #header{ width:100%; height:50px; text-align: center; background-color: aqua; } #left{ float:left; width:15%; background-color: gray; } #main{ float:left; width:85%; background-color: lime; } #footer{ width: 100%; height: 50px; text-align: center; background-color: orange; clear:both; } #left, #main{ min-height: 600px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head> <body> <div style="width:100%; height:100%;"> <div id="header"><tiles:insertAttribute name="header" /></div> <div id="left"><tiles:insertAttribute name="left" /></div> <div id="main"><tiles:insertAttribute name="body" /></div> <div id="footer"><tiles:insertAttribute name="footer" /></div> </div> <script type="text/javascript"> $(function() { }); </script> </body> </html> | cs |
※ header, left, footer가 모두 존재하는 레이아웃을 구성하는 템플릿
/WEB-INF/tiles/templateEmpty.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>제목</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head> <body> <div id="main"><tiles:insertAttribute name="body" /></div> <script type="text/javascript"> $(function() { }); </script> </body> </html> | cs |
※ header, left, footer가 없는 단일 페이지 레이아웃
/WEB-INF/tiles/header.jsp
1 2 3 4 5 6 7 8 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>Top 메뉴</h1> <script type="text/javascript"> $(function() { }); </script> | cs |
/WEB-INF/tiles/left.jsp
1 2 3 4 5 6 7 8 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>Left 메뉴</h1> <script type="text/javascript"> $(function() { }); </script> | cs |
/WEB-INF/tiles/footer.jsp
1 2 3 4 5 6 7 8 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>Footer</h1> <script type="text/javascript"> $(function() { }); </script> | cs |
여기까지 하셨으면 Spring에 Tiles를 연동시키는 작업이 모두 끝난 것입니다.
이제 Tiles가 잘 연동되었는지 어떤 식으로 활용하면 되는지 살펴보도록 하겠습니다.
Test를 위해 test.jsp 파일을 아래와 같이 생성하고,
HomeController.java 파일은 아래와 같이 수정합니다.
/WEB-INF/views/test.jsp
1 2 3 4 5 6 7 8 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>테스트</h1> <script type="text/javascript"> $(function() { alert('body'); }); </script> | cs |
HomeController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package com.my.test; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate ); return "home"; } /** * Tiles를 사용하지 않은 일반적인 형태 */ @RequestMapping("/test.do") public String test() { return "test"; } /** * Tiles를 사용(header, left, footer 포함) */ @RequestMapping("/testPage.do") public String testPage() { return "test.page"; } /** * Tiles를 사용(header, left, footer 제외) */ @RequestMapping("/testPart.do") public String testPart() { return "test.part"; } } | cs |
http://localhost:8080/프로젝트명/test.do
http://localhost:8080/프로젝트명/testPage.do
http://localhost:8080/프로젝트명/testPart.do
를 차례대로 실행시켜서 화면에 출력되는 결과물을 비교해보고,
크롬의 페이지 소스보기 기능을 이용해서 전체 페이지가 어떻게 조립되는지도 비교해보시면 Tiles의 장점과 언제 어떻게 사용하면 될지를 아실 수 있을 것 같습니다.
'Spring' 카테고리의 다른 글
[Spring] MySQL MyBatis 연동 방법 (0) | 2018.07.06 |
---|---|
[Spring] MySQL 연동 방법 (3) | 2018.07.05 |
Spring 강좌 4강 - 예제 소스 및 주요파일 분석 (1) | 2018.04.20 |
Spring 강좌 3강 - MVC패턴 및 Spring 기본 동작 순서 (1) | 2018.04.19 |
Spring 강좌 2강 - Spring MVC Project 생성 (0) | 2018.04.18 |
- Total
- Today
- Yesterday
- react 공식문서
- Nexacro
- CodeSandbox
- react 강의
- dropdowncalendar
- 인텔리제이
- nodatatext
- autoenter
- ListView
- React
- git
- react 강좌
- Grid
- IntelliJ
- Git 연동
- JavaScript Hoisting 호이스팅
- dropdowncombo
- Git 사용법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |