明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

當(dāng)前流行的J2EE WEB應(yīng)用架構(gòu)區(qū)分(轉(zhuǎn))

[摘要]1. 架構(gòu)概述J2EE體系包括java server pages(JSP) ,java SERVLET, enterprise bean,WEB service等技術(shù)。這些技術(shù)的出現(xiàn)給電子商務(wù)時(shí)代的...
1. 架構(gòu)概述

J2EE體系包括java server pages(JSP) ,java SERVLET, enterprise bean,WEB service等技術(shù)。這些技術(shù)的出現(xiàn)給電子商務(wù)時(shí)代的WEB應(yīng)用程序的開發(fā)提供了一個(gè)非常有競(jìng)爭(zhēng)力的選擇。怎樣把這些技術(shù)組合起來(lái)形成一個(gè)適應(yīng)項(xiàng)目需要的穩(wěn)定架構(gòu)是項(xiàng)目開發(fā)過(guò)程中一個(gè)非常重要的步驟。完成這個(gè)步驟可以形成一個(gè)主要里程碑基線。形成這個(gè)基線有很多好處:

各種因數(shù)初步確定
為了形成架構(gòu)基線,架構(gòu)設(shè)計(jì)師要對(duì)平臺(tái)(體系)中的技術(shù)進(jìn)行篩選,各種利弊的權(quán)衡。往往架構(gòu)設(shè)計(jì)師在這個(gè)過(guò)程中要閱讀大量的技術(shù)資料,聽取項(xiàng)目組成員的建議,考慮領(lǐng)域?qū)<业男枨螅紤]贊助商成本(包括開發(fā)成本和運(yùn)行維護(hù)成本)限額。一旦架構(gòu)設(shè)計(jì)經(jīng)過(guò)評(píng)審,這些因數(shù)初步地就有了在整個(gè)項(xiàng)目過(guò)程中的對(duì)項(xiàng)目起多大作用的定位。
定向技術(shù)培訓(xùn)
一旦架構(gòu)師設(shè)計(jì)的架構(gòu)得到了批準(zhǔn)形成了基線,項(xiàng)目開發(fā)和運(yùn)行所采用的技術(shù)基本確定下來(lái)了。眾多的項(xiàng)目經(jīng)理都會(huì)對(duì)預(yù)備項(xiàng)目組成員的技術(shù)功底感到擔(dān)心;他們需要培訓(xùn)部門提供培訓(xùn),但就架構(gòu)師面對(duì)的技術(shù)海洋,項(xiàng)目經(jīng)理根本就提不出明確的技術(shù)培訓(xùn)需求。怎不能夠?qū)w系中所有技術(shù)都進(jìn)行培訓(xùn)吧!有了架構(gòu)里程碑基線,項(xiàng)目經(jīng)理能確定這個(gè)項(xiàng)目開發(fā)會(huì)采用什么技術(shù),這是提出培訓(xùn)需求應(yīng)該是最精確的。不過(guò)在實(shí)際項(xiàng)目開發(fā)中,技術(shù)培訓(xùn)可以在基線確定之前與架構(gòu)設(shè)計(jì)并發(fā)進(jìn)行。
角色分工
有了一個(gè)好的架構(gòu)藍(lán)圖,我們就能準(zhǔn)確劃分工作。如網(wǎng)頁(yè)設(shè)計(jì),JSP 標(biāo)簽處理類設(shè)計(jì),SERVLET 設(shè)計(jì),session bean設(shè)計(jì),還有各種實(shí)現(xiàn)。這些任務(wù)在架構(gòu)藍(lán)圖上都可以清晰地標(biāo)出位置,使得項(xiàng)目組成員能很好地定位自己的任務(wù)。一個(gè)好的架構(gòu)藍(lán)圖同時(shí)也能規(guī)范化任務(wù),能很好地把任務(wù)劃分為幾類,在同一類中的任務(wù)的工作量和性質(zhì)相同或相似。這樣工作量估計(jì)起來(lái)有一個(gè)非常好的基礎(chǔ)。
運(yùn)行維護(hù)
前面說(shuō)過(guò)各個(gè)任務(wù)在架構(gòu)圖上都有比較好的定位。任何人能借助它很快地熟悉整個(gè)項(xiàng)目的運(yùn)行情況,錯(cuò)誤出現(xiàn)時(shí)能比較快速地定位錯(cuò)誤點(diǎn)。另外,有了清晰的架構(gòu)圖,項(xiàng)目版本管理也有很好的版本樹軀干。
擴(kuò)展性
架構(gòu)猶如一顆參天大樹的軀干,只要軀干根系牢,樹干粗,長(zhǎng)一些旁支,加一些樹葉輕而易舉無(wú)疑。同樣,有一個(gè)穩(wěn)定的經(jīng)得起考驗(yàn)的架構(gòu),增加一兩個(gè)業(yè)務(wù)組件是非?焖俸腿菀椎摹
大家都知道這些好處,一心想形成一個(gè)這樣的J2EE應(yīng)用程序架構(gòu)(就像在windows平臺(tái)中的MFC)。在這個(gè)路程中經(jīng)歷了兩個(gè)大的階段:

