SiteMesh: Apache Tiles 보다 좋 은 웹 페이지 레이아웃, 장식 프레임 워 크

전송:
http://www.iocblog.net/static/2007/565.html
1. SiteMesh 프로젝트 소개
      OS (OpenSymphony) 의 SiteMesh 는 JSP 에서 페이지 레이아웃 과 장식 (layot and decoration) 을 실현 하 는 데 사용 된다.
의 프레임 워 크 구성 요 소 는 사이트 개발 자 들 이 페이지 의 동적 내용 과 정적 장식 외관 의 분 리 를 쉽게 실현 하도록 도와 줄 수 있다.
      Sitemesh 는 웹 페이지 레이아웃, 장식 및 기 존 웹 응용 과 통합 되 는 프레임 워 크 입 니 다.그것 은 우리 가 유 다 에 있 는 것 을 도 울 수 있다.
페이지 로 구 성 된 항목 에서 일치 하 는 페이지 레이아웃 과 외관 을 만 듭 니 다. 예 를 들 어 일치 하 는 네 비게 이 션 바, 일치 하 는 banner, 일치 하 는 저작권 등 입 니 다.
이것 은 jsp, php, asp 등 동적 인 내용 을 처리 할 수 있 을 뿐만 아니 라 정적 인 내용, 예 를 들 어 htm 의 내용 도 처리 할 수 있다.
그것 의 내용 도 당신 의 페이지 구조의 요구 에 부합 하도록 하 세 요.심지어 HTML 파일 을 include 처럼 판 넬 로 사용 할 수 있 습 니 다.
다른 파일 에 형식 을 삽입 합 니 다.이 모든 것 은 GOF 의 Decorator 모델 의 가장 생동감 있 는 실현 이다.자바 언어 로 이 루어 졌 음 에 도 불구 하고 다른 웹 애플 리 케 이 션 과 잘 통합 되 어 있 습 니 다.
      공식:http://www.opensymphony.com/sitemesh/
      다운로드 주소:http://www.opensymphony.com/sitemesh/download.action 현재 최신 버 전 은 Version 2.3 입 니 다.
2. 왜 SiteMesh 를 사용 합 니까?
    우리 팀 은 J2EE 애플 리 케 이 션 을 개발 할 때 비교적 골 치 아 픈 문제 에 자주 부 딪 힌 다.
         웹 페이지 는 서로 다른 사람 이 개발 하기 때문에 개 발 된 화면 은 보통 기괴 하고 프로젝트 관리자 들 을 웃 게 한다.
     실제로 어떤 항목 이 든 인터페이스의 통일 적 인 스타일 과 미관 을 요구한다. 스타일 이 통 일 된 이상 UI 층 에서 추출 할 수 있 는 것 이 많 을 것 이다.
공용 정적 또는 동적 부분;어떻게 이러한 통용 되 는 정적 또는 동적 UI 를 통합 합 니까?Apache Tiles 프레임 워 크 가 나 와 이 문 제 를 잘 해결 했다.
게다가 그 는 struts 와 완벽 하 게 통합 되 어 크 고 작은 프로젝트 들 이 그 를 UI 층 의 최 우선 프레임 워 크 로 만 들 었 다.
하지만:
   Tiles 는 확실히 부족 한 점 이 많 습 니 다. 다음 에 제 가 소개 하 겠 습 니 다. 본 고 는 Apache Tiles 프레임 워 크 를 제외 하고 우 리 는 더 좋 은 해석 이 있 습 니 다.
해결 방안, 그것 이 바로: SiteMesh;
본문
  
   웹 페이지 를 기반 으로 한 레이아웃, 장식 및 응용 통합 프레임 워 크 Sitemesh 를 소개 합 니 다. 응용 프로그램 에 일치 하 는 외관 을 만 드 는 데 도움 을 줄 수 있 습 니 다.
Apache Tiles 대신 잘 하기;
3. SiteMesh VS 아파 치 타일
     struts 를 사용 한 친 구 는 Apache Tiles 에 대해 낯 설 지 않 을 것 입 니 다. 저 는 struts 에서 tiles 프레임 의 조합 과 계승 을 소개 한 글 이 있 습 니 다.
지금 어떻게 보면 복잡 하 다.
     
      사용 측면 에서 볼 때 Tiles 는 Sitemesh 태그 < page: apply Decorator > 의 리 메 이 크 인 것 같 습 니 다.사실 sitemesh 가 제일 강해 요.
