摘 要:動態網頁是指網頁能依據不同的情況做出動態的響應。在對基于模板的動態網頁設計問題進行分析的基礎上,使用JSP 這種動態網頁技術,并使用Struts模板標簽,說明模板技術是如何將網頁所要實現的功能和網頁中的圖形、文字等的布局進行分離的,并把模板庫思想動態網頁相結合,最終將頁面按照整體各部分的功能類型分類,總結歸納出多個不同的頁面模板,組成一種小型應用系統的常用模板庫。
關鍵詞:模板庫;動態網頁;JSP;Struts
中圖分類號:TP311.52文獻標識碼:B文章編號:1004373X(2008)2011603
Research and Realization of Dynamic Web Pages Based on Template Storage
ZHAO Yang,ZHANG Suning,CHEN Weiru
(School of Computer Science and Technology,Shenyang Institute of Chemical Technology,Shenyang,110142,China)
Abstract:Dynamic web page is that the web page can make dynamic response according to different situation.The design of dynamic web page,which is based on template is analyzed.Using JSP and Struts based on analysis,the problem about separation between the design of web page and the function is illustrated.Finally,the common page type is generalized,the common template storage,which is used in small application system is implemented.
Keywords:template storage;dynamic web page;JSP;Struts
1 引 言
目前,隨著各種應用軟件的開發趨于系統化,模板技術被廣泛地應用于各種應用系統的開發設計中,使用模板可以方便管理網絡應用程序,它事先搭建出一些常用的框架結構,系統設計人員可以根據自己的需要方便地從模板庫中選擇模板,而不用自己重新去搭建系統模型,節省了用戶的開發時間<sup>[1]</sup>。簡單的說,模板技術是一種使用相同的代碼來實現不同的函數和類的技術。通過定義模板函數和模板類,使不同的函數和類共享同一段代碼,從而提高開發效率。
動態網頁是指網頁能依據不同的情況做出動態的響應。模板技術應用在C++中的核心思想是通過將所要實現的函數或者類的功能,與這個函數或者類的數據類型分離,從而實現不同的函數和類共享同一段代碼;而將模板技術應用于動態網頁的設計時,主要是利用模板技術的這種將功能和數據類型分離的思想,把網頁所要實現的功能和網頁中的圖形、文字等的布局進行分離。因為動態網頁和C++的內涵是完全不同的,所以把模板技術應用于動態網頁中,讓網頁的程序員只需專注于內核的程序、算法的開發和調試,而網頁的界面則由網頁美術設計人員利用自己最熟悉的可視化編輯器設計頁面布局,無需擔心破壞任何嵌入到頁面的代碼<sup>[2]</sup>。在這種意義上實現系統設計人員工作上真正的合作與分工。
在本設計應用中,以JSP 這種動態網頁技術為例,并使用Struts模板標簽,說明模板技術是如何將網頁所要實現的功能和網頁中的圖形、文字等的布局進行分離的,并最終使頁面按照整體各個部分的功能類型分類,總結歸納出多個不同的頁面模板,組成一種小型應用系統的常用模板庫。
2 基于模板庫的動態網頁的設計研究
2.1 模板思想
通過模板可以創建很多結構相似的東西,模板幫助避免許多重復的工作,這對創建網絡應用程序是一件很方便的事情。
在大多數的網絡應用程序中,經常需更換的是內容。JSP很容易做到這一點,模板是一種JSP文件,它包含參數化了的內容。因為JSP默認提供一個include機制-<jsp:include>標簽。一個標準頁面可以通過改變include文件來改變它的內容。當需要改變的不僅是頁面的內容,還包括此頁面的布局時,用Java提供的布局管理機制可以幫人們更形象地理解這些問題。
當容器中的組件改變時,布局管理器會決定怎么樣將新的組件部署到容器中。此外,容器本身也可以作為其他容器的組件,從而實現嵌套。在一些簡單的情況下,JSP就可以作為一個網絡應用程序的模板,其功能則等價于布局管理器。模板隱藏了Web頁面布局的實現方法,換句話說,它隱藏了布局的法則。假如布局法則需要改變,則這些改變將會受限于模板。Web頁面通過實現這個模板來改變內容。
模板集成了布局法則,當要改變布局時,需要做的僅是改變模板。這些改變會引起相關頁面布局的改變,而不需要去改變這些頁面本身。在門戶應用程序中,這就意味著當大量頁面需要采用同樣布局時在時間上的節省。
2.2 基于模板庫的動態網頁設計
Struts是Jakarta-Apache論壇下的一個開源項目,它提供類集、標簽庫和一些能作為Web開發基礎的接口。網絡應用程序框架使用MVC(Model,View,Controller)模式,能簡化網絡站點的開發。Struts正是這樣的一個框架。
標簽庫的功能是將Java代碼從JSP頁面中移走,這意味這不懂Java的Web設計者也可以維護一個基于JSP的Web站點。
在Struts框架中,用3個模板標簽來實現模板:
Template標簽庫定義了處理頁面布局的標簽,它可以幫助用戶在擁有許多相同的情況下,只需改變模板,就可以使用所有頁面產生同樣的效果。
插入標簽InsertTag-<template:insert>:該標簽可以在應用程序的JSP頁面中插入動態模板,在容器/集合單元文件(collecting unit file)中使用。它定義了當前容器要使用的模板,類似于Java GUI中的container.setLayout(layout)方法。在它之后用<template:put>標簽定義組件。
放入標簽PutTag—<template:put>:它是<template:insert>標簽的子標簽,在容器/集合單元文件(collecting unit file)中使用。其定義了組成容器/集合單元的組件/內容,類似于Java GUI中的container.add(component)方法。每個PutTag標簽必須有一個相關組件的名稱。
獲得標簽GetTag—<template:get>:在作為模板的JSP文件中使用,它告訴模板由PutTag標簽定義的不同組件的名稱。類似于Java GUI中的layout.addLayoutComponent(componentName,component)方法。
從Struts 1.1開始,引入另一種模板機制—Tiles,現在它已經成為了模板機制的一個主要分支。Tiles機制定義與Tiles網絡站點中,并且與Struts定義的模板標簽兼容。事實上,Tiles是模板標簽的一個擴展集。Tiles允許傳遞參數,從而對容器有更多的控制權。當想要使模板和容器具有動態特性時變的非常有用。此外,Tiles與Struts動作組件(Struts action components)結合的更為緊密。但是,Tiles會使代碼變的更為復雜。
基于網站的系統開發中,頁面的設計基本上都遵循了一個模式,即包含導航、頁面、頁眉、頁腳和主體,如圖1所示。
而在整個的頁面中,導航、頁眉、頁腳一般不會改變,只有主體部分需要依照實際進行個性化的設置。這種一致性的布局為用戶瀏覽網站提供了更多的方便。
在理想狀態下頁面的代碼反應了高層抽象的組織結構。應使用一種通用模板來說明頁面結構,然后僅改變需要更改的內容,而這樣的結構體系就是復合視圖。
在復合視圖模式中,把對象看作是一種樹狀結構,父結點與子結點實現相同的接口,在J2EE設計模式中,視圖的應用是其被稱為復合視圖模式的一大原因。該模式的思想繼承了GOF的復合模式:把視圖(頁面)視為大量元素(“導航”、“頁眉”、“頁腳”和“主體”)的集合,每個元素是一個葉結點,而每個元素也可以是一個容器,包含更多的子元素。復合視圖模型中子元素在顯示時的排列構造稱為“布局”。在一個視圖中將子元素處理得更好的解決方案就是將視圖的布局從視圖中抽離出來,形成由一系列通用組件組成的模板。模板提供一組普通的組件,用于描述頁面高層抽象的組織結構,可靈活修改和添加組件,動態地改變整個視圖,而模板本身又具有可重用的性質[3]。
3 模板庫的設計實現
模板庫的設計采用上述基于模板的動態網頁設計思想,主要由Struts的Tiles框架實現,系統采用Tomcat5.0作為應用服務器,以Eclipse3.2作為前端開發工具,定義了模板頁面:Manager_template.jsp和Student_template.jsp來具體構架整個系統頁面,其主要是根據一般應用系統的管理員和用戶2種身份來設計的。模板Manager_template.jsp是管理員的頁面模板,Student_template.jsp是用戶的頁面模板。這兩個模板定義了2種布局方式,換句話說,它們定義了2種不同的布局法則。相應地,還可以定義其他的頁面布局模板,Others_template.jsp。
下邊列舉模板頁面Manager_template.jsp作為說明:Manager_template.jsp結構圖(見圖2)。

