JSP

[ JSP ] Tiles 2 사용하여 화면 Frame 분리하기

정윤재 2010. 11. 23. 16:07




보통 이런 식으로 웹 화면을 나눠서 쓸 것이다.

보통 body에 들어갈 페이지만 바뀌는데...

효과적으로 쓰는 프레임 관련 프레임워크가 있다.

tiles 2 라는 스트러츠쪽 소속 프로젝트이다. (처음에는 소속이었으나 지금은 분리되어 독립적이다.

프레임워크를 쓰던 안쓰던 쓸수 있단 얘기다)

위와 같은 화면은 이미 tiles 2 를 사용하여 만든 내용인데...

돌아갈 수 있는 소스를 보겠다.

/WEB-INF/web.xml 파일 내용

 



<?xml version="1.0" encoding="UTF-8"?>
<web-app id="rsms_web" 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_3.xsd"
    version="2.3">

 <display-name>testWeb</display-name>

 <servlet>
     <servlet-name>tiles</servlet-name>
     <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
     <init-param>
         <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
         <param-value>/WEB-INF/tiles-defs.xml</param-value>
     </init-param>
     <load-on-startup>2</load-on-startup>
 </servlet>
 
 <servlet>
  <servlet-name>tiles-dispatcher</servlet-name>
  <servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>tiles-dispatcher</servlet-name>
  <url-pattern>*.tiles</url-pattern>
 </servlet-mapping>
</web-app>


uri-pattern 을 *.tiles 로 설정하여 아래 tiles-defs.xml 에서 설정한 definition 페이지들을
웹브라우저에서 definition 태그의 name 어트리뷰트를 사용하여..
ip:port/context root/hello.tiles 형식으로 접근 할 수 있다. 

 /WEB-INF/tiles-defs.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>
 <definition name="hello" template="/jsp/layout.jsp">
  <put-attribute name="title" value="첫번째 페이지"></put-attribute>
  <put-attribute name="header" value="/jsp/header.jsp"></put-attribute>
  <put-attribute name="menu" value="/jsp/menu.jsp"></put-attribute>
  <put-attribute name="body" value="/jsp/body.jsp"></put-attribute>
  <put-attribute name="footer" value="/jsp/footer.jsp"></put-attribute>
 </definition>
</tiles-definitions>


여기서는 쓰지 않았지만 이 방식의 좋은 점은...

body 만 바꾸고 싶다면 

 <definition name="hello2" template="/jsp/layout.jsp" extends="hello">
  <put-attribute name="title" value="두번째 페이지"></put-attribute>
  <put-attribute name="body" value="/jsp/body2.jsp"></put-attribute>
 </definition>

요런식으로 자바의 extends 흉내를 내서 코드를 확 줄일 수 있다는 데 있다.

각각의 jsp 파일들을 원하는 내용을 쓰면 되기 때문에 따로 올려놓진 않는다.

jar 파일들은 첨부되어 있다.

commons-beanutils.jar

commons-digester.jar

commons-logging.jar

tiles-api-2.1.2.jar

tiles-core-2.1.2.jar

tiles-jsp-2.1.2.jar

tiles-servlet-2.1.2.jar