본문 바로가기
BACK/Tool Setting

[전자정부프레임워크]tiles 설정 (spring)

by 코딩두통 2023. 1. 8.
728x90

나스에 해당파일 url  -> 이클립스_오라클_전자정부셋팅(포탈버전)-> tiles설정 위치

pom.xml 에 사용한것들은 5가지지만 공식문서에는 하나만 사용

<!-- 기본layout 설정 maven start-->

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.8</version>
</dependency>

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

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-api</artifactId>
    <version>3.0.8</version>
</dependency>

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

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-servlet</artifactId>
    <version>3.0.8</version>
</dependency>
<!-- 기본layout 설정 maven end-->

web.xml에 추가할 것

<!-- tiles 관련 설정 추가 시작 -->
<listener>
    <listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class>
</listener>

<servlet>
    <servlet-name>Tiles Dispatch Servlet</servlet-name>
    <servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Tiles Dispatch Servlet</servlet-name>
    <url-pattern>*.tiles</url-pattern>
</servlet-mapping>
<!-- tiles 관련 설정 추가 끝 -->

 

egovframework샘플밖으로 servlet.xml 과 tiles.xml 을 만들어줌

cms-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"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!-- 패키지 내 Controller, Service, Repository 클래스의 auto detect를 위한 mvc 설정 -->
    <context:component-scan base-package="egovframework">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>

    <!-- 패키지 내 Controller, Service, Repository 클래스의 auto detect를 위한 mvc 설정 -->
    <context:component-scan base-package="cms">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>

    <!-- 서블릿컨네이너상의 exception에 대한 오류 페이지를 연결하는 mvc 설정 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="cmm/error/egovError"/>
        <property name="exceptionMappings">
            <props>
                <prop key="org.springframework.dao.DataAccessException">cmm/error/dataAccessFailure</prop>
                <prop key="org.springframework.transaction.TransactionException">cmm/error/transactionFailure</prop>
                <prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">cmm/error/egovError</prop>
                <prop key="org.springframework.security.AccessDeniedException">cmm/error/accessDenied</prop>
            </props>
        </property>
    </bean>

    <!-- 화면처리용 JSP 파일명의  prefix, suffix 처리에 대한 mvc 설정  -->
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
          p:viewClass="org.springframework.web.servlet.view.JstlView"
          p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

    <!-- Annotation 을 사용하지 않는 경우에 대한 MVC 처리 설정 -->
    <mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator"/>
    <mvc:annotation-driven/>

</beans>

tiles.xml에 들어갈 내용

<!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>

    <!-- 1. 기본적인 템플릿을 생성한다.
       header, body, footer를 가진 teamplate.jsp라는 기본 레이아웃을 정의한다.
       이 정의된 레이아웃의 name속성인 base를 상속하여 추가적으로 여러 tiles들을 만들수 있다.

     -->
    <definition name="base" template="/WEB-INF/tiles/template.jsp">
        <put-attribute name="header" value="/WEB-INF/tiles/headerLayout.jsp" />
        <put-attribute name="body"   value="" />
        <put-attribute name="footer" value="/WEB-INF/tiles/footerLayout.jsp" />
    </definition>
    <!-- name하나 더 추가 (예: <definition name="base" ) -->


    <!-- 2. base를 상속받은것.
    즉, body부분만 설정한 경로대로 갈아 끼우고, 나머지 header, footer는 base의 형식대로 상속받아 오는 것이다. -->
    <definition name="*" extends="base">
        <put-attribute name="body" value="/WEB-INF/jsp/{1}.jsp" />
    </definition>

    <definition name="*/*" extends="base">
        <put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
    </definition>

    <definition name="*/*/*" extends="base">
        <put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" />
    </definition>


    <!-- 메뉴 미표시
       : 페이지 중 로그인페이지 같은건 보통 header, footer모두를 레이아웃으로 가지지 않을 것이다.
       다만, header에 js라이브러리등을 포함하고 있을 것이므로 이런 특정경로의 jsp파일들은 header만 상속받고 footer는 사용하지 않는 방식으로 할 수 있다.
     -->


<!--    <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>

 

index.jsp 에 추가

<script type="text/javaScript">document.location.href="<c:url value='/main/mainView.do'/>"</script>

해당 컨트롤러와 만들어 주면 됨

 


안돼서 다시 수정했음

 

 

cms-servlet.xml 에 추가

<!-- Tiles 설정 -->
<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="1" />
</bean>
<!-- Tiles Configurer -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/config/tiles.xml</value>
        </list>
    </property>
    <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory"/>
</bean>

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="2"
      p:viewClass="org.springframework.web.servlet.view.JstlView"
      p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

cms-servlet.xml 에서  tiles.xml 에 연결 시켜주고

이것들 다시 추가

 

<?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="MAIN.layout" template="/WEB-INF/tiles/template.jsp">
    <put-attribute name="header" value="/WEB-INF/tiles/headerLayout.jsp" />
    <put-attribute name="body"   value="" />
    <put-attribute name="footer" value="/WEB-INF/tiles/footerLayout.jsp" />
</definition>

<!-- name하나 더 추가 (예: <definition name="base" ) -->

<!-- 2. base를 상속받은것.
즉, body부분만 설정한 경로대로 갈아 끼우고, 나머지 header, footer는 base의 형식대로 상속받아 오는 것이다. -->
<definition name="MAIN.*" extends="MAIN.layout">
    <put-attribute name="body" value="/WEB-INF/jsp/{1}.jsp" />
</definition>

<definition name="MAIN.*/*" extends="MAIN.layout">
    <put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>

<definition name="MAIN.*/*/*" extends="MAIN.layout">
    <put-attribute name="body" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" />
</definition>

...

</tiles-definitions>

 

그리고 

컨트롤에서 MAIN. 으로 시작하면 template.jsp 여기로 가게끔 template="" 에 추가

그리고 컨트롤에서 주소 MAIN. 으로 jsp주소를 적어야 타일즈 적용이 됨

@Controller
@RequestMapping("main")
public class MainController {

    @RequestMapping("/mainView.do")
    public String headlayout(){

        return "MAIN.main/mainView";
    }
}

그리고 template.jsp 에서 

테그라이브러리 타일즈 추가하고 

여기에 tiles 네임지정한것들을 넣어주면 그 네임에 지정된주소 jsp를 가지고 저 자리에 들어감

728x90

댓글