1.1. 模型1

模型1其實(shí)不是一個(gè)什么穩(wěn)定架構(gòu),甚至談不上形成了架構(gòu)。模型1的基礎(chǔ)是JSP文件。它從HTTP的請(qǐng)求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,處理HTTP會(huì)話,最后生成HTTP文檔。一系列這樣的JSP文件形成一個(gè)完整的模型1應(yīng)用,當(dāng)然可能會(huì)有其他輔助類或文件。早期的ASP 和 PHP 技術(shù)就屬于這個(gè)情況。

總的看來(lái),這個(gè)模型的好處是簡(jiǎn)單,但是它把業(yè)務(wù)邏輯和表現(xiàn)混在一塊,對(duì)大應(yīng)用來(lái)說(shuō),這個(gè)缺點(diǎn)是令人容忍不了的。

1.2. 模型2

在經(jīng)過(guò)一番實(shí)踐,并廣泛借鑒和總結(jié)經(jīng)驗(yàn)教訓(xùn)之后,J2EE應(yīng)用程序終于迎來(lái)了MVC(模型-視圖-控制)模式。MVC模式并不是J2EE行業(yè)人士標(biāo)新立異的,所以前面我談到廣發(fā)借鑒。MVC的核心就是做到三層甚至多層的松散耦合。這對(duì)基于組件的,所覆蓋的技術(shù)不斷膨脹的J2EE體系來(lái)說(shuō)真是福音和救星。

它在瀏覽器(本文對(duì)客戶代理都稱瀏覽器)和JSP或SERVLET之間插入一個(gè)控制組件。這個(gè)控制組件集中了處理瀏覽器發(fā)過(guò)來(lái)的HTTP請(qǐng)求的分發(fā)邏輯,也就是說(shuō),它會(huì)根據(jù)HTTP請(qǐng)求的URL,輸入?yún)?shù),和目前應(yīng)用的內(nèi)部狀態(tài),把請(qǐng)求分發(fā)給相應(yīng)的WEB 層的JSP 或SERVLET。另外它也負(fù)責(zé)選擇下一個(gè)視圖(在J2EE中,JSP,SERVLET會(huì)生成回給瀏覽器的html從而形成視圖)。集中的控制組件也有利于安全驗(yàn)證,日志紀(jì)錄,有時(shí)也封裝請(qǐng)求數(shù)據(jù)給下面的WEB tier層。這一套邏輯的實(shí)現(xiàn)形成了一個(gè)像MFC的應(yīng)用框架,位置如圖:




1.3. 多層應(yīng)用

下圖為J2EE體系中典型的多層應(yīng)用模型。

Client tier客戶層
一般為瀏覽器或其他應(yīng)用?蛻魧悠毡榈刂С諬TTP協(xié)議,也稱客戶代理。
WEB tier WEB應(yīng)用層
在J2EE中,這一層由WEB 容器運(yùn)行,它包括JSP, SERVLET等WEB部件。
EJB tier 企業(yè)組件層
企業(yè)組件層由EJB容器運(yùn)行,支持EJB, JMS, JTA 等服務(wù)和技術(shù)。
EIS tier 企業(yè)信息系統(tǒng)層
企業(yè)信息系統(tǒng)包含企業(yè)內(nèi)傳統(tǒng)信息系統(tǒng)如財(cái)務(wù),CRM等,特點(diǎn)是有數(shù)據(jù)庫(kù)系統(tǒng)的支持。



