Tiles란?

Tiles를 이용하지 않으면 화면 내에 공통적으로 들어가게 될 header, footer 같은 소스를 jsp 파일로 분리한다. 그리고 각 화면의 jsp 파일마다 include하는 방식을 사용한다. 이럴 경우, 모든 화면에 header, footer를 include 해야 하고, 페이지의 레이아웃이 바뀔 때 jsp 파일을 모두 수정해야 하기 때문에 번거롭다.

 

이 때, 웹 페이지의 header, footer, 메뉴처럼 공통적인 소스를 분리하여 화면의 jsp 파일에는 각 화면에 해당하는 소스만 작성하고 페이지의 레이아웃을 한 곳에서 설정하여 관리할 수 있도록 하는 프레임워크이다.

 

처음엔 Tiles와 Thymeleaf 둘 중 하나를 선택해서 사용해야 하는 줄 알았다.

하지만 Tiles는 레이아웃 템플릿, Thymeleaf는 텍스트 템플릿 엔진으로 함께 사용 가능한 것이었다.

Thymeleaf는 따로 포스팅할 때 자세히 설명하겠다. 아래 글은 템플릿 엔진에 대한 내용이다.

https://gmlwjd9405.github.io/2018/12/21/template-engine.html

 

[Template Engine] 템플릿 엔진(Template Engine)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

 

설정

pom.xml

		<!-- Tiles -->
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-jsp</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-extras</artifactId>
			<version>3.0.8</version>
		</dependency>

 

https://mvnrepository.com/search?q=tiles

 

Maven Repository: tiles

Tiles JSP support: Classes and tag libraries to use Tiles in a JSP environment. Last Release on Sep 30, 2017

mvnrepository.com

 

위 주소로 들어가면 아래 내용이 나온다.

이 세 가지의 최신 버전 <dependency>를 복사해서 pom.xml에 넣는 것이다.

현재는 3.0.8 버전이 최신이므로 해당 버전을 받는다.

 

servlet-context.xml

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean id="viewResolver" 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>
	
	<!-- Tiles -->        
	<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: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>

기존 veiwResolver의 order 속성을 2로 수정하고 아래 Tiles 내용을 추가한다.

order 속성은 실행의 우선순위를 의미한다.

tilesConfigurer에 타일즈 설정을 할 xml 파일의 경로를 입력한다.

 

/WEB-INF/tiles/tiles.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>

	<!-- tiles 적용 -->
	<definition name="template" template="/WEB-INF/tiles/template.jsp">
		<put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
		<put-attribute name="left" value="/WEB-INF/tiles/left.jsp" />
		<put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
	</definition>
 
	<definition name="*" extends="template">
		<put-attribute name="main" value="/WEB-INF/views/{1}.jsp" />
	</definition>
	
</tiles-definitions>

<definition>로 tiles 태그를 사용할 template 파일의 경로를 작성한 후, <put-attribute>에 사용할 태그의 이름, jsp 파일의 경로를 입력한다.

main은 컨트롤러에 의해 화면에 띄워질 jsp파일을 의미하므로 value에 경로를 적어준다.

 

definition name에 *로 설정하면 컨트롤러에서 return값을 "home" 으로 작성하면 되고

