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ファイル
<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のようである.