應(yīng)用框架目前主要集中在WEB層,旨在規(guī)范這一層軟件的開發(fā)。其實(shí)企業(yè)組件層也可以實(shí)現(xiàn)這個(gè)模型,但目前主要以設(shè)計(jì)模式的形式存在。而且有些框架可以擴(kuò)充,有了企業(yè)組件層組件的參與,框架會(huì)顯得更緊湊,更自然,效率會(huì)更高。

2. 候選方案

目前,實(shí)現(xiàn)模型2的框架也在不斷的涌現(xiàn),下面列出比較有名的框架。

2.1. Apache Struts

Struts是一個(gè)免費(fèi)的開源的WEB層的應(yīng)用框架,apache軟件基金致力于struts的開發(fā)。Struts具是高可配置的性,和有一個(gè)不斷增長(zhǎng)的特性列表。一個(gè)前端控制組件,一系列動(dòng)作類,動(dòng)作映射,處理XML的實(shí)用工具類,服務(wù)器端java bean 的自動(dòng)填充,支持驗(yàn)證的WEB 表單,國(guó)際化支持,生成HTML,實(shí)現(xiàn)表現(xiàn)邏輯和模版組成了struts的靈魂。

2.1.1. Struts和MVC

模型2的目的和MVC的目的是一樣的,所以模型2基本可以和MVC等同起來(lái)。下圖體現(xiàn)了Struts的運(yùn)作機(jī)理:




2.1.1.1. 控制

如圖所示,它的主要部件是一個(gè)通用的控制組件。這個(gè)控制組件提供了處理所有發(fā)送到Struts 的HTTP請(qǐng)求的入口點(diǎn)。它截取和分發(fā)這些請(qǐng)求到相應(yīng)的動(dòng)作類(這些動(dòng)作類都是Action類的子類)。另外控制組件也負(fù)責(zé)用相應(yīng)的請(qǐng)求參數(shù)填充 From bean,并傳給動(dòng)作類。動(dòng)作類實(shí)現(xiàn)核心商業(yè)邏輯,它可以通過(guò)訪問(wèn)java bean 或調(diào)用EJB。最后動(dòng)作類把控制權(quán)傳給后續(xù)的JSP 文件,后者生成視圖。所有這些控制邏輯利用一個(gè)叫struts-config.xml文件來(lái)配置。

2.1.1.2. 模型

模型以一個(gè)或幾個(gè)java bean的形式存在。這些bean分為三種:

Form beans(表單Beans)
它保存了HTTP post請(qǐng)求傳來(lái)的數(shù)據(jù),在Struts里,所有的Form beans都是 ActionFrom 類的子類。
業(yè)務(wù)邏輯beans
專門用來(lái)處理業(yè)務(wù)邏輯。
系統(tǒng)狀態(tài)beans
它保存了跨越多個(gè)HTTP 請(qǐng)求的單個(gè)客戶的會(huì)話信息,還有系統(tǒng)狀態(tài)。
2.1.1.3. 視圖

控制組件續(xù)傳HTTP請(qǐng)求給實(shí)現(xiàn)了視圖的JSP文件。JSP能訪問(wèn)beans 并生成結(jié)果文檔反饋到客戶。Struts提供JSP 標(biāo)簽庫(kù): Html,Bean,Logic,Template等來(lái)達(dá)到這個(gè)目的,并有利于分開表現(xiàn)邏輯和程序邏輯。

2.1.2. Struts的細(xì)節(jié)分析

2.1.2.1. 視圖-控制-模型