*/*로 설정하면 "home/home", "*.*"이면 "home.home", 또는 "*.tiles"로 "home.tiles", "*.normal"은 "home.normal" 식으로 작성하면 된다.

 

jsp 파일

WEB-INF/tiles/header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<h1>Header</h1>
 
<script type="text/javascript">
    $(function() {
          
    });    
</script>

WEB-INF/tiles/footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<h1>Footer</h1>
 
<script type="text/javascript">
    $(function() {
 
    });    
</script>

WEB-INF/tiles/left.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<h1>Left 메뉴</h1>
 
<script type="text/javascript">
    $(function() {
 
    });    
</script>

WEB-INF/tiles/template.jsp _ 레이아웃 파일

<%@ 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="main" /></div>    
    <div id="footer"><tiles:insertAttribute name="footer" /></div>
    </div>
 
    <script type="text/javascript">
        $(function() {
 
        });    
    </script>    
</body>
</html>

WEB-INF/views/home.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

HomeController.java

@Controller
public class HomeController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home() {
        
        return "home";
    }
}

 

출처 : https://how-can-i.tistory.com/33

'Portfolio' 카테고리의 다른 글

[Spring] 프로젝트 생성  (0) 2023.05.09

3.1. 스프링 MVC 프로젝트 생성하기

eclipse -> file -> new -> other를 차례로 누른다. 

생성할 프로젝트 종류를 고르는 화면이 나온다. spring -> Spring Legacy Project 선택 후 next 버튼을 누른다. 

프로젝트 정보 입력창이 나오면 아래와 같이 입력한다.

  • project name : SampleSpringYse
  • templates : Spring MVC Project
  • next

다운로드 창이 나오면 yes를 클릭한다. 

기본 패키지 이름을 입력한다. 여기서는 sample.spring.yse를 예제 패키지로 사용한다. 

3.2. 프로젝트 자바 버전을 1.8로 변경

  • 프로젝트 우클릭 -> properties
  • java build path ->Libraries 탭 -> JRE System Library JavaSE-1.6 선택 -> edit
  • execution environment
  • JavaSE-1.8 로 콤보박스 변경
  • environments ... 클릭
  • JavaSE-1.8 선택 -> jre1.8.0_202[perfect match] 선택 -> apply and close
  • finish
  • Apply and Close

3.3. 메이븐 자바 버전을 1.8로 변경

메이븐은 프로젝트를 생성하고 라이브러리를 관리하고 빌드하는 것까지 프로젝트의 라이프 사이클을 관리하는 소프트웨어다. 잘 모르겠으면 그냥 자동으로 라이브러리를 쓸 수 있게 해 준다는 점만 기억하자

프로젝트 루트에 있는 pom.xml 이 메이븐 설정 파일이다.

<java-version>1.8</java-version>

3.4. faceted project problem (java version Mismatch) 오류 해결

  • 프로젝트 우클릭 -> properties
  • project Facets 메뉴 클릭
  • Java (Version 1.6) 우클릭 -> Change version
  • 1.8로 변경
  • Apply and close

3.5. 메이븐 스프링 버전을 최신 버전으로 업데이트

스프링 프레임워크 사이트 https://spring.io/projects/spring-framework 를 참고해서 버전을 맞춘다. 5.x 이상이면 좋다. 예제에서는 5.2.5 버전을 기준으로 한다.
pom.xml

<org.springframework-version>5.2.5.RELEASE</org.springframework-version>

3.6. 메이븐 빌드 실행

pom.xml 파일을 수정하고 나면 메이븐 빌드를 통해 변경된 메이븐 내용을 프로젝트에 반영해야 한다.

  1. 이클립스 -> Project -> Clean 
  2. 프로젝트 우클릭 -> Run as -> 6. maven clean 
  3. 프로젝트 우클릭 -> Run as -> 4. maven build (Alt + Shift + X => 팝업메뉴 M) 
  4. 처음으로 메이븐을 실행할 경우 edit configuration 팝업 메뉴가 나온다. Goals를 compile 로 입력한 후 Run을 클릭한다. 

3.7. 톰캣 설정

톰캣(tomcat)은 자바로 만든 웹 어플리케이션을 실행시켜주는 웹서버 역할을 한다. 톰캣처럼 자바 웹 어플리케이션을 실행시켜주는 프로그램을 WAS(Web Application Server)라고 한

톰캣 다운로드

톰캣은 https://tomcat.apache.org/download-80.cgi 에 접속 후 Binary Distributions -> core -> 64-bit Windows zip (pgp, sha512) 클릭해서 다운로드할 수 있다.


톰캣을 저장할 디렉토리를 지정한다. 경로는 아래와 달라도 무관하다. 보기 편하게 하기 위해 디렉터리 이름을 변경하는 것이다.
d:\project\java\apache-tomcat8.5.57 아래에 풀고 apache-tomcat8.5.57 디렉터리 이름을 tomcat85로 변경한다. d:\project\java\tomcat85\README.md 파일이 있으면 제대로 한 것이다.

이클립스 서버 탭 위치 변경

우선 이클립스에서 서버 탭을 왼쪽 아래로 드래그해서 옮긴다. 필수는 아니지만 다들 거기에 놓고 사용한다. 소스코드가 변경되면 서버를 재기동해야 하므로 자주 쓰기 때문이다.

원래는 여기 있었다. 

요기에 가져다가 두자. 

톰캣 이클립스 연동

톰캣을 이클립스에서 사용할 수 있도록 연동한다.

Servers 탭에서 No servers are available .. 메세지를 클릭한다. 

apache -> tomcat v8.5 클릭 후 NEXT 버튼을 클릭한다. 

browse 버튼을 클릭 후 톰캣이 설치된 디렉토리를 선택하고 next 버튼을 누른다.

적용할 프로젝트 선택하는 화면이 나온다. available 탭의 프로젝트명을 선택한다. 

add 버튼 클릭해서 configured 로 이동하고 finish 를 클릭해 톰캣 설정을 마무리한다. 

톰캣 실행환경 설정

Servers 탭의 Tomcat 8.5 더블클릭해서 톰캣 실행 환경 설정을 할 수 있다.

타임아웃 설정

타임아웃(timeout)은 서버가 시작될 때 몇 초 내에 시작이 안 되면 서버 시작 실패라고 간주하는지 설정하는 것이다. 프로젝트가 규모가 클 경우 시작되는 시간이 오래걸리므로 여유있게 120초(2분)으로 설정하자.

  • Overview 탭
  • timouts 클릭
  • Start : 120

웹 경로 설정

웹 경로는 톰캣이 실행되는 웹 루트 디렉터리를 말한다. 이클립스에서 프로젝트에 톰캣을 연동하면 /프로젝트 이름 형식을 기본값으로 연동한다. 대부분의 웹사이트는 / 경로부터 시작하므로 /프로젝트 이름 웹 경로를 최상위 경로인 /로 바꾼다.

Modules 탭에서 /yse 항목을 선택하고 Edit 버튼을 누른다. 

Path 항목을 /yse 에서 / 로 변경한다. 

Ctrl + S키를 눌러서 저장하면 된다.

 

3.8. 인코딩 필터 설정

브라우저에서 보내는 요청(Request)과 응답(Response)을 모두 UTF-8 로 고정하기 위해 인코딩 필터를 설정한다.

src/main/webpp/WEB-INF/web.xml

<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>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3.9. 로그 레벨 설정

개발 중에는 가능한 많은 정보가 나오는 것이 개발에 수월하다. 따라서 로그 레벨을 가장 낮은 레벨인 debug 모드로 변경한다.

src/main/resources/log4j.xml

<!-- Root Logger -->
<root>
    <priority value="debug" />
    <appender-ref ref="console" />
</root>

3.10. 홈 컨트롤러, 뷰 삭제

프로젝트를 처음 생성하면 샘플용으로 홈 컨트롤러와 뷰가 생성되어 있다. 사용하지 않으므로 삭제한다.

  1. src/main/java/sample/spring/yse/HomeController.java 삭제 
  2. src/main/webapp/WEB-INF/views/home.jsp 삭제 

 

 

 

 

 

 

출처 : https://wikidocs.net/115237

 

03.01. 프로젝트 세팅 - 1

# 3. 프로젝트 처음 세팅 ## 3.1. 스프링 MVC 프로젝트 생성하기 eclipse -> file -> new -> other를 차례로 누른다. ![이클립스 스프링 MV…

wikidocs.net

 

 

'Portfolio' 카테고리의 다른 글

타일즈 적용  (0) 2023.05.09

+ Recent posts