Java2EE Framework/sitemesh 2.4

SiteMesh 2.4 프레임워크 적용

본클라쓰 2010. 6. 1. 21:22

 

 공통된 레이아웃(Layout)를 이용하여 개발할 때 레이아웃에 사용하는 것에 struts-Tiles나 velocity 등이 있다. 이것보다 더 사용이 간단한 레이아웃 프레임 워크가 Sitemesh 프레임워크이다.

 

 Sitemesh 프레임워크는 opensymphony 진영에서 만든 오픈 소스 웹 페이지 레이아웃 프레임워크이다. 웹 애플리케이션의 레이아웃을 지원하는 프레임워크로 Struts-Tiles 가 있지만 타일즈는 하나의 화면을 추가할 때마다 추가적으로 설정을 지정해야 하는 불편함이 있다. Sitemesh 프레임워크는 URl 매핑을 통한 레이아웃이 가능하며 사용법이 단순하며 화면이 추가되어도 추가적인 설정이 필요없다.

 

 SiteMesh는 Tiles와 달리 완전한 HTML 코드로부터 레이아웃이 적용된 새로운 HTML 코드를 생성하는 방식으로 동작한다. 데코레이터에 전달되는 HTML 페이지는 <html>, <head>, <body> 등을 포함한 완전한 HTML 페이지이고, 데코레이터는 레이아웃 정보를 담고 있는 JSP 페이지로부터, 앞서 받은 HTML 페이지에 저장된 메타정보와 <body> 태그에 포함된 내용을 추출한 뒤, 레이아웃에 알맞은 위치에 추출한 내용을 삽입하여 최종 결과를 생성해 낸다.

 

다운로드 사이트)

 

 sitemesh 프레임워크를 사용하기 위해서는 sitemesh.jar 파일을 웹 애플리케이션 /WEB-INF/lib 디렉토리아 복사한다. 그 후 sitemesh 를 사용하기 위해 web.xml 파일에 등록한다.

 

<filter>
     <filter-name>sitemesh</filter-name>
     <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
 </filter>
 <filter-mapping>
     <filter-name>sitemesh</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>

 

 위와 같이 등록하면 모든 요청을 SiteMesh 필터가 적용된다. SiteMesh필터는 요청 URL과 매핑되는 데코레이터를 검색한 뒤, 데코레이터가 발견될 경우 HTML에 매칭되는 데코레이터를 적용한다. 만약, URL이 없다면 데코레이터는 적용되지 않고 그냥 페이지만 출력한다.

 

 web.xml 에 SiteMesh 프레임워크를 등록한 후 SiteMesh 설정 파일을 작성한다. 기본위치와 파일 명은 /WEB-INF/sitemesh.xml 이다.

 

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


    <property name="decorators-file" value="/WEB-INF/config/decorators.xml" />
    <excludes file="${decorators-file}" />

 

    <page-parsers>
        <parser content-type="text/html"
            class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
        <parser content-type="text/html;charset=utf-8"
            class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
    </page-parsers>

 

    <decorator-mappers>
        <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
            <param name="config" value="${decorators-file}" />
        </mapper>
    </decorator-mappers>
   
</sitemesh>

 

이 설정 파일에 데코레이터 설정 파일의 위치를 지정한다. 그 후 해당 위치에 데코레이터 설정 파일을 작성한다.

 

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

 

<decorators defaultdir="/WEB-INF/jsp/">
    <excludes>
        <pattern>/main</pattern>
    </excludes>
 
<!-- sitemesh의 URL 패턴은 서블릿 패턴에 맞춰서 돌아감(web.xml 서블릿 패턴에 따라 처리됨) --> 
    <decorator name="content" page="content/template.jsp">
        <pattern>/content</pattern>
        <pattern>/service</pattern>
    </decorator>


</decorators>

 

이 때 서블릿 매핑시 주의할 점이 있다. SiteMesh는 서블릿 매핑 경로를 따른다. 다음과 같이 서블릿 매핑을 설정했다면

 

<servlet-mapping>

    <servlet-name>content</servlet-name>

    <url-pattern>/service/*</url-pattern> 

</servlet-mapping> 

 

URL 매핑에서 다음과 같이 지정해야 한다.

<decorator name="content" page="content.jsp">

    <pattern>/service</pattern>

</decorator> 

 

 서블릿 매핑을 '/service/*' 로 했다면, /service/content 도 있을 수 있고, /service/movie 도 있을 수 있으니 데코레이터 매핑을 /service/content 로 하고 싶지만 안된다. 데코레이터의 매핑은 무조건 서블릿 매핑을 따라야 한다. 이 문제를 해결한 필터 클래스가 있긴 있다.