처음부터 시작하는 Java
  • Tiles framework 기본 구성
    2021년 12월 20일 17시 42분 48초에 업로드 된 글입니다.
    작성자: 원2
    728x90
    반응형

    Spring 프로젝트 임.

     

    1. pom.xml에 maven 의존성을 추가 해준다.

     

            <!--   tiles 버전 명시     -->
            <org.apache.tiles-version>3.0.8</org.apache.tiles-version>
     <!-- Tiles Framework 관련 version 은 위에 명시해둠 -->
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-servlet</artifactId>
                <version>${org.apache.tiles-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-api</artifactId>
                <version>${org.apache.tiles-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-jsp</artifactId>
                <version>${org.apache.tiles-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-core</artifactId>
                <version>${org.apache.tiles-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-template</artifactId>
                <version>${org.apache.tiles-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-extras</artifactId>
                <version>${org.apache.tiles-version}</version>
            </dependency>

     

    2.dispatcher-servlet.xml 설정

     

     

    노란박스처럼 설정을 해준 뒤 , 빨간 박스안의 order 의 순서를 변경해야한다.

    order = "value" 의 값이 낮을수록 우선 순위로 읽어 들이는 것을 고려 하기 때문에

    Tiles 의 order value 값이 낮을 수록 Tiles의 구성을 먼저 읽어들인다.

     

        <!-- Tiles 우선순위를 첫번째로 고려하도록 변경  -->
        <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
            <property name="order" value="1"/>
        </bean>
    
        <!--  Tiles 관련 설정  -->
        <bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
            <property name="definitions">
                <list>
                    <value>/WEB-INF/tiles/tiles.xml</value>
                </list>
            </property>
        </bean>

     

     


    3. tiles.xml 구성

     

    위의 dispatcher-servelt.xml 에 설정한 <list>안의 value 위치에 있는 xml 을 만들고 설정을 하자 ( 주황색 박스 )

     

    난 이렇게 구성해 뒀다.


    (1)
    (2)
    (3)

    (3)은 따라하지 않아도 될거 같다 잠깐 오류생김;

    <?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">
    
    <!--
            기본적인 템플릿 생성
            header, body, footer 를 가진 tamplate.jsp 라는 기본 레이아웃을 정의
            이 정의된 레이아웃의 name속성인 base를 상속하여 추가적으로 여러 tiles들을 만들수 있다.
     -->
    
    <tiles-definitions>
    
        <!--  name과 template의 value는 내가 정하는 것  -->
        <definition name="base" 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="body" value=""/>
            <put-attribute name="right" value="/WEB-INF/tiles/right.jsp"/>
            <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp"/>
        </definition>
    
        <!--
            메뉴표시
          base를 상속 받은 것.
          body 부분만 설정한 경로대로 갈아 끼우고, 나머지 header, footer는 base의 형식대로 상속받아 오는 것.
          -->
        <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="*/*/*/*.page" extends="base">
            <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}.jsp"/>
    
        </definition>
        <definition name="*/*/*/*/*.page" extends="base">
            <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}/{5}.jsp"/>
    
        </definition>
    
        <!--
            메뉴 미표시
            페이지 중 로그인 페이지는 보통 header, footer 모두를 레이아웃으로 가지지 않는다.
            다만, header에 js 라이브러리 등을 포함하고 있을 것이므로 이런 특정 경로의 jsp 파일들은 header만 상속박고 footer는 사용하지 않는 방식으로 할 수 있다.
          -->
        <definition name="baseEmpty" template="/WEB-INF/tiles/templateEmpty.jsp">
    
        </definition>
        <definition name="*.part" template="baseEmpty">
            <put-attribute name="body" value="/WEB-INF/views/{1}.jsp"/>
        </definition>
    
        <definition name="*/*.part" template="baseEmpty">
            <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp"/>
        </definition>
    
        <definition name="*/*/*.part" template="baseEmpty">
            <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp"/>
        </definition>
    
        <definition name="*/*/*/*.part" template="baseEmpty">
            <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}.jsp"/>
        </definition>
    
        <definition name="*/*/*/*/*.part" template="baseEmpty">
            <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}/{5}.jsp"/>
        </definition>
    
    </tiles-definitions>

     


    4. tiles.xml 에 설정을 다 했으면, tiles directroy 를 만들어서 (아니면 원하는 자리에 설정해서 넣어줘도 무방)

    각각의 해당하는 JSP 파일을 만들어 주자

    header, footer, left(Menu), right(Menu), template, templateEmpty

     

    template.jsp 임

    이런식으로 원하는 식의 커스텀이 가능하고 원하는 곳에 tiles.xml에 설정한것을 <tiles: insertAttribute> 시켜서 넣어준다.

    taglib 선언을 해주자 :: tiles 는 물론이거니와 jstl 이 없으면 안되는거 같다.

    같이 선언해주자

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%-- tiles framework 선언부 --%>
    <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>

    또한 아래에 이런식으로 script도 적어두자 왜적는지는 모르겠던데 그냥 적으셈 ㅎㅎ;

    <script type="text/javascript">
        $(function () {
    
        });
    
    </script>

     

    ***

    참고용 body 부분만 긁어가거나 참고하자

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title><tiles:getAsString name="title" ignore="true" /></title>
    </head>
    <body>
        <table border="1" cellpadding="2" cellspacing="2" align="center">
            <tr>
                <td height="20%" colspan="2">
                	<tiles:insert attribute="header" ignore="true" />
                </td>
            </tr>
            <tr>
                <td width="20%" height="250">
                	<tiles:insert attribute="menu" />
                </td>
                <td>
                	<tiles:insert attribute="body" />
                </td>
            </tr>
            <tr>
                <td height="20%" colspan="2">
                	<tiles:insert attribute="footer" />
                </td>
            </tr>
        </table>
    </body>
    </html>

    5. views에 test 할 jsp 하나를 만들고 컨트롤러에서 실행하자.

     

    //    body 부분
        @RequestMapping(value = "/test2")
        public String test2() {
    
            return "/test2.page";
        }

    이렇게 하면 된다. ㅇㅇ

     


    6. 결과

     

    짠 완성 ㅇㅇ 

     

     

    구성이야 입맛대로 꾸미면 되니 알아서 하자.

     


    참고사이트

     

    https://dzone.com/tutorials/java/struts/struts-example/struts-tiles-example-1.html

     

    Struts Tiles Tutorial - DZone

    Tiles is used to create reusable presentation components. With Tiles, we first define a base layout with different sections after that we define which jsp page...

    dzone.com

     

    728x90
    반응형

    'Frameworks > Tiles framework' 카테고리의 다른 글

    Tiles framework 기본 개념  (0) 2021.12.17
    댓글