하나의 기능 은 sitemesh 가 decorator 모드 를 필터 에 사용 하 는 것 입 니 다.장식 되 어야 할 페이지 는 누구 에 게 장식 되 어야 할 지 모 르 기 때문에
phop, asp, CGI 등에 서 나 온 페이지 를 장식 할 수 있 습 니 다.몇 개의 장식 기 를 정의 할 수 있 습 니 다. 매개 변수 에 따라 동적 으로 장식 기 를 선택 할 수 있 습 니 다.
동적 인 외관 을 만들어 당신 의 요 구 를 만족 시 킵 니 다.그것 도 강력 한 기능 을 가 진 속성 체 계 를 가지 고 있 는데 기능 이 강하 고 유연 한 장식 기 를 구축 하 는 데 도움 을 줄 수 있다.
비교 해 보면 이 방면 에서 Tiles 는 많이 뒤떨어진다.
      개인 적 으로 팀 개발 에서 Apache Tiles 프레임 워 크 는 모든 사람 이 Apache Tiles 의 존 재 를 이해 하고 잘 알 아야 할 뿐만 아니 라
또한 모든 Tiles layot 템 플 릿 의 역할 을 잘 알 아야 합 니 다. 그렇지 않 으 면 템 플 릿 을 잘못 사용 하 는 경우 가 발생 할 수 있 습 니 다.그 밖 에 모든 사람 이 언급 되 었 다.
모든 WEB 페이지 는 파일 에 하나씩 설정 해 야 합 니 다. 귀 찮 을 뿐만 아니 라 오류 가 발생 할 확률 도 높 습 니 다.
      이상 의 모든 부족 은 SiteMesh 가 존재 하지 않 는 것 입 니 다.
4. SiteMesh 의 기본 원리
      서버 에 요청 한 후, 이 요청 에 sitemesh 장식 이 필요 하 다 면, 서버 는 요청 한 자원 을 설명 한 다음 설정 파일 에 따라
이 요청 에 사용 할 장식 기 를 얻 고 마지막 으로 요청 한 자원 을 장식 하여 결 과 를 클 라 이언 트 브 라 우 저 에 함께 되 돌려 줍 니 다.
5. SiteMesh 를 어떻게 사용 합 니까?
   여 기 는 struts 2 + spring 2 + hibenate 3 구조의 시스템 을 예 로 들 면
     1, 다운로드 SiteMesh
         다운로드 주소:http://www.opensymphony.com/sitemesh/download.action 현재 최신 버 전 은 Version 2.3 입 니 다.
     
       2. 프로젝트 에 SiteMesh 의 필요 한 jar 패키지 와 struts 2 - sitemesh - plugin - 2.0.8. jar 를 도입 합 니 다.
     
      3. 웹. xml 을 수정 하고 sitemesh 필 터 를 추가 합 니 다. 예제 코드 는 다음 과 같 습 니 다.
        
<!-- sitemesh   -->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>
            com.opensymphony.module.sitemesh.filter.PageFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    
        필터 의 위치 주의: struts 2 의 org. apache. struts 2. dispatcher. FilterDispatcher 필터 전에 org. apache. struts 2. dispatcher. action ContextCleanUp 필 터 를 사용 해 야 합 니 다. 그렇지 않 으 면 문제 가 발생 할 수 있 습 니 다.
      4. 다운로드 한 SiteMesh 패키지 에서 sitemesh. xml 를 찾 습 니 다. (\ sitemesh - 2.3 \ src \ \ example - webapp \ WEB - INF 디 렉 터 리 에 있 습 니 다)
        / WEB - INF 디 렉 터 리 에 복사 하기;
      5. sitemesh. xml 파일 에 property 노드 (아래) 가 있 습 니 다. 이 노드 는 decorators. xml 이 프로젝트 에 있 는 위 치 를 지정 하여 sitemesh. xml 가 그 를 찾 을 수 있 도록 합 니 다.
이 경로 에 따라 decorators. xml 파일 을 새로 만 듭 니 다. 물론 이 경 로 는 임의로 변경 할 수 있 습 니 다. property 노드 의 value 값 이 일치 하기 만 하면 됩 니 다.

<property name="decorators-file" value="/WEB-INF/sitemesh/decorators.xml"/>

   
     6. WebRoot 디 렉 터 리 에 decorators 디 렉 터 리 를 새로 만 들 고 이 디 렉 터 리 에 템 플 릿 jsp 를 새로 만 들 며 구체 적 인 프로젝트 스타일 에 따라 템 플 릿 을 편집 합 니 다.
다음 예제: 나의 템 플 릿: main. jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="decorator"
    uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
