본문 바로가기

카테고리 없음

Tiles 2 with Spring

Spring 2.5.6 라이브러리에 포함되어 있는 Tiles 2.0.5 를 사용하는 예제

Tiles 프레임워크에 대한 기본 개념 및 간단한 사용예제는 여기를 참조하세요.
Struts 2와 Tiles2 사용예제는 여기를 참조하세요.

Spring 프레임워크를 실행하기 위한 최소한의 라이브러리
spring-webmvc.jar, spring.jar, commons-logging.jar

위의 기본 라이브러리 외에 다음과 같은 라이브러리를 프로젝트에 포함시켜야 한다.
다운로드한 스프링에 아래의 라이브러리가 모두 포함되어 있으므로 lib, dist 디렉토리에서 찾아서 프로젝트에 포함하면 된다.

Tiles 2를 실행하기 위한 추가 라이브러리 ( jakarata-commons 라이브러리)
commons-beanutils.jar, commons-digester.jar

Tiles 2를 실행하기 위한 추가 라이브러리 ( tiles 라이브러리)
tiles-api-2.0.5.jar, tiles-core-2.0.5.jar, tiles-jsp-2.0.5.jar

Tiles 2를 실행하기 위한 추가 라이브러리 ( j2ee 라이브러리)
jstl-1.1.2.jar

위에 언급된 모든 라이브러리를 아래에서 다운로드한다.



 Eclipse 3.5에서 Dynamic Web Project를 생성하고 위의 라이브러리를 모두 WEB-INF/lib 안으로 import 한다.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>
      index.jsp
    </welcome-file>
  </welcome-file-list>

</web-app>



WEB-INF/dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean name="/hello.htm"
 class="test.HelloController"/>
 
<!-- Tiles 2 -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tilesdef.xml</value>
        </list>
    </property>
</bean>

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
 <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
 <property name="order" value="1"/>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/"></property>
 <property name="suffix" value=".jsp"></property>
 <property name="order" value="2"/>
</bean>

</beans>

위에 설정된 뷰리졸버는 2개인데, 먼저 order속성이 1인 tilesViewResolver가 실행되어 뷰를 찾다가 실패하면 두번 째 뷰리졸버인 viewResolver가 실행되어 jsp페이지를 찾게 된다.


WEB-INF/tilesdef.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>
 <definition name="base_layout" template="/layout.jsp">
  <put-attribute name="title">레이아웃페이지</put-attribute>
  <put-attribute name="header" value="/header.jsp"/>
  <put-attribute name="menu" value="/menu.jsp"/>
  <put-attribute name="body" value="/body.jsp"/>
  <put-attribute name="footer" value="/footer.jsp"/>
 </definition>
 
 <definition name="hello" extends="base_layout">
  <put-attribute name="title">헬로우 페이지</put-attribute>
  <put-attribute name="body" value="/hello.jsp"/>
 </definition>
 
 <definition name="logform" extends="base_layout">
  <put-attribute name="title">로그인 페이지</put-attribute>
  <put-attribute name="body" value="/logForm.jsp"/>
 </definition>
 
</tiles-definitions>




WebContent/layout.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title><tiles:getAsString name="title"/></title>
</head>
<body>
 <center>
 <table>
 <tr><td colspan="2"><tiles:insertAttribute name="header"/></td></tr>
 <tr><td><tiles:insertAttribute name="menu"/></td>
 <td><tiles:insertAttribute name="body"/></td></tr>
 <tr><td colspan="2"><tiles:insertAttribute name="footer"/></td></tr>
 </table>
 </center>
</body>
</html>


test.HelloController

package test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class HelloController extends AbstractController {

 @Override
 public ModelAndView handleRequestInternal(HttpServletRequest arg0,
   HttpServletResponse arg1) throws Exception {
  ModelAndView mav = new ModelAndView();
  mav.setViewName("hello");         /* Tiles 설정파일의 definition name을 아규먼트로 사용하여 Tiles를 실행한다 */
  mav.addObject("greeting", "감사해요, Spring2.5");
  return mav;
 }

}


WebContent/header.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px double black;">
<center>
<h1>여기는 header.jsp의 내용</h1>
</center>
</div>


WebContent/body.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px dashed red; height:300px;">
<center>
<h1>여기는 body.jsp의 내용</h1>
</center>
</div>



WebContent/menu.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:1px solid blue; width:100px; height:300px;">
Menu
</div>



WebContent/footer.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px solid green;">
<center>
<h1>여기는 footer.jsp의 내용</h1>
</center>
</div>



WebContent/hello.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:1px dashed black; width:300px; height:300px;">
<%=request.getAttribute("greeting") %><br></br>
${greeting}
</div>



웹브라우저를 열고 http://localhost:9000/SpringTiles/hello.htm 으로 접속하면 된다.