본문 바로가기
Java Web Programming/6. Spring | MyBatis

[Spring/MyBatis] Tiles Framework (스프링 타일즈) 환경 설정

by 파프리카_ 2020. 11. 18.
728x90
반응형

[ Tiles Framework ]

: 웹페이지 템플릿을 위한 프레임워크

 

- 반복적으로 jsp <include> 로 처리되었던 header, footer, left 등의 view layout의 정보를 모아서 관리하여,

   효과적으로 개발하고, 유지보수하기 위한 프레임워크

- 반복되는 부분을 설정파일로 한 번만 설정하고, 수정 시 설정 파일의 일부만 변경해도 모든 tiles 페이지가 적용된다.


[ Tils Framework 환경설정 ]

 

1. Maven pom.xml에 <dependency> 추가

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-jsp</artifactId>
  <version>3.0.3</version>
</dependency>

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-core</artifactId>
  <version>3.0.3</version>
</dependency>

 

2. Tiles 설정 파일 정의 : tiles-config.xml  (webapp/WEB-INF)

<?xml version="1.0" encoding="UTF-8"?>
<!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="home.tiles" template="/WEB-INF/views/templates/layout.jsp">
	<put-attribute name="title" value="kosta" />
	<put-attribute name="header" value="/WEB-INF/views/templates/header.jsp" />
	<put-attribute name="left" value="/WEB-INF/views/templates/left.jsp" />
	<put-attribute name="right" value="/WEB-INF/views/templates/right.jsp" />
	<put-attribute name="footer" value="/WEB-INF/views/templates/footer.jsp" />
	<put-attribute name="main" value="/WEB-INF/views/home.jsp" />
</definition>
</tiles-definitions>

 

 

3. template jsp 작성 : layout.jsp (webapp/WEB-INF/views/templates)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- tiles framework 선언부 --%>
<%@taglib prefix="tiles"  uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <!-- title이 null인 경우는 무시된다 -->
  <title>
  	<tiles:insertAttribute name="title" ignore="true" />	
  </title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
  <link rel="stylesheet"  type="text/css" 
  href="${pageContext.request.contextPath}/resources/css/home2.css" >  
</head>
<body>
	<div id="header">
	<!-- Tiles header 영역 -->	
		<tiles:insertAttribute name="header"/>
	</div>
	
	<div class="container-fluid text-center">    
     <div class="row content">
     
	    <div id="left" class="col-sm-3 sidenav" >
	    	<!-- Tiles left 영역 -->
	 		<tiles:insertAttribute name="left"/> 
	    </div>
	    
		<div id="main" class="col-sm-7 text-left">
			<!-- Tiles main 영역 -->
	 		<tiles:insertAttribute name="main"/> 
		</div>

		<div id="right" class="col-sm-2 sidenav">
			<!-- Tiles right 영역 -->
	 		<tiles:insertAttribute name="right"/> 
		</div>

	 </div>
	</div>
	<div id="footer">
	<!-- Tiles footer 영역 -->
		<tiles:insertAttribute name="footer" />
	</div>
</body>
</html>

 

4. tiles 관련 jsp 파일 생성 : header.jsp, footer.jsp, right.jsp, left.jsp  (webapp/WEB-INF/views/templates)

 

tiles-config.xml

<put-attribute name="header" value="/WEB-INF/views/templates/header.jsp"/>

layout.jsp

<tiles:insertAttribute name="header"/>

이 둘의 name을 일치시켜주고, view의 value(path)를 일치시켜 줍니다.

다른 jsp 및 css로 마찬가지로 설정해줍니다.

 

 

5. Spring Web Config spring-web.xml (webapp/WEB-INF)

: InternalResourceViewResolver에 아래 order를 설정

- viewResolver가 두 개가 있다.  (viewResolver, tilesViewResolver)

   그 중 호출 순서가 tiles가 적용된 jsp → 일반 jsp 순으로 우선순위를 설정한다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.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-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

<!-- <일반 JSP 반환>
	 어노테이션 기반 springmvc 설정  -->
<mvc:annotation-driven/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/"/>
	<property name="suffix" value=".jsp"/>
	<property name="order" value="1"/> <!-- 서블릿 호출 순서 -->
</bean>

<!-- <tiles 적용 JSP 반환>
	 TilesViewResolver 설정
	: 일반 JSP 응답이 아니라 Tiles Layout이 적용된 화면으로 응답하기 위해 설정 
-->
<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="0"/> <!-- 서블릿 호출 순서 : tiles적용 jsp를 먼저 탐색-->
</bean>

<!-- Tiles Framework 설정
	 : spring framework에서 Tiles Config xml 을 로딩하기 위한 설정 
-->
<bean id="tilesConfigurer"
	class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	<property name="definitions"> 
		<list>
			<value>/WEB-INF/tiles-*.xml</value>
		</list>
	</property>
</bean>

</beans>

 

6. Controller에 적용해 본다

package org.kosta.springmvc13.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
	@RequestMapping("home.do")
	public String home() {
		// tiles-config.xml 에 설정한 definition name인 
		// home.tiles 를 viewName으로 반환하여 
		// tiles 적용 화면으로 응답하게 한다 
		return "home.tiles";
	}
}

 

+ DD 설정 (web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>springmvc13-tiles-inst</display-name>
  <welcome-file-list>
    <welcome-file>home.do</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring-*.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
728x90
반응형