總結本論文的系統架構,此系統使網頁容器 (Container) 更具模組化,並使 其成為一個提供網頁表達的網路服務。也因為經由網頁表達服務的提供,能夠 達到將重要的後端服務被隱藏,對於企業內部的整合或是與外部的合作都將能 提供另一個選擇的方案。此外,經由這樣的分散式架構,網頁開發的工程可以 被分散,且因為部份的網頁開發責任被交予後端服務的特定領域的開發者,可 以達到更適當的分工,提昇網頁的開發效率。而這些分散的網頁表達服務,就 跟後端服務一樣,經由以 XML 為基礎的溝通協定為介面來互相合作,最後把 完成的網頁內容傳送給網頁瀏覽器。
除了達到良好的分工之外,文中並提出了為了達到本論文的目標而需要應付 的議題。藉由提供這樣的網頁表達服務,可造就出表達層的商業市場,而可將後 端的服務包裝隱藏起來。
未來仍會在效能的考量上著手,在服務間的溝通上求取最佳化,並實作更多 的應用實例。並且將本論文的網頁表達架構能跟其他技術,如 JSP,Struts 等達 成整合,採用現有不同的樣版語言和熟悉的 MVC 開發架構,以利用已存在且被 普遍使用的技術與資源。
參 考 文 獻
[1] JSF. Java Server Faces. Sun corp. http://java.sun.com/j2ee/javaserverfaces/
[2] The Apache Software Foundation http://www.apache.org [3] W3C (World Wide Web Consortium) http://www.w3c.org
[4] Struts, The Apache Software Foundation http://jakarta.apache.org/struts/
[5] MVC (Model-View-Controller). J2EE Patterns. Java BluePrints. Sun corp.
http://java.sun.com/blueprints/patterns/MVC-detailed.html
[6] Chuck Cavaness. Programming Jakarta Struts O'Reilly November 1, 2002 [7] Cocoon, The Apache Cocoon Project. The Apache Software Foundation
http://cocoon.apache.org/
[8] Jakarta Velocity, The Apache Jakarta Project. The Apache Software Foundation http://jakarta.apache.org/velocity/index.html
[9] Jakarta Turbine, The Apache Jakarta Project. The Apache Software Foundation http://jakarta.apache.org/turbine/index.html
[10] Jakarta Tomcat, The Apache Jakarta Project. The Apache Software Foundation http://jakarta.apache.org/tomcat/
[11] JetSpeed, Apache Portals Project. The Apache Software Foundation http://www.xml.com/lpt/a/2000/05/15/jetspeed/index.html
[12] Portal. IBM WebSphere Application Server http://www-306.ibm.com/software/webservers/
[13] Style Sheet, World Wide Web Consortium http://www.w3.org/Style/
[14] Web Services, World Wide Web Consortium http://www.w3.org/2002/ws/
[15] Saimi, A.; Syomura, T.; Suganuma, H.; Ishida, I.; “Presentation Layer
Framework of web application systems with Server-side Java technology”, Computer Software and Applications Conference, IEEE 2000, pp 473 - 478
[16] Qingshan, L.; “Study of a Content Oriented Web architecture Model”, Computer Networks and Mobile Computing, International Conference, IEEE 2001. pp 3 – 7.
[17] Betsy Beier, Misha W. Vaughan “The Bull’s-Eye: a framework for Web Application User Interface Design Guidelines”, Proceedings of the conference on Human factors in computing systems. ACM press 2003. pp.489 – 496.
[18] Fernando Bellas. A Flexible Framework for Engineering “My” Portals, International World Wide Web Conference. Proceedings of the 13th conference on World Wide Web. ACM press 2004. pp.234 - 243
[19] Alan W. Brown. Large-scale, component-based development .Prentice Hall PTR May 30, 2000
[20] Ezra Ebner. “The Five-Module Framework for Internet Application
Development”, ACM Computing Surveys (CSUR) Volume 32 , Issue 1es. Article No.
40.
[21] Liu Chao, He Keqing, Liu Jie, Ying Shi. “Some Domain Patterns in Web Application Framework”, (27th Annual International Computer Software and Applications Conference). IEEE 2003. p674-678.
[22] Gustavo Rossi, Daniel Schwabe, Robson. “Designing Personalized Web Applications” WWW10th, ACM 2001. pp275 – 284.
[23] Udi Manber, Ash Patel, and John Robinson. “Experience with Personalization on YAHOO!”. Communications of the ACM. Volume 43 , Issue 8, 2000. pp35 - 39 [24] The JavaServer Pages Specification. Sun corp. http://java.sun.com/products/jsp [25] The Java Servlets Specification. Sun corp. http://java.sun.com/products/servlet [26] Tidwell, J. UI Patterns and Techniques: About Patterns. May, 2002. Available at:
http://time-tripper.com/uipatterns/about-patterns.html
[27] Douglas K. van Duyne, James A. Landay, Jason I. Hong, The Design of Sites, Addison Wesely, 1st edition (July 22, 2002)
[28] Sun ONE Application Server 7 Server Architecture Overview. Sun corp.
http://docs.sun.com/
附 錄 一
實作股票持有表網頁範例的改寫頁內容
<page type="rewrite">
<cntx name="user" default="dummyUser"/>
<next name="link1"/>
<service host="localhost" name="symbol"
path="symboltable" port ="1119"/>
<rule>
<if>
<symboltable>
<rw:var name="symbol"/>
<rw:list name="symbols"/>
</symboltable>
</if>
<table border="1">
<tr>
<th>Symbol</th>
<th>Name</th>
<th>#Shares</th>
<th>Cost</th>
</tr>
<rw:rw>
<tablerow>
<rw:var name="symbol"/>
</tablerow>
</rw:rw>
<rw:rw>
<tablerows>
<rw:list name="symbols"/>
</tablerows>
</rw:rw>
</table>
</rule>
<rule>
附 錄 二
Servlet 和表達服務的配置與介面範例 Configuration
Servlet:
<web-app>
<display-name> War name</display-name>
<description> War description </description>
<mappings>
<mapping name="portfolioServlet" url="/portfolioServlet"/>
<mapping name="chartServlet" url="/chartServlet"/>
<mapping name="testServlet" url="/testServlet"/>
</mappings>
<servlet>
<servlet-name>portfolioServlet </servlet-name>
<description>PM Service PageServlet </description>
<servlet-class> pm.PageServlet </servlet-class>
<init-param name="host" value="ares.cis.nctu.edu.tw" />
<init-param name="port" value="8080"/>
<init-param name="uri" value="pm/portfolioServlet"/>
<init-param name="hostCfg" value="webapps/pm/config/pm/portfolio.conf"/>
<init-param name="pmPath" value="pm"/>
</servlet>
<servlet>
<servlet-name>chartServlet</servlet-name>
<description> PM Service PageServlet </description>
<servlet-class> pm.PageServlet </servlet-class>
<init-param name="host" value="ares.cis.nctu.edu.tw"/>
<init-param name="port" value="8080"/>
<init-param name="uri" value="pm/chartServlet"/>
<init-param name="hostCfg" value="webapps/pm/config/pm/chart.conf"/>
<init-param name="pmPath" value="pm"/>
</servlet>
<servlet>
<servlet-name>testServlet</servlet-name>
<description> PM Service PageServlet </description>
<servlet-class> pm.PageServlet</servlet-class>
<init-param name="host" value="ares.cis.nctu.edu.tw"/>
<init-param name="port" value="8080"/>
<init-param name="uri" value="pm/chartServlet"/>
<init-param name="hostCfg" value="webapps/pm/config/pm/portfolio.conf"/>
<init-param name="pmPath" value="pm2"/>
</servlet>
</web-app>
PageSpaceModule:
<config>
<pagebase path="D://home/work/pm/portfolio/pagebase"/>
<db root="D://home/tomcat/Tomcat 5.0/webapps/ROOT/portfolio/db"
rootURL="http://ares.cis.nctu.edu.tw:8080/portfolio/db"/>
</config>
Interface
between Presentation Services:
z get Page Xml Content (Embedding)
query:
<getPageContent path="a/b/c"/>
z get Required Page Context (Linking)
query:
<getRequiredCntx path="a/b"/>
z import remote Presentation Service
query:
</dir>
</pagebase>
for GUI:
z get accompanied File (HTML, XSL files)
query:
<page type="html" path="abc" name="abc"/>
<page type="image" path="abc" name="abc"/>
<dir name="a">
<newPage path="a/b" type="composite"/> or <newPage path="a/b"
type="html" file="abc.htm"/>
return:
<newPageSuccess path="a/b"/> or <PageExists/>
<savePageOK/> or <savePageError/>
z save the file
query:
<saveFile path="a/b">
<![CDATA[ (File Content) ]]>
</saveFile>
return:
<saveFileOK/> or <saveFileError/>
z new a Dir
query:
<newDir path="c/d"/>
return:
<newDirOK/> or <DirExists/>
z delete a Page
query:
<deletePage path="c/d"/>
return:
<delete state="true"/> or <delete state="false"/>
z import
query:
<import host="localhost" port="1121" path="pm" destPath="a/b/c"/>
return:
<importOK/>