Sitemesh単純応用
Web開発では、フロントエンドのページロジックが再利用されにくく、各ページにincludeで共通のヘッダ、css、js、footerを多重化すると、重複するコードが大量に現れ、無形に開発者の負担が増加する.sitemeshはfilterでrequestとresponseを切り取り、元のページに一定の装飾を加えます(ヘッダー、footer...)、そして結果をクライアントに返し,装飾された元のページはsitemeshの装飾を知らず,これも脱結合の目的を達成した.
SiteMeshはopensymphonyプロジェクトで、以下は公式サイトの紹介です.
SiteMesh is a web-page layout and decoration framework and web- application integration framework to aid in creating large sites consisting of many pages for which a consistent look/feel, navigation and layout scheme is required.
SiteMesh intercepts requests to any static or dynamically generated HTML page requested through the web-server, parses the page, obtains properties and data from the content and generates an appropriate final page with modifications to the original. This is based upon the well-known GangOfFour Decorator design pattern.
SiteMesh can also include entire HTML pages as a Panel within another page. This is similar to a Server-Side Include, except that the HTML document will be modified to create a visual window (using the document's Meta-data as an aid) within a page. Using this feature, Portal type web sites can be built very quickly and effectively. This is based upon the well-known GangOfFour Composite design pattern.
SiteMesh is built using Java 2 with Servlet, JSP and XML technologies. This makes it ideal for use with J2EE applications, however it can be integrated with server-side web architectures that are not Java based such as CGI (Perl/Python/C/C++/etc), PHP, Cold Fusion, etc...
SiteMesh is very extensible and is designed in a way in which it is easy to extend for custom needs.
WEB-INF下decorator.xmlファイル
defaultdirは装飾ページがあるフォルダです.
装飾ページjsp、主なページ構造レイアウト.
コード:
上のページ
以下のすべてのラベルで:Decorator Tags Page Tags
アクセサリーページの作成に用いる.元のコンテンツページからアクセラレータにアクセスするために用いる.
元のページ(パッケージされたページ)のheadラベルの内容(headラベル自体を除く)を挿入します.
元のページ(パッケージされたページ)のbodyラベルの内容を挿入します.
元のページ(パッケージされたページ)のtitleラベルの内容を挿入し、デフォルト値を追加することもできます.
修飾されたページ
簡単で、はっきりした構造です.
WEB.XML
装飾されたページにアクセスすると.効果は添付ファイル2のようである.
SiteMeshはopensymphonyプロジェクトで、以下は公式サイトの紹介です.
SiteMesh is a web-page layout and decoration framework and web- application integration framework to aid in creating large sites consisting of many pages for which a consistent look/feel, navigation and layout scheme is required.
SiteMesh intercepts requests to any static or dynamically generated HTML page requested through the web-server, parses the page, obtains properties and data from the content and generates an appropriate final page with modifications to the original. This is based upon the well-known GangOfFour Decorator design pattern.
SiteMesh can also include entire HTML pages as a Panel within another page. This is similar to a Server-Side Include, except that the HTML document will be modified to create a visual window (using the document's Meta-data as an aid) within a page. Using this feature, Portal type web sites can be built very quickly and effectively. This is based upon the well-known GangOfFour Composite design pattern.
SiteMesh is built using Java 2 with Servlet, JSP and XML technologies. This makes it ideal for use with J2EE applications, however it can be integrated with server-side web architectures that are not Java based such as CGI (Perl/Python/C/C++/etc), PHP, Cold Fusion, etc...
SiteMesh is very extensible and is designed in a way in which it is easy to extend for custom needs.
WEB-INF下decorator.xmlファイル
<decorators defaultdir="/WEB-INF/decorators">
<!-- -->
<excludes>
<pattern>/css/*</pattern>
<pattern>/js/*</pattern>
<pattern>/images/*</pattern>
<pattern>/dojo/*</pattern>
<pattern>/webwork/*</pattern>
<pattern>/login.jsp*</pattern>
<pattern>/register/*</pattern>
</excludes>
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
defaultdirは装飾ページがあるフォルダです.
装飾ページjsp、主なページ構造レイアウト.
コード:
<%@ page contentType="text/html;charset=utf-8" language="java"%>
[color=red]<%@ taglib uri="sitemesh-decorator" prefix="decorator"%>
<%@ taglib uri="sitemesh-page" prefix="page"%>[/color]
<%
String path = request.getContextPath();
%>
<HTML>
<HEAD>
<TITLE><decorator:title default="main page" /></TITLE>
<decorator:head />
<link rel="stylesheet" type="text/css"
href="<%=path%>/css/default.css" />
<link rel="stylesheet" type="text/css" href="<%=path%>/css/tab.css" />
<script language="javascript" src="<%=path%>/js/formControl.js"></script>
<script language="javascript" src="<%=path%>/js/changePage.js"></script>
<META http-equiv=ImageToolbar content=no>
</HEAD>
<BODY id=main>
<jsp:include flush="true" page="/commont/header.jsp"></jsp:include>
<DIV id=container>
<DIV id=content style="height:500px">
<decorator:body /> <DIV id=navigation>
<A accessKey=3 name=menu></A>
<H2 class=hide>
Navigation
</H2>
<UL id=menuroot>
<LI>
<A title="index" accessKey=1 href="<%=path%>/index.jsp">Index</A>
</LI>
<LI>
<A title="ListUser" accessKey=3
href="<%=path%>/user/listUsers.action">ListUser</A>
</LI>
<LI>
<A title="listWorkSum" accessKey=4
href="<%=path%>/worksum/listWorkSums.action">listWorkSum</A>
</LI>
<LI>
<A title="ListUser" accessKey=3
href="<%=path%>/clickstream/clickstreams.jsp">ClickStream</A>
</LI>
<LI>
<A title="monitor" accessKey=6
href="<%=path%>/monitor/jamonadmin.jsp">monitor</A>
</LI>
<LI>
<A title="workflow" accessKey=6
href="<%=path%>/workflow/default.jsp">workflow</A>
</LI>
<LI>
<A title="workflow" accessKey=4
href="<%=path%>/workflow/workflowLogin.action">workflowAction</A>
</LI>
<LI>
<A title="soap" accessKey=6
href="<%=path%>/soap/default.jsp">soap</A>
</LI>
<LI>
<A title="Logout" accessKey=5 href="<%=path%>/logout.jsp">Logout</A>
</LI>
</UL>
</DIV>
</DIV>
<DIV id=header>
Copyright © 2003-2005 cherubo All Rights Reserved
</DIV>
<jsp:include page="/commont/footer.jsp" />
</BODY>
</HTML>
上のページ
以下のすべてのラベルで:Decorator Tags Page Tags
アクセサリーページの作成に用いる.元のコンテンツページからアクセラレータにアクセスするために用いる.
元のページ(パッケージされたページ)のheadラベルの内容(headラベル自体を除く)を挿入します.
元のページ(パッケージされたページ)のbodyラベルの内容を挿入します.
元のページ(パッケージされたページ)のtitleラベルの内容を挿入し、デフォルト値を追加することもできます.
修飾されたページ
<html>
<head>
<title>main</title>
</head>
<body>
<div style="PADDING-TOP: 50px;">
<h1>
Welcome Into NewiKi System
</h1>
<h3>In Newiki System,You Can:</h3>
<h3>You can do Anything!</h3>
<h3>It's Life ,Live It!</h3>
<h3>You Are Freedom!</h3>
</div>
</body>
</html>
簡単で、はっきりした構造です.
WEB.XML
<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>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
装飾されたページにアクセスすると.効果は添付ファイル2のようである.