<%@ taglib uri=\"http://struts.apache.org/tags-bean\" prefix=\"bean\"%>
…//聲明將會用到的標簽庫
<html:html locale=\"true\">
<head><title>Home Page</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />
…
</head><style type=\"text/css\">
body {//定義主體格式
…
</style>
<body bgcolor=\"#F4FFE4\" >
…
<tr width=\"100%\"><td colspan=\"3\" height=\"120\" width=\"100%\">
<!--title-->//定義導航的位置等屬性<tiles:insert attribute=\"left\" flush=\"true\"></tiles:insert><!--title--></td></tr>…</div>
</body></html:html>
這里具體細節不一一列出,模板文件中定義了各個子頁面的擺放位置。
下面對Struts配置文件struts-config.xml進行說明:Struts的配置文件主要是對struts框架用到的各種元素進行配置,如actionform 類,action類,插件,轉發路徑等。這個配置文件也可以作為struts的控制文件,在這里主要說明Tiles框架的插件TilesPlugin的配置。
struts-config.xml
<form-beans>//actionform Bean的配置
<form-bean name=\"loginForm\" type=\"jsp.shopstore.struts.form.LoginForm\"/>…</form-beans>
<global-forwards>//全局轉發 </global-forwards>
<action-mappings>//設置通過模板組裝網頁的請求路徑
<action path=\"/index\" type=\"org.apache.struts.actions.ForwardAction\"…</action-mappings>
<plug-in className=\"org.apache.struts.tiles.TilesPlugin\">//對于template插件設置
<set-property property=\"definitions-config\" value=\"/WEB-INF/tiles-defs.xml\"/><set-property property=\"moduleAware\" value=\"true\"/> </plug-in>
</struts-config>
Tiles配置文件tiles-defs.xml說明:這個配置文件主要是給tiles框架提供一個網頁的詳細組成元素,通過definition的name找到模板頁,在從模板頁中tiles:insert的attribute屬性得到對應的名字,把對應的value加入模板頁中,形成要顯示的網頁。
tiles-defs.xml
<tiles-definitions>
<definition name=\"indexT\" path=\"/web/pages/templateC.jsp\">//模板文件位置
<put name=\"top\" value=\"/web/pages/client/top.jsp\"></put>>//模板包含文件
……</definition>…………
</tiles-definitions>
最終設計生成的小型系統模板庫如圖3所示,用戶可以根據自己的網頁設置安排,選擇相應的模板文件和網頁子元素,組成前端顯示網頁。

4 結 語
本文介紹基于模板庫的動態網頁的設計思想,并最終以JSP 這種動態網頁技術為例,并結合Struts模板,說明模板技術是如何將網頁所要實現的功能和網頁中的圖形、文字等的布局進行分離的,并最終將頁面按照功能類型進行分類,設計出一種簡單的小型應用系統的常用模板庫。
參考文獻
[1]李桂芳.淺談基于模板和標簽庫JSP的網頁自動生成的設計[J].黑龍江科技信息,2007(5):54-157.
[2]呂律,劉光昌.基于模板類的動態網頁的實現[J].計算機應用與軟件,2004,21(12):102-104.
[3]戎偉,張雙.Struts-Java流行服務器、框架、工具及整合應用[M].北京:人民郵電出版社,2006.
[4]曾雋芳,鄒益仁,葉正明.一種基于模板的系統開發方法[J].計算機工程與應用,2001,37(1):116-118.
[5]計磊,李里,周偉.J2EE-eclipse Struts Hibernate Spring整合應用案例[M].北京:人民郵電出版社,2006.
[6]瞿澤力,謝汶.JSP 網頁自動生成工具設計與實現[J].四川電力技術,2003(1):43-46.
[7]邵麗萍,紹光亞,張后揚.Java語言程序設計[M].北京:清華大學出版社,2005.
[8]韓世芬.基于JSP 網頁自動生成工具的開發[N].科技咨詢,2006(17):145.
[9]Cay S.Horstmann,Gary Cornell.Java 2核心技術卷I:基礎知識[M].北京:機械工業出版社,2006.
[10]Bruce Eckel.Java編程思想[M].北京:機械工業出版社,2005.
[11]Arnold Doray.Struts基礎教程[M].北京:人民郵電出版社,2007.
作者簡介 趙 洋 男,1974年出生,遼寧撫順人,講師,碩士。主要從事計算機軟件方面的研究。
張素寧 女,1984年出生,河北衡水人,在讀碩士研究生。主要從事計算機軟件方面的研究。
陳未如 男,1963年出生,遼寧鐵嶺人,教授,碩士。主要從事構件平臺技術與程序設計方法方面的研究。