用戶發(fā)出一個(gè)*.do的HTTP請(qǐng)求,控制組件接收到這個(gè)請(qǐng)求后,查找針對(duì)這個(gè)請(qǐng)求的動(dòng)作映射,再檢查是否曾創(chuàng)建過(guò)相應(yīng)的動(dòng)作對(duì)象(action實(shí)例),如果沒(méi)有則調(diào)用actionmapping生成一個(gè)動(dòng)作對(duì)象,控制組件會(huì)保存這個(gè)動(dòng)作對(duì)象供以后使用。接著調(diào)用actionmapping的方法得到actionForm對(duì)象。之后把a(bǔ)ctionForm作為參數(shù)傳給動(dòng)作對(duì)象的perform方法,這個(gè)方法結(jié)束之后會(huì)返回給控制組件一個(gè) actionforward對(duì)象?刂平M件接著從這個(gè)對(duì)象中獲取下一個(gè)視圖的路徑和重定向?qū)傩。如果為重定向則調(diào)用HTTPSERVLETREPONSE的方法來(lái)顯示下一個(gè)視圖,否則相繼調(diào)用requestdispatcher, SERVLETcontext的方法續(xù)傳HTTP請(qǐng)求到下一個(gè)視圖。

當(dāng)動(dòng)作對(duì)象運(yùn)行perform方法時(shí),可能出現(xiàn)錯(cuò)誤信息。動(dòng)作對(duì)象可以保存這些錯(cuò)誤信息到一個(gè)error對(duì)象中,接著調(diào)用自身的saveerrors方法把這個(gè)錯(cuò)誤保存到request對(duì)象的屬性中。接著動(dòng)作對(duì)象調(diào)用actionmapping對(duì)象的getInput方法從動(dòng)作映射中獲取input參數(shù),也就是產(chǎn)生輸入的視圖,并以這個(gè)input為參數(shù)生成一個(gè)actionforward對(duì)象返回。這個(gè)input參數(shù)的JSP中一般有HTTP:errors定制標(biāo)簽讀取這些錯(cuò)誤信息并顯示在頁(yè)面上。

下面是一個(gè)logon.JSP 的代碼實(shí)例:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<html:html locale="true">
<head>
<title><bean:message key="logon.title"/></title>
<html:base/>
</head>
<body bgcolor="white">

<html:errors/> <!--如果出現(xiàn)錯(cuò)誤會(huì)顯示在這里-->

<html:form action="/logon" focus="username">
<table border="0" width="100%">

<tr>
<th align="right">
<bean:message key="prompt.username"/>
</th>
<td align="left">
<html:text property="username" size="16" maxlength="16"/>
</td>
</tr>

<tr>
<th align="right">
<bean:message key="prompt.password"/>
</th>
<td align="left">
<html:password property="password" size="16" maxlength="16"
redisplay="false"/>
</td>
</tr>

<tr>
<td align="right">
<html:submit property="submit" value="Submit"/>
</td>
<td align="left">
<html:reset/>
</td>
</tr>






2.1.2.2. 模型到視圖

模型到視圖指視圖在顯示之前裝載系統(tǒng)數(shù)據(jù)到視圖的過(guò)程。系統(tǒng)數(shù)據(jù)一般為模型內(nèi)java bean的信息。示意圖表現(xiàn)了由控制組件forward過(guò)來(lái)的有html:form定制標(biāo)簽的JSP 的處理邏輯。

html:form定制標(biāo)簽處理對(duì)象從application scope(通過(guò)查詢SERVLETCONTEXT對(duì)象的屬性來(lái)實(shí)現(xiàn))獲取先前由控制組件actionSERVLET放在那里的動(dòng)作映射等對(duì)象,由html:form 的action屬性查得actionform名字、類型和范圍等信息,在相應(yīng)的范圍內(nèi)查找actionform,如果有則利用它的信息填充html form表單[實(shí)際填充動(dòng)作在嵌套的html:text等定制標(biāo)簽的處理對(duì)象中]。否則在相應(yīng)范圍內(nèi)創(chuàng)建一個(gè)actionform 對(duì)象。

2.1.3. 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

一些開發(fā)商開始采用并推廣這個(gè)框架
作為開源項(xiàng)目,有很多先進(jìn)的實(shí)現(xiàn)思想
對(duì)大型的應(yīng)用支持的較好
有集中的網(wǎng)頁(yè)導(dǎo)航定義
缺點(diǎn):

