웹이야기

전자정부표준프레임워크에 Tiles 적용 본문

전자정부표준프레임워크

전자정부표준프레임워크에 Tiles 적용

yeon.Biju 2020. 8. 19. 14:56

https://gbsb.tistory.com/114

 

스프링 Tiles 3 적용하기

스프링 Apache Tiles는 레이아웃 템플릿 엔진이다. 중복되는 태그를 사용하지 않아도 지정된 페이지 레이아웃에 따라 페이지 타일을 조합하여 완전한 페이지로 만들어준다. Tiles 말고도 Sitemesh도 같

gbsb.tistory.com

위 블로그를 가장 많이 참조하였다.

 

 

먼저 Controller 를 생성해서 타일즈를 적용할 URL을 하나 만들어두었다.

 

  1. @RequestMapping("/aaa/bbb/ccc.do")
  2.  
  3. public String sssss() throws Exception{
  4.    블라블라
  5.    return "abc/aaa/bbb/ccc";
  6. }

 

 

 

타일즈 적용하기

 

1. Tiles 라이브러리 추가

pom.xml 에 아래 내용을 추가한다.

mvnrepository 에서 버전을 확인하고 아래 버전을 선택하였다.

 

  1. <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-core -->
  2. <dependency>
  3. <groupId>org.apache.tiles</groupId>
  4. <artifactId>tiles-core</artifactId>
  5. <version>3.0.8</version>
  6. </dependency>
  7.  
  8. <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet -->
  9. <dependency>
  10. <groupId>org.apache.tiles</groupId>
  11. <artifactId>tiles-servlet</artifactId>
  12. <version>3.0.8</version>
  13. </dependency>
  14.  
  15. <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
  16. <dependency>
  17. <groupId>org.apache.tiles</groupId>
  18. <artifactId>tiles-jsp</artifactId>
  19. <version>3.0.8</version>
  20. </dependency>

 

2. egov-com-servlet.xml 수정

   - 아래와 같이 추가하였다.

   - tilesConfigurer 하위에 아래와 같이 여러개의 타일즈 정의 파일들을 사용할 수 있으며, 여기서는 일단 하나만 남겨놓고 주석처리한다. 잘 돌아가는지 확인하는 것이 목적이므로.
   - 아래 정의된 경로는 임의의 경로이므로 경로나 파일명 변경이 가능하다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 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/egovframework/tiles/common-def.xml</value>
<!-- <value>/WEB-INF/config/egovframework/tiles/tiles-def.xml</value> -->
</list>
</property>
</bean>
<!-- //Tiles 설정 -->
cs

 

   - 아래 내용중 p:order="1" 을 p:order="2" 로 변경한다.

 

1
2
3
4
5
<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"/>
 
 
cs

 

3. common-def.xml 파일 생성

   - egov-com-servlet.xml 에서 타일즈파일로 지정한 파일을 생성한다. 

   - 아래나오는 경로는 임의의 경로이다. 편한대로 정할 수 있을 것 같다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!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="base" template="/WEB-INF/jsp/_tiles/layout.jsp">
   <put-attribute name="header" value="/WEB-INF/jsp/_tiles/header.jsp" />
   <put-attribute name="left" value="/WEB-INF/jsp/_tiles/left.jsp" />
   <put-attribute name="footer" value="/WEB-INF/jsp/_tiles/footer.jsp" />
</definition>
 
<definition name="abc/*/*/*" extends="base">
<put-attribute name="content" value="/WEB-INF/jsp/egovframework/com/{1}/{2}/{3}.jsp" />
</definition>
 
</tiles-definitions>
cs

 

 

 

   - 기본적으로 /WEB-INF/jsp/_tiles/ 에 4개 layout.jsp, header.jsp, left.jsp, footer.jsp 를 만들어준다. 

   - layout.jsp 를 아래와 같이 만들어본다.

   - html 의 body 부분에 아래와 같이 넣어봤다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<header>
<tiles:insertAttribute name="header" />
</header>
<div>
  <aside>
      <tiles:insertAttribute name="left" />
   </aside>
   <div>
      <tiles:insertAttribute name="content" />
    </div>
</div>
<footer>
   <tiles:insertAttribute name="footer" />
</footer>
cs

 

   - tiles에 정의된 header, left, content, footer 를 불러온다고 볼 수 있을 것 같다.

 

   - content 부분은 common-def.xml 에서 base를 상속받아 따로 정의하고 있다. 

   - definition name="abc/*/*/*" 과 Controller 의 return 값 하고 비교를 해서 jsp 파일을 찾아서 layout.jsp 의 content 부분에 해당 jsp 의 내용을 보여준다.

 

4. 이제 URL로 접속을 해본다.

  - Controller에서 정의한 /aaa/bbb/ccc.do를 브라우저에 입력하면 잘 나와야 한다.

 

Comments