%>
<html>
    <head>
        <title><decorator:title default="kangxm test" />
        </title>
        <!--   Head             -->
        <decorator:head />
    </head>
    <body id="page-home">
        <div id="page-total">
            <div id="page-header">
                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                        <td>
                            <div class="topFunc">
                                    
                                |
                                  
                            </div>
                        </td>
                    </tr>
                </table>
            </div>
        </div>
        <!-- end header -->
        <!--  Menu Tag begin -->
        <div id="page-menu" style="margin-top: 8px; margin-bottom: 8px;">
            <div>
                     
            </div>
        </div>
        <!--  Menu Tag end -->
        <div id="page-content" class="clearfix">
            <center>
                <table width="100%" border="0" cellpadding="0" cellspacing="0">
                    <tr>
                        <td>
                            <decorator:body /><!--                   -->
                        </td>
                    </tr>
                </table>
            </center>
        </div>
        <!-- end content -->
        <div id="page-footer" class="clearfix">

                   
            <!-- end footer -->
        </div>
        <!-- end page -->
    </body>
</html>

이것 은 간단 한 템 플 릿 입 니 다. 페이지 의 머리 와 발 은 템 플 릿 의 정적 HTML 에 의 해 결 정 됩 니 다. 홈 페이지 영역 은 < decorator: body / > 탭 을 사용 합 니 다.
즉, 필터 에 들 어 갈 수 있 는 요청 이 생 성 된 페이지 는 기본적으로 템 플 릿 의 머리 와 발 을 추가 한 다음 에 페이지 자체 의 내용 은 자동 으로 < decorator: body / > 태그 가 있 는 위치 에 놓 입 니 다.
< decorator: title default = "Welcome to test sitemesh!" / >: 인 테 리 어 된 페이지 의 제목 을 읽 고 기본 제목 을 제시 합 니 다.
< decorator: head / >: 장 식 된 페이지 의 < head > 내용 읽 기;
< decorator: body / >: 장 식 된 페이지 의 < body > 내용 읽 기;
     7. 여기까지 말 하면 여러분 이 생각해 야 합 니 다. 만약 에 특정한 수요 요청 경로 가 필터 의 범위 안에 있 지만 템 플 릿 을 사용 하고 싶 지 않 으 면 어떻게 합 니까?
너 는 이렇게 도 리 를 따 지지 않 을 수 는 없 잖 아!
        안심 하 세 요. SiteMesh 는 이미 이 점 을 고려 했 습 니 다. 위 에서 다섯 번 째 로 말 한 decorators. xml 은 이때 부터 역할 을 했 습 니 다!
       
다음은 제 decorators. xml 입 니 다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
    <excludes>
        <pattern>/index.jsp*</pattern>
          <pattern>/login/*</pattern>
    </excludes>
    <decorator name="main" page="main.jsp">
        <pattern>/*</pattern>
    </decorator>
</decorators>

decorators. xml 에는 두 개의 주요 결점 이 있 습 니 다.
      decorator 노드 는 템 플 릿 의 위치 와 파일 이름 을 지정 하고 pattern 을 통 해 어떤 경 로 를 참조 할 지 지정 합 니 다.
      excludes 노드 는 템 플 릿 을 사용 하지 않 는 경 로 를 지정 합 니 다.
위의 코드 와 같이 / index. jsp 와 / login / 로 시작 하 는 요청 경 로 는 템 플 릿 을 사용 하지 않 습 니 다.
또한 주의해 야 할 것 은 decorators 노드 의 defaultdir 속성 은 템 플 릿 파일 에 저 장 된 디 렉 터 리 를 지정 합 니 다.
6. 실전 체험
     sitemesh 를 사용 하 는 프로젝트 를 방금 끝 냈 습 니 다. 예전 에 tiles 프레임 워 크 를 사용 한 것 에 비해 가장 큰 느낌 은 간단 하고 시스템 디자인 단계 입 니 다.
템 플 릿 파일 과 sitemesh 프레임 워 크 를 만 듭 니 다!어떤 페이지 가 프레임 워 크 를 사용 하고 사용 하지 않 는 지 모두 UI Demo 를 통 해 빠르게 정의 되 었 습 니 다.
다음 개발 에서 모든 구성원 들 은 sitemesh 의 존 재 를 거의 느끼 지 못 하고 각자 자신의 모듈 기능 실현 에 만 관심 을 가진다.
7. 총화
    sitemesh 를 사용 하 는 것 은 페이지 구조 문제 뿐만 아니 라 그 등장 으로 인해 우 리 는 바 텀 업무 에 관심 을 가 질 시간 이 더 많 습 니 다.
전체 페이지 의 스타일 과 구조 가 아니 라 논리 적 입 니 다.그것 은 우리 로 하여 금 대량의 include 방식 으로 페이지 를 재 활용 하 는 난처 한 국면 에서 벗 어 나 게 하고 tiles 도 피 했다.
프레임 워 크 가 팀 개발 에서 의 복잡 도 는 매우 큰 유연성 을 제공 하고 우리 에 게 이 구조 웹 시스템 페이지 를 통합 시 키 는 방안 도 제공 했다.

좋은 웹페이지 즐겨찾기