不是業(yè)屆標(biāo)準(zhǔn)
對(duì)開發(fā)工具的支持不夠
復(fù)雜的taglib,需要比較長(zhǎng)的時(shí)間來(lái)掌握
html form 和 actionform的搭配比較封閉,但這也是它的精華所在。
修改建議
把a(bǔ)ctionform屬性的設(shè)置器和訪問(wèn)器修改成讀取或生成xml文檔的方法,然后 html form和actionform之間用xml文檔進(jìn)行數(shù)據(jù)交換,使之松散耦合,適應(yīng)數(shù)據(jù)結(jié)構(gòu)易變化的應(yīng)用。




2.2. JATO

JATO應(yīng)用程序框架是iPlanet 應(yīng)用程序框架的舊名。它是一個(gè)成熟的、強(qiáng)大的,基于J2EE標(biāo)準(zhǔn)的面向于開發(fā)WEB應(yīng)用程序的應(yīng)用框架。結(jié)合了顯示字段、應(yīng)用程序事件、組件層次和以頁(yè)面為中心的開發(fā)方法、以及MVC和服務(wù)到工作者service-to-workers的設(shè)計(jì)模式等概念。JATO可適用于中、大、超大規(guī)模的WEB應(yīng)用。但是它也不是一個(gè)企業(yè)層的應(yīng)用框架,也就是說(shuō)它不會(huì)直接提供創(chuàng)建EJB, WEB services等企業(yè)層組件的方法,但用它可以構(gòu)造出訪問(wèn)企業(yè)層組件的客戶應(yīng)用。

這個(gè)框架功能主要有三部分組成:

iPlanet應(yīng)用框架核心;
iPlanet應(yīng)用框架組件;
iPlanet應(yīng)用框架擴(kuò)展。
應(yīng)用框架核心定義了基本接口、對(duì)象協(xié)議、簡(jiǎn)單組件,以及iPlanet應(yīng)用框架程序的最小核心。包括視圖簡(jiǎn)單組件、模型簡(jiǎn)單組件、請(qǐng)求分發(fā)組件和可重用命令對(duì)象。iPlanet應(yīng)用框架組件利用框架核心定義的基本接口、協(xié)議和組件向開發(fā)者提供高層的重用組件,這些組件既有與特定視覺(jué)效果無(wú)關(guān)的水平組件,同時(shí)也有適應(yīng)特定實(shí)用環(huán)境、提高可用性而特意提供的垂直型組件?蚣軘U(kuò)展實(shí)現(xiàn)了用框架相容的方法訪問(wèn)非J2EE環(huán)境的方法。通常情況下,擴(kuò)展被框架應(yīng)用程序用來(lái)無(wú)縫訪問(wèn)J2EE容器特定功能。JATO平臺(tái)棧圖很清楚地表達(dá)了這個(gè)情況。

JATO最大的威力在:對(duì)于快速開發(fā)用戶,你能利用框架組件和擴(kuò)展提高生產(chǎn)率,對(duì)于要求更大靈活性的用戶,你能實(shí)現(xiàn)框架核心提供的接口來(lái)保持應(yīng)用的框架兼容性。







此圖表示實(shí)現(xiàn)一個(gè)JATO應(yīng)用程序,可以簡(jiǎn)單地實(shí)現(xiàn)控制組件module1Servlet,視圖組件ListCustomersViewBean和模型組件CustomersModuleImpl,以及一個(gè)給客戶代理顯示界面的ListCustomers.jsp文件。并清楚地表明這些組件與JATO框架組件的繼承關(guān)系。




JATO標(biāo)簽庫(kù)提供了VIEW對(duì)象與JSP文件的接口。庫(kù)中標(biāo)簽處理程序負(fù)責(zé)實(shí)現(xiàn)VIEW對(duì)象和JSP產(chǎn)生地客戶端文檔的信息同步和交換。這個(gè)圖清楚地表達(dá)了這種對(duì)應(yīng)關(guān)系

2.2.1. MVC分析




