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 도 피 했다.
프레임 워 크 가 팀 개발 에서 의 복잡 도 는 매우 큰 유연성 을 제공 하고 우리 에 게 이 구조 웹 시스템 페이지 를 통합 시 키 는 방안 도 제공 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.