前端控制組件接收用戶發(fā)來(lái)的任何請(qǐng)求,這個(gè)可在WEB.xml中指定請(qǐng)求分發(fā)組件負(fù)責(zé)視圖管理和導(dǎo)航,和前端控制組件封裝在ApplicationSERVLETBase一起實(shí)現(xiàn)。應(yīng)用程序開發(fā)者需要為每一個(gè)子系統(tǒng)(人力資源,財(cái)務(wù),CRM等)實(shí)現(xiàn)一個(gè)此類的繼承。

請(qǐng)求分發(fā)組件分發(fā)請(qǐng)求給工作者,工作者實(shí)現(xiàn)了command接口。應(yīng)用開發(fā)者可以實(shí)現(xiàn)這個(gè)接口。JATO提供了一個(gè)缺省實(shí)現(xiàn):DefaultRequestHandingCommand,這個(gè)實(shí)現(xiàn)會(huì)把請(qǐng)求傳給視圖組件的特定事件。

組合視圖是指視圖組件在顯示給用戶時(shí)的層次關(guān)系:根視圖是一個(gè)ViewBean類的對(duì)象字段是一個(gè)DisplayField類的對(duì)象,容器視圖是一個(gè)ContainerView類的對(duì)象。視圖組件類的層次關(guān)系如下圖:




2.2.2. 優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

這種框架的適應(yīng)范圍大,即提供了底層接口,也有立即可用的組件
具有與客戶端RAD開發(fā)工具相似的開發(fā)概念如頁(yè)為中心(等同于VB的FORM),事件處理等.
對(duì)大型的應(yīng)用支持較好
缺點(diǎn):

不是業(yè)屆標(biāo)準(zhǔn)
目前還沒(méi)有開發(fā)工具的支持(然JATO已經(jīng)為工具支持做好了準(zhǔn)備)
沒(méi)有定義網(wǎng)頁(yè)導(dǎo)航,開發(fā)者在視圖中自己指定具體的導(dǎo)航URL
修改建議
把眾多的VIEW/MODEL對(duì)應(yīng)修改成xml文檔傳遞數(shù)據(jù),加上集中的網(wǎng)頁(yè)導(dǎo)航定義

2.3. JSF(JavaServer Faces)

JSF是一個(gè)包括SUN在內(nèi)的專家組正在定義的開發(fā)WEB應(yīng)用用戶界面的框架,JSF 技術(shù)包括:

一組API,它實(shí)現(xiàn)UI了組件,管理組件的狀態(tài),處理事件,輸入校驗(yàn),定義頁(yè)面導(dǎo)航,支持國(guó)際化和訪問(wèn);
一個(gè)JSP定制標(biāo)簽庫(kù)實(shí)現(xiàn)與JSP的接口。
JSF非常簡(jiǎn)單,是一個(gè)定義良好的編程模型。利用這個(gè)技術(shù),開發(fā)者通過(guò)在頁(yè)面內(nèi)組合可重用的UI組件,在把這些組件和應(yīng)用的數(shù)據(jù)源相連,路由客戶產(chǎn)生的事件到服務(wù)器端的事件處理器進(jìn)行編程。JSP處理了所有幕后的復(fù)雜工作,使得開發(fā)者把關(guān)注重點(diǎn)放在應(yīng)用代碼上。

2.3.1. STRUTS、JATO和JSF比較

它們之間有部分重疊,但重點(diǎn)不一樣。

STRUTS和JATO都提供了一個(gè)MVC式的應(yīng)用模型,而JSF只在用戶界面上提供編程接口。這意味著前兩者涉及的范圍比后者廣。JSF可以成為前兩者在UI開發(fā)的部分。
JSF的規(guī)范的發(fā)布版將在 2002年底發(fā)布,實(shí)現(xiàn)可能要比這個(gè)時(shí)間晚些。另外將會(huì)有工具支持這個(gè)框架的應(yīng)用開發(fā)。
2.4. WAF

WAF是WEB APPLICATION FRAMWORK的簡(jiǎn)稱,是SUN藍(lán)皮書例子程序中提出的應(yīng)用框架。它實(shí)現(xiàn)了 MVC和其他良好的設(shè)計(jì)模式。

2.4.1. 細(xì)節(jié)分析



點(diǎn)擊這里看大圖

2.4.2. 視圖-控制-模型

如圖所示,開發(fā)人員編寫的兩個(gè)xml配置文件定義了WAF的運(yùn)作參數(shù)。Screendefinition.xml定義了一系列的屏幕(screen)。Mapping.xml則定義了某個(gè)動(dòng)作之后應(yīng)該顯示的屏幕,但沒(méi)有指定屏幕到哪里拿數(shù)據(jù)。

用戶發(fā)出一個(gè)HTTP請(qǐng)求(*.screen),由TemplateSERVLET屏幕前端控制組件接收,它提取請(qǐng)求信息,設(shè)置request對(duì)象CurrentScreen屬性,再把請(qǐng)求發(fā)到模版JSP。模版JSP收到請(qǐng)求后,JSP中的Template標(biāo)簽察看這個(gè)當(dāng)前屏幕,并從屏幕定義文件(Screendefinition.xml)中獲取這個(gè)屏幕的具體參數(shù),再生成html返回給客戶。

假設(shè)返回給客戶的html中包括了html表單,用戶在輸入一定數(shù)據(jù)之后提交,發(fā)出一個(gè)HTTP請(qǐng)求(*.do)。這個(gè)請(qǐng)求被MainSERVLET接收,它提取請(qǐng)求信息,察看動(dòng)作映射文件(mapping.xml),設(shè)置處理這個(gè)請(qǐng)求的動(dòng)作對(duì)象(HTTPAction對(duì)象),交給requestprosessor對(duì)象處理。Requestprosessor對(duì)象調(diào)用動(dòng)作對(duì)象完成任務(wù),如果需要進(jìn)一步處理,requestprosessor對(duì)象會(huì)調(diào)用WEBclientcontroler對(duì)象的事件處理機(jī)制。MainSERVLET在處理完請(qǐng)求之后,從屏幕流管理對(duì)象那里得到下一個(gè)屏幕,并把請(qǐng)求傳給這個(gè)屏幕的JSP文件。

值得一提的是WEBclientcontroler事件處理機(jī)制最終把HTTP請(qǐng)求的數(shù)據(jù)傳到了EJBAction對(duì)象那里處理。這樣HTTPAction對(duì)象和EJBAction對(duì)象形成了兩級(jí)處理機(jī)制,前一級(jí)與request對(duì)象緊密相關(guān),把數(shù)據(jù)封裝起來(lái)形成一個(gè)Event對(duì)象,再傳給了EJBAction對(duì)象,后者與Request對(duì)象無(wú)關(guān)。這個(gè)方式可以形成一個(gè)session級(jí)別的數(shù)據(jù)處理機(jī)制。下圖顯示了這個(gè)方法。HTTPAction1對(duì)象處理一個(gè)請(qǐng)求,并把數(shù)據(jù)放到一個(gè)狀態(tài)SessionBean內(nèi),HTTPAction2也如此,當(dāng)HTTPAction3接收到HTTP請(qǐng)求之后,把控制傳給EJBAction, 后者獲取狀態(tài)SessionBean數(shù)據(jù),處理請(qǐng)求,成功后清控狀態(tài)SessionBean的內(nèi)容。這個(gè)機(jī)制非常適應(yīng)多個(gè)輸入頁(yè)面才能滿足一個(gè)業(yè)務(wù)的輸入數(shù)據(jù)的情況(比如購(gòu)物車)。




2.4.3. 優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn)

屏幕導(dǎo)航定義明確
為框架的擴(kuò)展提供了一個(gè)空間
缺點(diǎn)

源碼比較亂,穩(wěn)定性和可靠性沒(méi)人驗(yàn)證。
只是一個(gè)框架軀干,沒(méi)有正式的model層,視圖的概念不強(qiáng)
沒(méi)有模型到視圖的定義
修改意見(jiàn)
只有一個(gè)框架軀干,正為實(shí)現(xiàn)自己的應(yīng)用框架提供了靈活性。沒(méi)有僵化的視圖概念,提供了在網(wǎng)頁(yè)輸入到模型的擴(kuò)充接口,比如插入XML數(shù)據(jù)交換。