專利名稱::用于創建和提供多層聯網服務的方法和系統的制作方法
技術領域:
:本發明涉及一種用于創建和提供多層聯網服務的方法和系統。
背景技術:
:基于客戶應用程序的用于傳遞聯網服務的互聯網或者網絡一般具有兩個主要組件。第一個是客戶應用程序的“查看和感知(lookandfeel)”組件。第二個組件是客戶應用程序的功能性。“查看和感知”通常是具有準備和創建應用程序的表示元素的必要能力的網絡設計者的權限。通常由創建、執行、和匯編客戶應用程序的功能元素的網絡開發者來管理客戶應用程序的功能性。客戶應用程序的表示和功能元素通常合并在相同的應用文件中,這樣的結果就是設計者和開發者在相同的文件上工作。使用這種方法存在幾個潛在的缺點。例如,如果客戶應用程序的任意元素(表示或功能)改變,則整個客戶應用程序客戶將不得不重新編譯。同樣,可能還存在涉及版本控制(versioncontrol)、工作復制、和客戶應用程序可擴展性的潛在問題。Java和JavaServerPage的出現解決了一部分這些問題。與JavaBeans或者企業版JavaBeans結合的JavaServerPage允許許多客戶應用程序的功能元素與表示元素分離,從而當將JavaServerPage的表示元素釋放給網絡設計者時,允許開發者創建并修改功能單元(例如,JavaBeans)。然而,這種方法仍然存在許多與傳統客戶應用程序相同的缺點。如果表示或功能元素改變,則可能需要修正并可能重新創建JavaServerPage。因為JavaServerPage仍然包括功能和表示元素,因此也遺留了版本控制和工作復制的潛在問題。本發明的目的在于提供一種多層應用程序,以至少消除或減輕一部分上述缺點。
發明內容客戶應用程序的表示和功能元素通常合并在相同的應用文件中,這樣的結果就是設計者和開發者在相同的文件上工作。使用這種方法存在幾個潛在的缺點。例如,如果客戶應用程序的任意元素(表示或功能)改變,則整個客戶應用程序客戶將不得不重新編譯。同樣,還存在可能涉及版本控制、工作復制、和客戶應用程序可擴展性的潛在問題。與現有客戶應用程序相反,提供與用戶界面(例如,PC或PDA上的瀏覽器)相互作用的多層應用程序。應用程序包括表示層(presentationtier)(例如,具有JSP/Servlet引擎的網絡服務器)以及業務邏輯層(businesslogictier)(例如,應用程序服務器),以在用戶界面上處理用于后續表示的數據。引導模塊具有多個互聯的方向,包括功能方向用于引導相應的功能組件,以使用業務邏輯層執行數據處理功能并提供數據處理輸出;以及表示方向,用于引導相應的表示組件,以當數據處理輸出可應用時將其結合到表示模板(template),以生成用于用戶界面的表示元素。功能組件和表示組件彼此獨立并且分離,功能組件的連接產生數據,并且表示組件使用輸出數據。表示組件是普通種類表示元素的抽象表現,具有其布局和格式(例如,置標語言)的每個特定的表示元素存儲在不同表示模板中,并且可以在操作時間內在表示層上確定對用于表示組件的特定表示模板的引用。根據本發明,提供一種用于托管在網絡上與用戶界面相互作用的計算機可執行多層應用程序的方法,該應用程序包括應用程序表示層。該方法包括以下步驟選擇第一表示模板,第一模板包括用于定義相應的第一表示元素的第一表示指令;選擇用于處理第一表示指令的應用程序表示層的第一表示組件;以及將第一表示組件連接到第一模板,其中在執行用于隨后傳遞到用戶界面的多層應用程序時,第一組件處理第一表示指令并生成第一表示元素。該方法包括如下附加步驟選擇包括用于定義相應的第二表示元素的第二表示指令的第二表示模板;選擇用于處理第二表示指令的第一表示組件;以及將第一組件連接到第二模板;其中在執行用于隨后傳遞到用戶界面的多層應用程序時,第一組件處理第二表示指令并生成第二表示元素。在優選實施例中,表示模板是文件系統的計算機可讀文件,并且從包括第一表示元素的布局、字體、以及格式的組中選擇表示指令。在另一實施例中,將表示指令寫入從包括HTML、HDML、和WML的組中選擇的置標語言中。第一表示組件是計算機可執行文件。在優選實施例中,計算機可執行文件是JavaBean。該方法還可以包括應用程序邏輯層,并且附加步驟如下選擇輸入數據;選擇用于處理輸入數據的應用程序邏輯層的第一功能組件;將輸入數據連接到第一功能組件,其中在執行多層應用程序時,第一功能組件處理輸入數據并生成輸出數據;引導第一表示組件,以處理用于進一步將對應第一表示元素定義為包括輸出數據的輸出數據表示指令,其中在執行多層應用程序時,第一表示組件處理輸出數據表示指令并生成結合輸出數據的第一表示元素。第一功能組件是計算機可執行文件。在優選實施例中,計算機可執行文件是JavaBean。本發明還提供一種用于托管在互聯網上與用戶界面相互作用的計算機可執行多層應用程序的系統,應用程序包括應用程序表示層。該系統包括第一表示模板,第一模板包括用于定義相應的第一表示元素的第一表示指令;應用程序表示層的第一表示組件,用于處理第一表示指令;以及第一引方向元素,用于將第一表示組件連接到第一模板,其中,在執行用于隨后傳遞到用戶界面的多層應用程序時,第一組件處理第一表示指令并生成第一表示元素。該系統還可以包括第二表示模板,第二模板包括用于定義相應的第二表示元素的第二表示指令,以及第二方向元素,用于將第一組件連接到第二模板,其中,在執行用于隨后傳遞到用戶界面的多層式應用程序時,第一組件處理第二表示指令并生成第二表示元素。該系統還可以包括用于處理輸入數據的應用程序邏輯層的第一功能組件;以及第一方向元素,進一步將輸入數據連接到第一功能組件,其中,在執行多層應用程序時,第一功能組件處理輸入數據并生成輸出數據。輸出數據表示指令進一步將對應第一表示元素定義為包括輸出數據。通過以下參考附圖的詳細描述,本發明優選實施例的這些和其他特點將變得顯而易見,其中圖1是根據本發明實施例的系統的示意圖;圖2是圖1的系統的擴展示意圖;圖3是根據本發明實施例在處理請求的資源步驟中的示意圖;圖4是根據本發明實施例在多層應用程序的每一層內的元素的示意圖;圖5是圖1系統的替換實施例的示意圖;圖6(a)是JavaServerPage的示意圖;圖6(b)是根據本發明實施例的JavaServerPage的示意圖;圖7是根據本發明實施例的功能組件的邏輯圖;圖8(a)是根據本發明實施例的靜態表示組件的示意圖;圖8(b)是根據本發明實施例的動態表示組件的示意圖;圖9是根據本發明實施例的處理JavaServerPage的輸出的示意圖;圖10是根據本發明實施例的使用JavaServerPage的客戶應用程序的邏輯圖;圖11是根據本發明的客戶應用程序的處理步驟的邏輯圖;圖12是根據本發明實施例的客戶應用程序的處理步驟的輸出的示意圖;圖13是根據本發明實施例示出的客戶應用程序的系統和處理輸出的擴展示意圖;圖14是根據本發明實施例的客戶應用程序元素和對應系統的示意圖;圖15是示出根據本發明實施例的方法中步驟的流程圖;圖16是示出根據本發明實施例的圖15中的方法進一步步驟的流程圖;圖17是示出根據本發明實施例的圖15中的方法的替換的進一步步驟的流程圖;以及圖18是示出根據本發明實施例的圖17中的方法的進一步步驟的流程圖。具體實施例方式參考圖1,示出系統10的示意圖。系統10是本領域技術人員熟知的計算網絡。操作網絡終端11的個體可以通過通信網絡13訪問遠程定位的資源。通信網絡13可以是互聯網、環球網(WorldWideWeb)、LAN、WAN、VPN。網絡終端11可以是本領域技術人員所知的任意網絡設備,其包括通過通信網絡13與遠程定位的資源進行通信的裝置以及傳輸請求的裝置,包括個人電腦、筆記本電腦、掌上電腦、手持設備、和無線文本傳呼蜂窩式電話等。遠程定位的資源可以是位于網絡服務器15上的網頁,或位于數據庫17中的數據,通過連接到網絡服務器15(或與網絡服務器15進行通信)的應用程序服務器19(通過數據庫服務器119)訪問該資源。可選地,可以不需要網絡服務器15,直接通過通信網絡13訪問應用程序服務器19和關聯的數據庫17。例如,如果個人計算機包括用于通過網絡13(例如,調制解調器)進行通信的裝置和用于向資源主機發送資源請求的可執行軟件,則操作個人計算機(即,終端11)的個體可以通過因特網(即,通信網絡13)訪問遠程定位的資源。遠程定位的資源可以象靜態HTML文檔一樣簡單。可選地,請求的資源可包括大量服務的一小部分,例如完成要求產生特別對給定的用戶當前對話期的幾個響應的在線事項。包括在這些事項中的數據是動態而不是靜態的,即,它們響應于用戶的特定請求而生成。請求數據可以存放在數據庫17中,由應用程序服務器19通過數據庫服務器119訪問。用戶可以簡單地請求原始數據,或者可以處理數據并將處理結果結合以響應用戶的請求。存在幾種可以處理請求數據和/或將數據結合在響應中的方法。參考圖2,系統10的擴展示意圖示出一種可以使用Java網絡服務器(JavaWebServer)和Java服務器頁(JavaServerPage)(JSP)技術處理請求的方法。網絡服務器15包括Java服務器頁引擎21和小服務程序引擎23,它們一起處理請求的資源(即,JSP25)并生成返回到終端11的響應。圖3示意性示出請求的資源25和生成的響應,數據輸出27的擴展視圖。操作終端11的用戶通過通信網絡13請求遠程定位的資源(Java服務器頁25)。運行JSP引擎21的網絡服務器15接收資源請求并恢復請求的Java服務器頁25,讀取它并將JSP元素翻譯成Java代碼29(.Java)。然后,使用本領域技術人員熟知的標準編譯器將Java代碼譯文29編譯到Java小服務程序31(.class)中。接下來,使用標準API(例如,小服務程序引擎23)執行小服務程序31。當小服務程序運行時,它處理輸入數據33并生成數據輸出27,即,它處理請求并生成響應。然后,通過網絡13將輸出27引導至終端11。參考圖4和圖13,根據本發明的優選實施例示出用于托管在網絡上與用戶界面11上與關聯的元素相互作用的計算機可執行多層應用程序191的系統,該應用程序包括應用程序表示層171和應用程序邏輯層181。該系統包括第一表示模板65,第一模板包括用于定義對應第一表示元素或輸出79的第一表示指令;應用程序表示層171的第一表示組件161,用于處理第一表示指令;以及第一方向元素61,用于將第一表示組件161連接到第一模板65,其中,在執行用于隨后傳遞到用戶界面11的多層應用程序時,第一組件161處理第一表示指令并生成第一表示元素。在優選實施例中,該系統包括第二表示模板67,第二模板67包括用于定義相應的第二表示元素或輸出79的第二表示指令;以及第二方向元素,用于將第一表示組件161連接到第二模板67,其中,在執行用于隨后傳遞到用戶界面11的多層應用程序時,第一組件161處理第二表示指令并生成第二表示元素或輸出79。在又一實施例中,該系統包括應用程序邏輯層181的第一功能組件59,用于處理輸入數據33;以及第一方向元素,進一步將輸入數據33連接到第一功能組件59,其中,在執行多層應用程序時,第一功能組件處理輸入數據33并生成輸出數據27。輸出數據表示指令進一步將相應的第一表示元素或輸出定義為包括輸出數據27。參考圖4和圖15,根據本發明的優選實施例示出用于托管在互聯網上與用戶界面相互作用的計算機可執行多層應用程序191的方法的流程圖,其中,應用程序191包括應用程序表示層171。該方法包括以下步驟選擇第一表示模板65,第一模板65包括用于定義相應的第一表示元素的第一表示指令(步驟100);選擇用于處理第一表示指令的應用程序表示層171的第一表示組件161(步驟200);以及將第一表示組件連接到第一模板65(步驟300),其中,在執行用于隨后傳遞到用戶界面的多層應用程序時,第一組件161處理第一表示指令并生成第一表示元素或輸出79。參考圖4和圖16,示出圖15的方法附加步驟的流程圖。步驟還包括選擇第二表示模版67,第二表示模版包括用于定義相應的第二表示元素或輸出79的第二表示指令(步驟101);選擇用于處理第二表示指令的第一表示組件161(步驟201);以及將第一組件161連接到第二模板67(步驟301),其中,在執行用于隨后傳遞到用戶界面的多層應用程序191時,第一組件161處理第二表示指令并生成第二表示元素或輸出79。在優選實施例中,表示模板65、67是文件系統的計算機可讀文件,以及表示指令是例如但不限于第一表示元素的布局、字體、以及格式。在另一實施例中,表示指令寫入從包括例如但不限于HTML、HDML、和WML的組中選擇的置標語言中。第一表示組件161是計算機可執行文件。在優選實施例中,計算機可執行文件是JavaBean。第一表示組件161通過方向元素57連接到第一表示模板65。引導組元素57指定第一表示模板65的位置并將第一表示組件161引導至指定位置。在優選實施例中,方向元素57是例如但不限于頁面標簽、控制標簽、屬性標簽、制作頁面標簽、清零標簽、和消息攔截標簽的第一表示組件標簽57。將第一表示組件標簽57作為執行多層應用程序的方向模塊的指令來表示。在優選實施例中,方向模塊是Java服務器頁49。參考圖4和圖17,示出圖15的方法附加步驟的流程圖,其中,多層應用程序191還包括應用程序邏輯層181。步驟還包括選擇輸入數據33(步驟102);選擇用于處理輸入數據33的應用程序邏輯層181的第一功能組件59(步驟202);將輸入數據33連接到第一功能組件59(步驟302),其中,在執行多層應用程序191時,第一功能組件59處理輸入數據33并生成輸出數據27。參考圖4和圖18,示出圖17的方法附加步驟的流程圖,其中,第一模板還包括用于進一步將相應的第一表示元素定義為包括輸出數據27的輸出數據表示指令。該方法包括以下附加步驟引導第一表示組件161,以處理輸出數據表示指令(步驟403),其中,在執行多層應用程序191時,第一表示組件161處理輸出數據表示指令并生成結合了輸出數據33的第一表示元素或輸出79。在優選實施例中,輸出數據表示指令定義控件,其中,顯示例如但不限于文本字段、密碼字段、隱含字段、文本區、表格、列表框、復選框、單選按鈕、圖像、按鈕、圖像按鈕、提交按鈕、復位按鈕、鏈路、和取值范圍的輸出數據。第一功能組件59是計算機可執行文件。在優選實施例中,計算機可執行文件是JavaBean。第一功能組件59通過方向元素55連接到輸入數據33。方向元素55指出輸入數據33的位置并將第一功能組件引導至指定位置。在優選實施例中,方向元素55是例如但不限于初始化標簽、調用標簽、前提標簽、調試標簽、錯誤標簽、賦值標簽、條件標簽的第一功能組件標簽55。在優選實施例中,將第一功能組件標簽55表示為方向模塊的指令,放下模塊執行多層應用程序。方向模塊是Java服務器頁49。參考圖5,示意性地示出系統100的另一替換實施例作為應用程序服務器小服務程序系統200。JSP引擎21位于應用程序服務器19上。在Java服務器頁25的翻譯、編譯、和執行中,小服務程序引擎23與JSP引擎21合作。在系統200中的遠程定位的資源可以包括位于本地數據庫17上的數據,其可以由應用程序服務器19通過數據庫服務器119直接訪問并由小服務程序31處理。在這種情況下的輸出通過其他機構(例如,電子郵件)返回給用戶。參考圖6(a),示出本領域技術人員熟知的Java服務器頁JSP39的示意圖。JSP39是包括靜態模板數據(可以由基于例如HTML、WML、和XML格式的任意文本的來表示)和JSP元素(通過JSP引擎21解釋)的文本文檔。通過使用置標(ML)語句43寫入JSP39的這些部分以創建定義處理的輸出的查看和感知的靜態內容。例如,如果選擇HTML作為ML,則使用HTML語句和語法編寫JSP的模板部分。通過訪問Java編程語言對象屬性創建動態內容。JSP39的動態元素通常包括JSP指令41,將信息傳遞到JSP引擎21;JSP標簽45,可以以用于例如初始化服務器上的JavaBean的標準標簽或者自定義標簽來實現;以及腳本小程序47,其是執行標簽不支持的功能的Java代碼的小腳本。JSP指令41可以包括page_directives(傳達頁面的特定信息,例如,緩沖器和線程信息或錯誤操作)、language_directives(指定JSP腳本語言)、include_directives(可以用于包括頁面中的外部文檔)、以及taglib_directives(指出頁面可以調用的自定義標簽庫)。JSP標簽45負責執行大部分的JSP處理。這包括許多標準標簽(例如,useBean,setProperty,和getProperty)。也可以為了特定目的來設計和執行自定義標簽。參考圖6(b),示出根據本發明優選實施例的JSP49。在本發明的優選實施例中,JSP49不包括任意置標語言(ML)語句43,也不包括Java腳本小程序47。分別將全部操作或者JSP49的功能和表示元素保存為離散的功能組件和表示組件。通過各個自定義功能組件標簽擴展55和表示組件標簽擴展57訪問組件59和61,分別使用功能組件taglib_directive51和表示組件taglib_directive53依次指定自定義功能組件標簽擴展55和表示組件標簽擴展57。因此,在小服務程序客戶應用程序的結構中,根據本發明匯編的Java服務器頁49只包括JSP指令和自定義標簽擴展55和57。JSP指令JSP49指令為以下格式<%@directiveNameattribute=“value”%>其中directiveName是指定指令名稱attribute是該指定指令的屬性一個指令可以具有0個或多個屬性。Value是用于指定屬性的特定值一個屬性可以恰好具有一個值。JSP49頁面指令在優選的實施例中,所有JSP處理頁49均以下述頁面指令開始<%@pagesession=“true”buffer=“buffersizekb”autoFlush=“true”1isThreadSafe=“true”errorPage=“…/errorPage.jsp”%>其中…/errorPage.jsp是如果處于未獲取的運行時間異常,則將調用另一JSP頁的URL如果是錯誤JSP頁,則隨后的屬性將包括在頁面指令isErrorPage=“true”中。JSP49taglib指令taglib指令指定自定義標簽擴展。下列標簽庫指令是在所有JSP處理頁49中(權限在page指令之后)指定的<%@tagliburi=“/servlet/FCTagsClient.jar”prefix=“FC”%><%@tagliburi=“/servlet/PCTagsClient.jar”prefix=“PC”%>JSP49include指令包括指令可以用于插入、內嵌其他JSP處理頁49的內容<%@includefile=“…/otherPage.jsp”%>其中…/otherPage.jsp是將包括的另一JSP頁的路徑功能組件(FC)參考圖7,示出功能組件59的邏輯圖。功能組件59是業務功能性清晰、獨立的部分。每個功能組件59接收一組前提數據33,使用接收的數據33執行處理功能,并且返回一組結果數據27。在優選的實施例中,每個功能組件59作為基于一般基類(genericbaseclass)的Java類存在。當客戶應用程序請求功能組件59時,使用基于功能組件59的邏輯名稱的Java反射簡單地初始化。功能組件59符合JavaBean的規范。公共抽象類FC(PublicAbstractClassFC)是用于所有功能組件59的一般定義。所有指定功能組件59類均擴展這一基類。該抽象類提供通過所有功能組件59類繼承的一組內置功能性,并且定義必須在功能組件59類自身中明確執行的一組功能性。公共類{ApplicationCategory}{Function}通過擴展功能組件59類的指定類,進一步定義任意給定的功能組件59。在優選實施例中,用于特定功能組件59類的命名規范是{ApplicationCategory}{Function},其中●{ApplicationCategory}是指出功能組件59所屬應用程序范疇(例如,用于Net*Order應用程序類型的Order、用于Net*Track應用程序類型的Track、或用于General應用程序類型的General)的簡易格式。●{Function}是表示該特定功能組件59功能的簡短但描述的短語(例如,用于實際上執行類型的搜索并返回一系列結果的功能組件59的PerformProductSearch)。功能組件實例利用功能組件59實例名初始化功能組件59,使得可以唯一地命名多個實例。在優選實施例中,功能組件59實例名是{ApplicationCategory}{Function}_{InstanceDescription}其中{InstanceDescription}是用于功能組件59的該特定實例的簡短描述引用,例如,OrderPerformProductSearch_OrderEntry公共方法setInstanceDescription()該方法用于設置對功能組件59的實例描述。通常在初始化功能組件59之后立即調用該方法。公共方法getInstanceDescription()該方法返回對功能組件59的實例描述。公共方法getInstanceName()該方法返回對功能組件59的實例名稱。前提數據33和返回的結果數據27在優選實施例中,將全部的前提數據33和返回的結果數據27儲存為實例變量。實例變量的名稱是前提數據元素本身的名稱。此外,這是用于每個使用相同命名規范的這些實例變量中的設置和得到方法。允許通過使用Java反射外部地引用前提數據33。例如,如果功能組件59具有稱為userID的前提數據組件33,則存在使用名為setUserID()的公共方法外部地設置名為setUserID的實例變量。在同樣是返回的結果數據27元素的情況下,則使用公共方法setUserID()返回數據27。在返回的結果數據元素的情況下,存在公共得到方法。保護方法validate()在實際執行功能組件59的任意處理邏輯之前,在execut()方法中調用validate()方法。如果存在任意遺漏或不正確地設置前提數據33,則返回FC_EXCEPTION_PrerequisiteDataFCException異常。公共方法execute()execute()方法提供功能組件59的內部處理邏輯。在執行任意指定處理之前,證實所有的前提數據33。當產生返回結果數據27時,它被存儲到各個實例變量中。如果在執行處理邏輯的時候產生錯誤,則返回適當的FCException異常。公共類FCException該類表示在前提數據33的證實期間或者功能組件59的處理邏輯執行期間產生的錯誤。公共FC_EXCEPTION_PrequisiteData該異常表示前提數據33不符合由功能組件59定義(definition)定義的要求。通常由對功能組件59的特定調用中的錯誤產生這種異常。公共FC_EXCEPTION_FCInternal該異常表示在功能組件59的內部處理邏輯期間的意外錯誤。通常由在功能組件59邏輯自身內的錯誤產生這種異常。公共FC_EXCEPTION_ServerInternal該異常表示在涉及調用服務器的功能組件59的內部處理邏輯期間的意外錯誤。通常由在功能組件59邏輯自身內或者服務器邏輯內的錯誤產生這種異常。公共FC_EXCEPTION_Exception該異常表示嘗試返回無效功能組件異常。FCException自身可以只返回該異常。由在功能組件59邏輯自身內的錯誤產生這種異常。公開FC_EXCEPTION_Assertion此異常表示斷言失敗。其他異常功能組件59自身可以通過在構造功能組件異常時指定其自身異常標識碼來定義其自身的功能組件異常。由功能組件59定義異常的具體含義。公共方法getExceptionID()該方法返回異常的標識符。公共方法getFailureReason()該方法返回故障原因。公共方法toString()該方法返回異常的可打印版本。功能組件(FC)標簽擴展使用一組功能組件標簽擴展55調用功能組件59。Functioncomponentinit標簽該標簽初始化用于功能組件59處理的頁面。在優選實施例中,該標簽是用于功能組件自定義標簽55的每一頁面上的第一功能組件自定義標簽。該標簽具有如下格式[<functioncomponentinitclasspath=“classpath”scope=“scope”/>]其中classpath是初始化功能組件59時用于搜索的類途徑。scope是用于在JSP49上初始化的功能組件59的存儲的缺省作用域。該作用域可以是下列值的任意一個應用程序、對話、或請求。如果沒有指定該作用域,則缺省作用域為session。例如,sessionclasspath屬性和scope屬性是可選的。functionComponentcall標簽該標簽55定義將調用特定功能組件59。該標簽具有如下格式<functionComponentcallname=“functionComponentInstanceName”debugLevel=“debugLevel”>dontResetAllData=“yes”scope=“scope”conditionalExecution=“true”>functionComponent-body</functionComponentcall>其中functionComponentInstanceName是用于調用的功能組件59實例。如果在當前執行的功能中已經調用該功能組件59實例,則重用該功能組件59的實例。此外,創建該功能組件59實例。例如,OrderGet_OrderEntrydebugLevel是用于該指定功能組件59調用的調試等級,指定為高、中、或低。dontResetAllData表示將不調用功能組件59的resetAllData()方法。通常總是在設置用于該功能組件調用的任意前提數據33之前將調用功能組件59的resetAllData()方法。resetAllData()方法可以與簡單地使用全部前提數據33上的空屬性產生不同的效果。對于數值,使用空屬性將這些值設置成0,然而resetAllData()方法實際上可以使得這些值被設置為一些除0之外的缺省值。功能組件59定義resetAllData()方法的特定狀態。當功能組件59具有多個可選的前提數據33元素,并且功能組件59在對話中使用一次以上時,期望在隨后的調用中重設全部前提數據33。然而,可以是不期望狀態的情況。可以使用dontResetAllData屬性覆蓋這些狀態。scope是用于存儲該功能組件59的作用域(覆蓋用于在functionComponentinit標簽中定義的頁面的設置)。作用域可以為下列值中的任意一個功能、對話、或請求。如果沒有指定,則通過functionComponentinit標簽定義作用域。例如,sessionconditionalExecution=“true”該屬性表示根據當前具有true值的封閉functionComponentif標簽有條件地執行標簽55。在請求時,該標簽55具有包括functionComponentprerequisite和functionComponenterror標簽的主體。只有name屬性是強制的。通過dataReference規范可訪問返回的結果數據27。functionComponentprerequisite標簽該標簽55定義用于功能組件59的一個前提數據元素33。該標簽55必須定義在functionComponentcall標簽的主體之內。該標簽55具有如下格式<functionComponentprerequisitetarget=“prerequisiteDataReference”value=“literalValue”source=“dataReference”optsource=“dataReference”empty=“booleanValue”/>其中prerequisiteDataReference是功能組件59的前提數據元素33的簡名或者是對功能組件的前提數據元素的數據元素的引用。在優選實施例中,前提數據引用以對功能組件59的前提數據元素33的引用開始。如果標簽只是前提數據元素33本身,則引用只是數據元素的名稱(例如,ordered)。如果前提數據元素33是結構體,則引用是數據元素結構的名稱、點(‘.’)、和結構的元素名稱。(如果元素是結構體本身,則它也可以被進一步定義。)(例如,userAttributes.firstName)。literalValue是硬編碼的文字值。dataReference是對動態數據的引用,對動態數據的引用與定義用于控制標簽的數據引用值使用相同的規范。booleanValue是true或false。在優選實施例中,所有屬性是強制的,除非指定value、source、optSource、或empty中唯一的一個。如果指定optSource,則dataReference可以是不存在的數據引用。如果指定empty=“true”,則將適當的值傳給設置方法。對于string屬性,則傳輸空串(即,“”)。對于numeric屬性,則傳輸零(即,“0”)。對于object屬性,則傳輸空值(即,null)。funetionComponentdebug標簽該標簽55定義各種有助于調試JSP頁的調試信息。在優選實施例中,標簽55具有如下格式<functionComponentdebugdebugLevel=“debugLevel”debugFile=“debugFile”value=“literalValue”source=“dataReference”/>其中debugLevel是用于全部功能組件59的缺省調試等級,指定為高、中、或低。debugFile是到將用于調試輸出的文件的路徑。(在優選實施例中,第一次遇到調試文件規范,打開該文件用于追加。忽略所有后序的調試文件事件。如果沒有指定調試文件,則調試輸出轉到System.out流)literalValue是硬編碼的文字值。dataReference是對動態數據的引用,對動態數據的引用與定義對控制權標簽的數據引用值使用相同的規范。所有的屬性都是可選的,然而,可以只能指定一個value或source。優先順序由隨后的值規定。functionComponenterror標簽該標簽定義用于對功能組件59的一種類型錯誤的處理。該標簽必須定義在functionComponentcall標簽主體內。該標簽具有以下格式<functionComponenterrorname=“errorDescriptor”page=“…/errorPage.jsp”/>其中errorDescriptor是識別特定功能組件異常的串,例如,PasswordMismatch。功能組件59本身定義指定功能組件異常的含義。“*”的特定值表示任意異常(即,缺省異常處理程序)。…/errorPage.jsp是如果發生特定的運行時間錯誤,則將調用的另一個JSP頁49的URL。在錯誤頁面內的腳本變量functionComponentException中出現異常。如果將錯誤頁面指定為特定值“ignore”,則忽略異常。錯誤頁面可以是特定值或數據引用。對動態數據的引用使用與定義對控制標簽的數據引用值相同的規范。在優選實施例中,所有屬性是強制的。functionComponentgetValue標簽該標簽用于設置具有功能組件的返回結果數據元素值的腳本變量。該標簽具有以下格式<functionComponentgetValuesource=“dataReference”optSource=“dataReference”/>其中DataReference是對動態數據的引用。對動態數據的引用與定義對控制標簽的數據引用值使用相同的規范。在優選實施例中,所有屬性是強制的,除了可指定source和optSource中唯一的一個。如果指定optSource,則dataReference可以是不存在的數據引用。將腳本變量resultValue設置成具有指定返回結果數據元素的值。functionComponentif標簽該標簽用于條件地執行其他標簽調用并條件地生成ML輸出。該標簽具有以下格式<functionComponentif>conditional-functionComponent-body</functionComponentif>該標簽作為IF-THEN塊。如果在塊的末端functionComponentif塊的值是ture,則只包括由在該塊內的標簽中生成的ML輸出。在塊的開始,將塊的值初始化為false。通過調用下述Java方法設置塊的值functionComponentIfTag.setIfValue<PageContextpageContext,BooleanifValue>通常從通過在functionComponentif標簽的塊內的functionComponentcall標簽調用功能組件的execute()方法中調用setIfValue()方法。可以在相同的塊內多次調用setIfValue()方法。然而,最后一次調用確定用于塊的最終設置,用于判斷在塊內產生的ML輸出是否應該包括在生成的輸出頁面內。此外,可以條件地執行functionComponentif塊內的各種標簽。如果標簽包括屬性conditionalExecute=“true”,則該標簽只在functionComponentif塊的當前值為true的時候執行。隨后的標簽55支持conditionalExecute屬性functionComponentcall、presentationcontrol、presentationproducePage。在請求的時候可以將conditionalExecute屬性添加到其他標簽中。可以使用conditionalExecute屬性構建用于functionComponentif塊的邏輯“AND”條件。假設稱為“SelfValueFunctionComponent”的功能組件59獲得前提數據33并確定是否調用functionComponentIfTag.setIfValue()方法。可以在functionComponentif塊的開始使用functionComponentcall標簽調用該功能組件兩次。在第二個functionComponentcall上,其包括conditionalExecute屬性。這樣有效地使得functionComponentif塊的值成為第一SelfValueFunctionComponent調用的值與第二SelfValueFunctionComponent調用的值取“AND”。表示模板(PT)參考圖8(a)、圖8(b)、和圖9,根據本發明優選實施例示意性地示出顯示模板(PT)61。一組PT61文件定義客戶應用程序的“查看和感知”,每個PT61包括定義表示元素的模板、或用于客戶應用程序的輸出頁面79、或一部分輸出頁面79的一系列ML語句。用于客戶應用程序的PT61文件組具有特定的語言(例如,法語、英語)或格式(例如,THML、HDML)。在優選實施例中,PT61文件采用兩種格式中的一種。參考圖8(a),示出第一或者靜態PT65。靜態PT65只包括定義輸出頁面79或其一部分的表示元素的ML語句。在處理JSP49時,靜態PT65的ML語句用于定義輸出頁面79的靜態部分,例如頁眉或頁腳,即,對客戶應用程序的所有輸出頁面公用的輸出頁面79的這些部分。參考圖7和圖8(b),示出第二或動態PT67。動態PT67包括定義輸出頁面79或輸出頁面79一部分的表示元素的ML語句。它還包括至少一個控件63,其提供到由FC59生成的數據輸出27的連接。當處理JSP49的時候,動態PT67的ML語句定義合并了FC59的數據輸出27的輸出。例如,輸出頁面79或其一部分可以在表格中顯示訂單的定購細節(例如,定購項目的列表)。FC59的數據輸出可以是定購項目的列表,其顯示在具有由PT67定義的表示格式的HTML表格(即,控件63)中。在優選實施例中,明確的分級文件結構用于表示模板文件的使用。該級包括下列級別,順序為應用程序根段—為用于該指定應用程序級的根段。格式—該級別通過格式(例如,html,hdml部)組織文件。語言—該級別通過語言地區(例如,en_US、en_CA、fr_CA部)組織文件。應用程序指定級別—這(這些)級別可以定義為對具體應用程序的請求。如果指定單個的表示模板文件61,則其位于應用程序指定級內而不是位于語言級內。在優選實施例中,將“查看和感知”的共同元素分割成單獨的表示模板文件61。例如,如果應用程序的所有頁面均具有公共頁眉和公共頁腳,則這些部分的每一個將分別從它們本身的文件中抽取出來,使得他們可以由引用“包括”而不是具有在應用程序的所有頁面中復制的它們的內容。因此,認識到可以重新使用信使模板文件61(couriertemplatefile)以及結合的FC標簽59和PC標簽57,以生成應用程序頁面。例如,模板61之一可以表示多行表格中的一行,該表格具有引導用于行模板61的每個調用的插入的表格內容的適當的PC標簽57和FC標簽59。使用這個文件組織模式,可以確定到MLPT61文件的物理路徑,該文件給定包括任意應用程序指定級的適當根段路徑、文件格式、語言、和文件名。例如,應用程序可以具有定義成如下部分common、orderEntry、和orderHistory的一個應用程序指定級。應用程序自身具有與進行插入和處理命令有關的一系列頁面49,以及具有與進行選擇和察看命令歷史有關的另一系列頁面49。ML表示模板文件61組可以以如下方法組織.../orderApplication/html/en_CA/common/header.html.../orderApplication/html/en_CA/common/footer.html.../orderApplication/html/en_CA/orderEntry/search.html.../orderApplication/html/en_CA/orderEntry/entry.html.../orderApplication/html/en_CA/orderEntry/submit.html.../orderApplication/html/en_CA/orderHistory/search.html.../orderApplication/html/en_CA/orderHistory/display.html具有另一組文件,如下.../orderApplication/html/fr_CA/....../orderApplication/hdml/en_CA/....../orderApplication/hdml/fr_CA/...可以使用適當的WYSIWYG編輯器(例如,由SanFrancisco,CA的Macromedia開發的用于HTML文件的HomeSite)設計各個ML表示模板文件61。可以使用本領域技術人員熟知的任意其他適合的編輯器。ML表示模板文件61自身包括“純”置標語言(例如,HTML)。MLPT文件61表示可以包括動態內容(例如,MLPT67)的頁面。任意動態內容必須定位在位于頁面上的控件63內。每種置標語言都具有其自身的一組控件。每個控件63具有定義將插入控件63中的動態內容順序的標示符(即,在HTML中,id=“idvalue”)關鍵字。在ML文件中,控件可以具有空數據。該空數據在ML文件的設計階段被用于顯示。然而,當在控件中插入動態數據時,自動去除該空數據。在基于ML表示模板動態文件67的HTML的情況下,只要每個控件具有用作標示符關鍵字(即,id=“idvalue”)的唯一值,則下列控件的任意一個將被認為是動態數據插入文本字段、密碼字段、隱含字段、文本區、表格、列表框、復選框、單選按鈕、圖像、按鈕、圖像按鈕、提交按鈕、復位按鈕、鏈路、和取值范圍。在替換實施例中,ML文件可以包括本領域技術人員熟知的任意其他置標語言,例如,HDML或WML。表示組件(PC)參考圖4,示意性地示出表示組件(PC)161。PC161是表示功能性的明確、獨立的部分。每個表示組件161處理相應的表示元素。在優選實施例中,每個表示組件161作為基于一般基類的Java類存在。當客戶應用程序請求表示組件161時,基于表示組件161的邏輯名稱使用Java反射簡單地初始化。表示組件161符合JavaBean的規范。表示組件(PC)標簽擴展表示組件文件161包括使用一組表示組件標簽擴展57。表示組件文件自定義標簽擴展57提供在表示文件67中的控件63、動態數據27、以及JSP頁49中的表示組件161之間的聯接。此外,這些擴展57還提供生成后序顯示頁面79的能力。presentationpage標簽該標簽定義指定表示組件文件161將用于當前處理頁面49中。該標簽具有如下格式<presentationpagename=“presentationName”root=“rootPath”source=“fileName”value=“fileName”format=“presentationFormat”language=“languageSpecification”absolute=“true”/>其中presentationName是將由處理頁面49中引用的該表示頁面的唯一名稱。rootPath(可選的)是文件的根路徑。fileName是包括任意應用程序指定級名稱的文件名。presentationFormat是表示文件61的格式,其必須是下述值之一html、hdml、或wml。languageSpecification(可選的)是表示文件61內容的語言,如果指定,則必須是下述值之一en_CA、fr_CA等。在優選實施例中,name和format屬性是強制的。必須明確指定source或value屬性之一。可以直接將除了value之外的每個屬性指定為值,否則可以對動態數據引用(即,dataReference)。除非將absolute屬性指定為ture,到表示文件的路徑均被認為是相關的。presentationcontrol標簽該標簽連接從動態表示模板文件67到控制動態數據和表示組件161的資源的控件63。當動態表示模板文件67的特定格式支持控件63的類型時,使用該標簽。在優選實施例中,該標簽具有如下格式<presentationcontrolname=“controlName”type=“controlType”parentPresentation=“parentName”value=“literalValue”source=“dateReference”optSource=“dateReference”empty=“booleanValue”id=“identifier”conditionalExecution=“true”/>其中controlName是將被引用該控件的唯一名稱。controlType是控件的具體類型。如果HTML是選擇的ML,則HTML控件包括input(要求屬性type,設置用于文本字段的text,設置用于密碼字段的password,設置用于隱含字段的hidden,設置用于按鈕的button,設置用于圖形按鈕的image,設置用于提交按鈕的submit,設置用于復位按鈕的reset,設置用于復選框的checkbox,設置用于單選按鈕的radio)、textarea、table、select(列表框)、img(圖像)、(鏈接)或取值范圍。parentName是包括為表示頁面或其他頁面的該控件的雙親段的名稱。如果控件被指定直接地包括在頁面中,則值為表示名稱、點(‘.’)、和控件名稱。如果控件被指定在直接地包括在頁面中的其他控件中,則值為表示名稱、點(‘.’)、直接控件名稱、點(‘.’)、和控件名稱。這不限于在控件內的控件嵌入。literalValue是硬編碼的文字值。dataReference是對動態數據的引用。由該屬性引用的數據類型必須與控件類型一致。動態數據引用可以是對用于定義該處理頁面或小服務程序請求定義的關鍵字-值成對數據的引用或者是對從應用程序組件返回的結果數據的引用。如果關鍵字-值成對數據的值是簡單值,則該引用是簡單地引用關鍵字本身。例如,orderNumber如果關鍵字-值成對數據的值是結構,則該引用是關鍵字、點(‘.’)、和結構的元素名稱。(如果元素本身是結構,則其還可以進一步定義)例如,orderHeaderAttr.orderStatus返回的結果數據引用包括功能組件59實例名稱、點(‘.’)、和返回結果數據元素名稱。例如,orderGet_orderEntry.orderID如果返回的結果數據元素是結構,并且期望的動態數據27是結構的元素,則通過點(‘.’)和元素名稱定義返回的結果數據。(如果元素本身是結構,則其還可以進一步定義)例如,orderGet_orderEntry.orderHeaderAttr.orderStatus如果以字符@開始動態數據引用,則其為隱含間接引用。在這種情況下,一旦確定返回結果數據元素,則其自身被認為是通過應用上述規則重新估計的動態數據引用。(如果隨后認為是動態數據引用的返回結果數據元素也以字符@開始,則其也為隱含間接引用,并且估計處理全部重新開始。)booleanValue是true或false。Identifier(可選的)是在表示文件中的控件的標識符。在動態表示文件67中的控件必須具有等同的id=“identifier”屬性。如果在presentationcontrol標簽中沒有指定標識符,則具有名稱id的標識符必須設置為presentationattribute標簽中的值identifier。conditionalExecution=“true”該屬性表示該標簽的執行是以當前具有true值的附帶applicationcomponentif標簽為條件的。name、type、和parentPresentation屬性是強制的。僅可以指定value、source、或者optSource之中的一個。如果指定optSource,則dataReference可以是不存在的數據引用。指定的屬性提供用于ML文件中控件的主體內容。如果未指定這些屬性,則在ML文件中沒有主體內容被替代。presentationattribute標簽該標簽指定用于特定控件63的特定標簽。該標簽必須在presentationcontrol標簽的主體內定義。該標簽具有如下格式<presentationattributename=“attributeName”value=“literalValue”source=“dateReference”optSource=“dateReference”empty=“booleanValue”/>其中attributeName是設置的屬性名稱。literalValue是硬編碼的文字值。dataReference是對動態數據的引用。booleanValue是true或false。除了只可以指定value、source、optSource、或者empty之中的一個,全部屬性是強制的。如果指定optSounce,則dataReference可以是不存在的數據引用。presentationproducePage標簽該標簽定義在首先將全部動態內容移到PT中之后,基于指定的表示模板文件61將產生用于顯示頁面的輸出。在處理文件49中碰到該標簽時(即,在執行多層應用程序期間)產生輸出。如果碰到多個producePage標簽,則產生的顯示頁面79將包括以在處理頁面49中碰到的順序從每個producePage標簽中輸出的拼接。該標簽具有以下格式<presentationproducePagepage=“PresentationPageName”conditionalExecution=“true”/>其中PresentationPageName是表示文件61的名稱,以生成用于預先必須通過presentationpage標簽定義的表示文件61的輸出。conditionalExecution=“true”該屬性表示該標簽的執行是以當前具有true值的附帶applicationcomponentif標簽為條件的。頁面屬性是強制的。presentationclear標簽該標簽清除JSP49的輸出緩沖器。通常用于在生成任意內容之前清除JSP服務器在XML標簽周圍插入的空行。在HTML中,忽略該數據,但是純文本文檔沒有這些附加行。該標簽沒有屬性。presentationinterceptor標簽該標簽是截取其主體的輸出并將其插入到resultValue頁面變量中,以及可選地將其復制到頁面輸出的主體標簽。該標簽具有以下格式<presentationinterceptorinterceptEnabled=“booleanValue”duplicateOutput=“booleanValue”/>其中interceptEnabled是表達式,如果為真,則可以截取。duplicateOutput是表達式,如果為真,則將截取的輸出復制到所附頁面。interceptEnabled屬性是強制的,duplicateOutput屬性是可選的。使用處理文件定義用于小服務程序客戶應用程序的處理邏輯參考圖4、圖6(a)、圖6(b)、圖7、圖8(a)、圖8(b)、和圖9,根據本發明優選實施例示意性地示出了小服務程序客戶應用程序中的JSP49的處理邏輯。在一組JSP49處理文件中定義用于小服務程序客戶的處理邏輯。處理文件執行兩個明確的處理任務。首先,處理文件49提供調用執行指定處理功能性的功能組件59的能力。指定處理功能性包括處理輸入數據33和提供輸出數據27。處理文件49還定義在動態表示模板文件67定義的控件63和動態數據本身之間的連接69。在完成用于具體輸出頁面79的全部指定處理功能性,并生成全部動態數據27之后,可以通過將動態數據移入動態表示文件67中以及生成具有表示組件161的表示元素來產生下一顯示頁面79。在優選實施例中,使用JavaServerPage(JSP)執行處理文件49。為了使處理文件用戶界面更友好,引入兩組用自定義JSP標簽擴展。功能組件(FC)自定義標簽55提供調用功能組件59的能力。表示文件自定義標簽61提供動態數據和表示文件中控件63之間的連接,還提供生成具有表示組件161的顯示頁面79的能力。客戶應用程序基礎架構(infrastructure)97定義執行同時構成客戶應用程序71的功能框架的自定義JSPFC標簽擴展55和PC標簽擴展57庫的類。該類支持客戶應用程序功能組件59和表示組件161。基礎架構97提供功能組件59和指定應用程序用戶之間的界面。還提供用于小服務程序GUI、容器(applet)GUI、以及直接可編程界面的合適的連接點。基礎架構還提供一組類,其實現用于支持客戶應用程序的表示組件161的自定義JSP擴展庫。參考圖10和圖11,示出根據本發明優選實施例組合的客戶應用程序71的邏輯圖。為了示例的目的,描述小服務程序客戶應用程序。通過從終端11上的瀏覽器內輸入應用程序71開始JSP49的URL的用戶調用小服務程序引擎23。小服務程序客戶程序71邏輯上包括一系列Java服務器頁49,其中每一頁均定義客戶應用程序71的處理邏輯的一部分。每個頁面49具有一個或多個提供頁面的“查看和感知”的關聯的表示模板61。每個頁面49還具有一個或多個提供其處理邏輯的關聯的功能組件59和提供其表示邏輯的表示組件161。在客戶應用程序71的執行中的任意指定點處,用戶操作端11在本地瀏覽器窗口中瀏覽頁面并與其相互作用。用戶鍵入信息,然后使得(例如,通過“推”按鈕)來自頁面的數據與指向客戶應用程序71下一頁面49的指針一起返回網絡服務器15。用戶數據以一組關鍵字值對73的形式返回到網絡服務器15。在這一點,處理客戶應用程序71的下一頁面49,將通過PC161生成并用于生成新的瀏覽頁面79的輸出數據27退回到終端11上的用戶瀏覽器窗口,并且整個循環再次開始。總的來說,小服務程序客戶應用程序71的每個頁面49·接收一組關鍵字值的成對數據73作為輸入·執行處理步驟77·生成新顯示頁面79,用于包含所有請求的嵌入程序結構用戶操作終端11,以改變到下一頁面的控制流的方向并將關鍵字值的成對數據73返回到下一頁面。在替換實施例中,可以組合容器客戶程序93或直接可編程界面客戶程序95。(圖13)容器客戶程序93是針對在終端11上運行的客戶應用程序71的基于JavaSwing的界面。在本地運行的時候,終端11上的用戶直接與應用程序互相作用。客戶應用程序71經由CORBA界面97通信通過網絡13(例如,因特網)與Net*Suite服務器通信。使用JavaSwingGUI組件將響應直接寫到屏幕。直接可編程界面是使用應用程序的另一機構。直接可編程界面客戶程序95是指定的一組Java代碼。直接客戶程序95示出一組功能組件59,以提供用于客戶應用程序71的處理邏輯。直接客戶程序95適當地設置前提數據33,調用execute()方法,并且得到用于每個功能組件59實例的返回數據27。如果被請求,使用直接可編程界面的客戶程序提供其自身的GUI。功能組件59的連接是在客戶程序邏輯本身內的“硬編碼”,以定義應用程序。示例參考圖12,通過根據本發明優選實施例的實例示出FC標簽庫指令51、FC標簽55、FC59、PC標簽庫指令53、PC標簽57、和PC161的使用,以生成輸出頁面79。在此實例中,有包括管理步驟的指令輸入應用程序,以批準指令,在這種情況下,在指令被批準之后提交指令。對于該實例,假設先前的JSP49選擇指令,并且指令標識符(orderID)FC59作為來自于在先前JSP49上執行的orderSelectFC59的返回結果是可用的。當前JSP49是orderSubmit頁面。用于該頁面的處理邏輯包括調用將檢索用于選擇的指令的指令細節83的FC59(orderGet)。在這種情況下,將要返回至用戶瀏覽器窗口的結果輸出頁面79將顯示指令序號81和指令細節83。如果指令細節83不可用,則FC59返回FC_EXCEPTION_1異常。在這種情況下,應用程序將跳轉到錯誤JSP(noOrderError.jsp)。通過轉發一般的錯誤JSP頁面(error.jsp)處理任意其他異常。定義用于輸出頁面79布局的PT61利用在該應用程序中的所有頁面中共有的PT頁眉85(orderApplicationHeader.html)和PT頁腳87(orderApplicationFooter.html)(以HTML格式)。沒有插入到PT頁眉85和PT頁腳87內的動態數據,它們是靜態表示模板65的實例。當前頁面的PT主體89來自于orderSubmitHTML文件。該文件包括將顯示指令序號81的文本字段(只讀)。該控件通過id=orderNumField標記。將使用表格控件以表格格式顯示指令細節83。表格控件通過id=orderDetail標記。最后,在頁面上具有提交按鈕91,其將調用將實際上提交該指令的隨后的JSP頁面(submit.jsp)。PT主體89是動態PT67的實例。PTHTML文件85、87、和89提供用于由JSP49生成的顯示頁面79的布局模板,該布局模板由PC161生成。用于應用程序這部分的JSP49如下2<!--*************************3Thispageisusedbyanadministratortosubmitanorder.4**************************-->56<%@pagesession=“true”buffer=“64kb”autoFlush=“true”7 isThreadSafe=“true”errorPage=“.../errorPage.jsp”%><%@tagliburi=“/servlet/FunctionComponentTagsClient.jar”<!--SIPO<DPn="39">--><dpn="d39"/>prefix=“applicationcomponent”%>8<%@tagliburi=“/servlet/PresentationComponentTagsClient.jar”prefix=“presentation”%>9<functionComponentinit>10<!--CreateandOrderGetfunctioncomponentandexecuteitusingtheresultsfromafunctioncomponent(OrderSelect)executedonapreviousJSPpage.!-->11<functionComponentcallname=“OrderGet_OrderEntry”>12<functionComponentprerequisitetarget=“Ordered”13Source=“OrderSelect_OrderEntry.orderID”/>14<functionComponenterrorname=“NoOrder”page=“NoOrderError.jsp”/>15</functionComponentcall>16<!--Definetheheaderpresentation.Thereisnodynamicdataintheheaderpresentation.!-->17<functionComponentpagename=“header”source=“OrderApplicationHeader”18language=“en_CA”format=“html”/>19<!--SIPO<DPn="40">--><dpn="d40"/>20<!--Definethebodypresentation.Thispresentationcontainsdynamicdata.Thedynamicdatamustbeconnectedtothepresentation.-->21<presentationpagename=“body”Source=“OrderSubmit”22language=“en_CA”format=“html”/>23<presentationcontrolname=“OrderNumField”type=“span”id=“OrderNumField”24parentPresentation=“body”source=“OrderGet_OrderEntry.orderNum”/>25<presentationcontrolname=“OrderDetails”type=“table”id=“OrderDetail”26parentPresentation=“body”source=“OrderGet_OrderEntry.orderDetailTable”/>2728<!--Definethefooterpresentation.Thereisnodynamicdatainthefooterpresentation.-->29<presentationpagename=“footer”source=“OrderApplicationFooter”30language=“en_CA”format=“html”/>3132<!--Nowthatalltheelementsofthepageareavailable,<!--SIPO<DPn="41">--><dpn="d41"/>33thepageitselfcanbeproduced.-->34<presentationproducePagepage=header/>35<presentationproducePagepage=“body”/>36<presentationproducePagepage=“footer”/>參考圖13,根據本發明優選實施例示出了系統10和客戶應用程序71的處理輸出的擴展示意圖。操作網絡終端11的網絡用戶通過網絡13請求遠程定位資源(JSP49)。JSP49包括FC標簽庫指令51,其當處理用戶請求時,指定可以由小服務程序引擎23使用的自定義FC標簽55;和PC標簽庫指令53,其當匯編在終端11處返回給用戶的輸出頁面79時,指定可以由小服務程序引擎23使用的自定義PC標簽57。JSP49還包括用于調用其相應的FC59的FC標簽55和提供到PC161的連接的PC標簽57。FC標簽55可以用于調用其相應的FC59。其通過指定將要被調用(通過“name”)的FC59實現。FC標簽55進一步定義前提或輸入數據33,并對輸入數據33的“source”提供引用101。在此實例中,輸入數據33位于數據庫17中,其由應用程序服務器19通過數據庫服務器119被訪問。因此,當執行FC59時,通過應用程序服務器19請求并接收來自數據庫17的輸入數據33。然后,通過FC59處理該數據并生成數據輸出27。PC標簽可以用于調用其相應的PC161。通過指定將要被調用(通過“name”)的PC161實現。也對PT61的“source”提供引用。因此,當執行PC161時,在表示模板61中執行表示指令并生成相應的表示元素或輸出79。PC標簽57可以引用兩種類型的PT61中的一種;靜態PC65和動態PT67。通過名稱和位置或來源查詢PT65和76。靜態PT65是包括定義部分輸出頁面79的表示元素的ML語句的ML文件。靜態PT65即不包括引用,也不將其與在PC161處理期間由FC59生成的輸出數據27合并。它們通常被保留,以定義那些與客戶應用程序79的所有輸出頁面79共有的輸出頁面79的元素(例如,頁眉和頁腳),盡管它們的使用不限于此規則。動態PT67還是包括定義部分輸出頁面79的表示元素的ML語句的ML文件。然而,動態PT67還包括至少一個控件63,其對由FC59生成的輸出數據27提供引用或連接69。引用動態PT67的PC標簽57除了動態PT67的名稱和“source”之外,還包括包括在輸出頁面79的一部分中的對控件63類型的引用和對在PC161處理期間與控件63合并的“output_data_27”的引用或指令103。一旦小服務程序引擎23執行編譯的Java小服務程序31并處理用戶請求,則其生成輸出頁面79,該輸出頁面的一部分由PT65和67定義。可以認識到,JSP49包括多個PT61,其中每一個用于定義輸出頁面79的一部分。這些PT61可以重復使用,所以相同的PT65、67可以連接到不同配置的PC標簽57。例如,可以通過兩個具有引用69的不同的控件將PT67與兩個不同的輸出數據27連接。因此,這將在具有通過兩個輸出數據27的不同內容部分控件的兩個不同主體內容的輸出頁面79中生成兩個表格。客戶應用程序基礎架構參考圖14,示出了使用一系列功能組件59匯編的客戶應用程序的整體結構。出于說明的目的,通過客戶應用程序基礎架構97的替換實施例,全部描述小服務客戶程序75、容器客戶程序93、和直接可編程界面客戶程序95與FC59的相互作用。例如,服務器19執行用于客戶應用程序71的CORBA或EJB界面99來使用。在執行客戶應用程序71處理邏輯期間,在FC59中形成指定的服務器19調用。客戶應用程序基礎架構97定義與構成客戶應用程序71的功能框架一起執行自定義JSPFC標簽擴展55和PC標簽擴展57庫的類。在優選實施例中,一組類執行用于支持客戶應用程序功能組件59(功能組件基礎架構)的自定義JSP擴展庫,以及第二組類執行用于支持應用程序表示組件161(表示組件基礎架構)的自定義JSP擴展庫。功能組件基礎架構(FCI)FC59基礎架構提供功能組件59與指定應用客戶程序(小服務客戶程序75、容器客戶程序93、和DPI客戶程序95)之間的界面。提供用于小服務程序GUI、容器GUI、和直接可編程界面的適當的連接點。FC基礎架構提供一組類,其執行用于支持客戶應用程序的功能組件59的自定義JSP擴展庫。這些類包括FunctionComponentInitTag、FunctionComponentInitTagExtraInfo、FunctionComponentCallTag、FunctionComponentCallTagExtraInfo、FunctionComponentPrerequisiteTag、FunctionComponentDebugTag、FunctionComponentErrorTag、FunctionComponentGetValueTag、和FunctionComponentGetValueTagExtraInfo。公共類FunctionComponentInitTag該類執行用于初始化功能組件自定義標簽55的自定義JSP標簽擴展庫。該標簽存在以定義FunctionComponentInitTagExtraInfo類中的變量。公共方法doStartTag()因為對該標簽中內容不支持,該方法簡單地返回SKIP_BODY。公共方法doEndTag()未請求指定的處理。返回值EVAL_PAGE。公共類FunctionComponentInitTagExtraInfo該類創建用于功能組件標簽55的全部腳本變量。公共類FunctionComponentCallTag該類執行用于功能組件59調用支持的自定義JSP標簽擴展庫。公共獲取/設置方法在優選實施例中,標簽55的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getName(),setName().getDontResetAllData(),setDontResetAllData().getDebugLevel(),setDebugLevel()專用方法setFunctionComponentInstance()該方法存儲當前功能組件59的實例。由于可以通過functionComponentprerequisite標簽和functionComponenterror標簽恢復功能組件59,由functionComponentcall標簽設置功能組件59的實例。保護方法getFunctionComponentInstance()該方法保存當前的功能組件59實例。保護方法setFunctionComponentException()該方法保存由functionComponenterror標簽指定的功能組件異常名稱和頁面。異常組存儲在關鍵字為異常名稱且值為異常頁面的hashTable中。專用方法setFunctionComponentException()該方法返回用于命名異常的異常頁面,或者如果沒有指定頁面則返回空。公共方法doStartTag()分解功能組件59的名稱被分解和分隔為類名稱和功能組件實例描述。然后,初始化功能組件59并設置實例描述。將功能組件實例名稱和目標引用保存在作為對話語境一部分的雜湊表中。此外,使用getFunctionComponentInstance()方法保存功能組件實例本身。在該標簽的主體中設置前提數據33和異常處理。在處理主體之后,通過doEndTag()方法實現功能組件59的實際啟用。該標簽請求主體,因此該方法簡單地返回EVAL_BODY_TAG。公共方法doAfterBody()如果存在任意主體內容,則將其附加到用于頁面的緩沖輸出。在主體上未請求迭代,因此該方法簡單返回SKIP_BODY。公共方法doEndTag()將寫入用于頁面的任意緩沖輸出。必須由主體中的functionComponentprerequisite標簽設置全部前提數據33。調用功能組件59的execute()方法。如果發生(throw)異常,則將必須以下列方式進行解釋。如果存在對異常的錯誤描述符屬性的設置,則可以將該異常將保存在FunctionComponentException腳本變量中,并且將請求發送到定義的JSP49。在這種情況下,返回值SKIP_PAGE。在所有的其他情況下,包括發生非異常的情況,返回值EVAL_PAGE。公共類FunctionComponentCallTagExtraInfo該類實現用于在針對functionComponentCall標簽處理異常(由functionComponenterror標簽定義)的情況下設定的functionComponentException的腳本變量定義。公共類FunctionComponentPrerequisiteTag該類實現用于功能組件59的前提數據33設置支持的自定義JSP標簽55擴展庫。公共獲取/設置方法標簽的每個屬性都具有關聯的獲取和設置方法。具體地,創建以下方法。.getTarget(),setTarget().getSource(),setSource()該屬性的每一個的類型為String,而不是前提數據33的實際類型。.getValue(),setValue().getEmpty(),setEmpty()公共方法doStartTag()如果該標簽不在functionComponentCall標簽內,則發生適當的JspTagException。可以使用functionComponentCall標簽處理程序的getFunctionComponentInstance()方法檢索功能組件59對象本身。因為不支持該標簽中的內容,該方法簡單地返回SKIP_BODY。公共方法doEndTag()使用對功能組件59類的反射進行設置目標數據元素。如果設置為empty屬性,則將空值用于設置方法。如果設定為value屬性,則提供文字值用于設置方法。否則,必須解釋source屬性,以得到用于設置方法的值。source屬性的解釋包括以下步驟●分離基址名稱(如果為一個,則第一個“.”左側的每個字符)與定義路徑(如果為一個,則第一個“.”右側的每個字符)●如果基址名稱為腳本變量名稱●則查找腳本變量名稱值●如果基址名稱為小服務器程序請求參數名稱●則查找小服務程序請求參數名稱值●否則,基址名稱必須為功能組件59的實例名稱●查找功能組件59的實例名稱,以得到功能組件59的實例對象●如果有定義路徑●則通過調用在定義路徑組件的每一個上的獲取方法估計定義路徑●現在,其將是用于前提數據元素的值●返回值EVAL_PAGE公共類FunctionComponentDebugTag該類實現用于功能組件調試支持的自定義JSP標簽擴展庫。公共獲取/設置方法在優選實施例中,標簽的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getDebugLevel(),setDebugLevel().getDebugFile(),setDebugFile().getValue(),setValue().getSource(),setSource()公共方法doStartTag()因為對該標簽中內容不支持,該方法簡單地返回SKIP_BODY。公共方法doEndTag()使用對功能組件類的反射進行設置目標數據元素。如果設置為empty屬性,則將空值用于設置方法。如果設定為value屬性,則提供文字值用于設置方法。否則,必須解釋source屬性,以得到用于設置方法的值。source屬性的解釋包括以下步驟●分離基址名稱(如果為一個,則第一個“.”左側的每個字符)與定義路徑(如果為一個,則第一個“.”右側的每個字符)●如果基址名稱為腳本變量名稱●則查找腳本變量名稱值●如果基址名稱為小服務程序請求參數名稱●則查找小服務程序請求參數名稱值●否則,基址名稱必須為功能組件59的實例名稱●查找功能組件59的實例名稱,以得到功能組件59的實例對象●如果有定義路徑●則通過調用在定義路徑組件的每一個上的獲取方法估計定義路徑●現在,其將是用于前提數據元素的值●返回值EVAL_PAGE公共類FunctionComponentErrorTag該類實現用于功能組件59錯誤支持的自定義JSP標簽擴展庫。公共獲取/設置方法標簽的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getName(),setName().getPage(),setPage()公共方法doStartTag()如果該標簽不在functionComponentCall標簽內,則發生適當的JspTagException。可以使用functionComponentCall標簽處理程序的getFunctionComponentInstance()方法檢索功能組件59對象本身。因為不支持該標簽中的內容,該方法簡單地返回SKIP_BODY。公共方法doEndTag()通過調用functionComponentCall標簽處理程序的setFunctionComponentException()方法進行定義錯誤。返回值EVAL_PAGE。公共類FunctionComponentGetValueTag該類實現用于獲取功能組件59返回的結果數據值的自定義JSP標簽擴展庫。公共獲取/設置方法在優選實施例中,標簽的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getSource(),setSource()公共方法doStartTag()因為對該標簽中的內容不支持,該方法簡單地返回SKIP_BODY。公共方法doEndTag()使用對功能組件類的反射進行設置目標數據元素。如果設置為empty屬性,則將空值用于設置方法。如果設定為value屬性,則提供文字值用于設置方法。否則,必須解釋source屬性,以得到用于設置方法的值。source屬性的解釋包括以下步驟●分離基址名稱(如果為一個,則第一個“.”左側的每個字符)與定義路徑(如果為一個,則第一個“.”右側的每個字符)●如果基址名稱為腳本變量名稱●則查找腳本變量名稱值●如果基址名稱為小服務程序請求參數名稱●則查找小服務程序請求參數名稱值●否則,基址名稱必須為功能組件59的實例名稱●查找功能組件59的實例名稱,以得到功能組件59的實例對象●如果有定義路徑●則通過調用在定義路徑組件的每一個上的獲取方法估計定義路徑●現在,其將是用于前提數據元素的值●返回值EVAL_PAGE公共類FunctionComponentGetValueTagExtraInfo該類實現用于對functionComponentgetValue標簽設定的resultValue的腳本變量定義。表示組件基礎架構(PCI)PC161基礎架構提供一組類,其實現用于支持用戶應用程序的表示組件161的自定義JSP擴展庫。這些類包括PresentationPageTag、PresentationControlTag、PresentationAttributeTag、以及PresentationProducePageTag。公共類PresentationPageTag該類實現用于表示組件161支持的自定義JSP標簽擴展庫。公共獲取/設置方法PC標簽57的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getName(),setName().getRoot(),setRoot().getSource(),setSource().getFormat(),setFormat().getLanguage(),setLanguage()公共方法doStartTag()因為對該標簽中的內容不支持,該方法簡單地返回SKIP_BODY。公共方法doEndTag()初始化頁面制作者對象,命名為名稱屬性的值并存儲在pageContext中。使用source、format、和language屬性確定關聯的ML文件。所有處理完成之后,返回值EVAL_PAGE。公共類PresentationControlTag這組類實現用于指定控件的表示組件161支持的自定義JSP標簽擴展庫。公共獲取/設置方法標簽的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getName(),setName().getType(),setType().getId(),setId().getParentPresentation(),setParentPresentation().getSource(),setSource().getValue(),setValue().getEmpty(),setEmpty()公共方法doStartTag()該標簽57請求主體,因此該方法簡單地返回EVAL_BODY_TAG。公共方法doAfterBody()如果存在任意主體內容,則其應該附于用于頁面的緩沖輸出。在主體上沒有請求迭代,因此,該方法簡單地返回SKIP-BODY。公共方法doEndTag()該雙親名稱為已知的頁面制造者對象或在pageContext中發現的控件對象。初始化適當類型的控件,并存儲在pageContext中。設置控件的數據控件屬性。如果設置為empty屬性,則將空值用于屬性。如果設定為value屬性,則其提供文字值用于屬性。否則,解釋source屬性,以得到用于屬性的值。source屬性的解釋包括以下步驟●分離基址名稱(如果為一個,則第一個“.”左側的每個字符)與定義路徑(如果為一個,則第一個“.”右側的每個字符)●如果基址名稱為腳本變量名稱●則查找腳本變量名稱值●如果基址名稱為小服務程序請求參數名稱●則查找小服務程序請求參數名稱值●否則,基址名稱必須為功能組件59的實例名稱●查找功能組件59的實例名稱,以得到功能組件59的實例對象●如果有定義路徑●則通過調用在定義路徑組件的每一個上的獲取方法估計定義路徑●現在,其將是用于前提數據元素的值●全部處理完成之后,返回值EVAL_PAGE公共類PresentationAttributeTag這組類實現用于指定控件屬性的表示組件161支持的自定義JSP標簽擴展庫。公共獲取/設置方法該標簽的每個屬性必須具有關聯的獲取和設置方法。具體地,創建以下方法。.getName(),setName().getSource(),setSource().getValue(),setValue().getEmpty(),setEmpty()公共方法doStartTag()因為對標簽中的內容不支持,該方法簡單地返回SKIP_BODY。公共方法doEndTag()在pageContext中發現雙親控件并設置屬性。如果設置為empty屬性,則將空值用于屬性。如果設定為value屬性,則其提供文字值用于屬性。否則,解釋source屬性,以得到用于屬性的值。source屬性的解釋包括以下步驟●分離基址名稱(如果為一個,則第一個“.”左側的每個字符)與定義路徑(如果為一個,則第一個“.”右側的每個字符)●如果基址名稱為腳本變量名稱●則查找腳本變量名稱值●如果基址名稱為小服務程序請求參數名稱●則查找小服務程序請求參數名稱值●否則,基址名稱必須為功能組件59的實例名稱●查找功能組件59的實例名稱,以得到功能組件59的實例對象●如果有定義路徑●則通過調用在定義路徑組件的每一個上的獲取方法估計定義路徑●現在,其將是用于前提數據元素的值●全部處理完成之后,返回值EVAL_PAGE公共類PresentationProducePageTag該類實現用于生成輸出頁面的表示組件161支持的自定義JSP標簽擴展庫。公共獲取/設置方法標簽的每個屬性均具有關聯的獲取和設置方法。具體地,創建以下方法。.getPage(),setPage()盡管參考某些具體的實施例描述了本發明,對于本領域技術人員來說,在不背離在所附權利要求中概括的本發明的精神和范圍的情況下,各種更改顯而易見。權利要求1.一種用于托管在網絡上與用戶界面相互作用的計算機可執行多層應用程序的方法,所述應用程序包括應用程序表示層,所述方法包括以下步驟選擇第一表示模板,所述第一模板包括用于定義相應的第一表示元素的第一表示指令;選擇用于處理所述第一表示指令的所述應用程序表示層的第一表示組件;以及將所述第一表示組件連接到所述第一模板,其中,在執行用于隨后傳遞到所述用戶界面的所述多層應用程序時,所述第一組件處理所述第一表示指令并生成所述第一表示元素。2.根據權利要求1所述的方法,還包括附加步驟選擇第二表示模板,所述第二模板包括用于定義相應的第二表示元素的第二表示指令;選擇用于處理所述第二表示指令的所述第一表示組件;以及將所述第一組件連接到所述第二模板;其中,在執行用于隨后傳遞到所述用戶界面的所述多層應用程序時,所述第一組件處理所述第二表示指令并生成所述第二表示元素。3.根據權利要求1所述的方法,其中,所述多層應用程序還包括應用程序邏輯層。4.根據權利要求1所述的方法,其中,所述方法包括以下附加步驟選擇輸入數據;選擇用于處理所述輸入數據的所述應用程序邏輯層的第一功能組件;以及將所述輸入數據連接到所述第一功能組件,其中,在執行所述多層應用程序時,所述第一功能組件處理所述輸入數據并生成輸出數據。5.根據權利要求4所述的方法,其中,所述第一模板還包括用于進一步將所述相應的第一表示元素定義為包括所述輸出數據的輸出數據表示指令。6.根據權利要求5所述的方法,包括以下附加步驟引導所述第一表示組件,以處理所述輸出數據表示指令,其中,在執行所述多層應用程序時,所述第一表示組件處理所述輸出數據表示指令并生成結合所述輸出數據的所述第一表示元素。7.根據權利要求2所述的方法,其中,所述表示模板是計算機可讀文件。8.根據權利要求7所述的方法,其中,所述表示指令選自包括所述第一表示組件的布局、字體、以及格式的組。9.根據權利要求8所述的方法,其中,將所述表示指令寫入置標語言中。10.根據權利要求9所述的方法,其中,所述置標語言選自包括HTML、HDML、和WML的組。11.根據權利要求5所述的方法,其中,所述輸出數據表示指令定義控件,在所述控件中顯示輸出數據。12.根據權利要求11所述的方法,其中,所述控件選自包括文本字段、密碼字段、隱含字段、文本區、表格、列表框、復選框、單選按鈕、圖像、按鈕、圖像按鈕、提交按鈕、復位按鈕、鏈接、和取值范圍的組。13.根據權利要求1所述的方法,其中,所述第一表示組件是計算機可執行文件。14.根據權利要求13所述的方法,其中,所述計算機可執行文件是JavaBean。15.根據權利要求4所述的方法,其中,所述第一功能組件是計算機可執行文件。16.根據權利要求15所述的方法,其中,所述計算機可執行文件是JavaBean。17.根據權利要求1所述的方法,其中,所述第一表示組件通過方向元素連接到所述第一表示模板。18.根據權利要求17所述的方法,其中,所述方向元素指定所述第一表示模板的位置并將所述第一表示組件引導至指定位置。19.根據權利要求18所述的方法,其中,所述方向元素是第一表示組件標簽。20.根據權利要求19所述的方法,其中,所述第一表示組件標簽選自包括頁面標簽、控制標簽、屬性標簽、產生頁面標簽、清零標簽、和消息攔截標簽的組。21.根據權利要求19所述的方法,其中,所述第一表示組件標簽表示為方向模塊的指令,所述方向模塊執行所述多層應用程序。22.根據權利要求21所述的方法,其中,所述方向模塊是Java服務器頁。23.根據權利要求1所述的方法,其中,所述第一功能組件通過方向元素鏈接到所述輸入數據。24.根據權利要求23所述的方法,其中,所述方向元素指定所述輸入數據的位置并且將所述第一功能組件引導至指定位置。25.根據權利要求24所述的方法,其中,所述方向元素是第一功能組件標簽。26.根據權利要求25所述的方法,其中,所述第一功能組件標簽選自包括初始化標簽、調用標簽、前提標簽、調試標簽、錯誤標簽、賦值標簽、條件標簽的組。27.根據權利要求26所述的方法,其中,所述第一功能組件標簽表示為方向模塊的指令,所述方向模塊執行所述多層應用程序。28.根據權利要求21所述的方法,其中,所述方向模塊是Java服務器頁。29.根據權利要求1所述的方法還包括以下步驟在用戶界面上將顯示項表示成多個顯示區域,至少兩部分與表示模板的不同的一個部分關聯。30.根據權利要求29所述的方法,其中,所述表示模板是可重復使用的,使得所述模板之一用于生成所述部分中的至少兩個。31.一種用于托管在網絡上與用戶界面相互作用的計算機可執行多層應用程序的系統,所述應用程序包括應用程序表示層,所述系統包括第一表示模板,所述第一模板包括用于定義相應的第一表示元素的第一表示指令;所述應用程序表示層的第一表示組件,用于處理所述第一表示指令;以及第一方向元素,用于將所述第一表示組件連接到所述第一模板,其中,在執行用于隨后傳遞到所述用戶界面的所述多層應用程序時,所述第一組件處理所述第一表示指令并生成所述第一表示元素。32.根據權利要求31所述的系統,還包括第二表示模板,所述第二模板包括用于定義相應的第二表示元素的第二表示指令;以及第二方向元素,用于將所述第一組件連接到所述第二模板,其中,在執行用于隨后傳遞到所述用戶界面的所述多層應用程序時,所述第一組件處理所述第二表示指令并生成所述第二表示元素。33.根據權利要求31所述的系統,其中,所述多層應用程序還包括應用程序邏輯層。34.根據權利要求31所述的系統,還包括用于處理輸入數據的所述應用程序邏輯層的第一功能組件;以及所述第一方向元素進一步將所述輸入數據連接到所述第一功能組件,其中,在執行所述多層應用程序時,所述第一功能組件處理所述輸入數據并生成輸出數據。35.根據權利要求34所述的系統,其中,所述第一模板還包括用于進一步將所述相應的第一表示元素定義為包括所述輸出數據的輸出數據表示指令。36.根據權利要求35所述的系統,其中,在執行所述多層應用程序期間,所述第一表示組件處理所述輸出數據表示指令并生成結合所述輸出數據的所述第一表示元素。37.根據權利要求32所述的系統,其中,所述表示模板是計算機可讀文件。38.根據權利要求37所述的系統,其中,所述表示指令選自包括所述第一表示元素的布局、字體、以及格式的組。39.根據權利要求38所述的系統,其中,將所述表示指令寫入置標語言中。40.根據權利要求39所述的系統,其中,所述置標語言選自包括HTML、HDML、和WML的組。41.根據權利要求35所述的系統,其中,所述輸出數據表示指令定義控件,在所述控件中顯示所述輸出數據。42.根據權利要求41所述的系統,其中,所述控件選自包括文本字段、密碼字段、隱含字段、文本區、表格、列表框、復選框、單選按鈕、圖像、按鈕、圖像按鈕、提交按鈕、復位按鈕、鏈接、和取值范圍的組。43.根據權利要求41所述的系統,其中,所述第一表示組件是計算機可執行文件。44.根據權利要求43所述的系統,其中,所述計算機可執行文件是JavaBean。45.根據權利要求34所述的系統,其中,所述第一功能組件是計算機可執行文件。46.根據權利要求45所述的系統,其中,所述計算機可執行文件是JavaBean。47.根據權利要求31所述的系統,其中所述第一表示組件通過方向元素連接到所述第一表示模板。48.根據權利要求47所述的系統,其中,所述方向元素指定所述第一表示模板的位置并將所述第一表示組件引導至指定位置。49.根據權利要求48所述的系統,其中,所述方向元素是第一表示組件標簽。50.根據權利要求49所述的系統,其中,所述第一表示組件標簽選自包括頁面標簽、控制標簽、屬性標簽、產生頁面標簽、清零標簽、和消息攔截標簽的組。51.根據權利要求49所述的系統,其中,所述第一表示元素標簽表示為方向模塊的指令,所述方向模塊執行所述多層應用程序。52.根據權利要求51所述的系統,其中,所述方向模塊是Java服務器頁。53.根據權利要求31所述的系統,其中,所述第一功能組件通過方向元素連接到所述輸入數據。54.根據權利要求53所述的系統,其中,所述方向元素指定所述輸入數據的位置并將所述第一功能組件引導至所述指定位置。55.根據權利要求54所述的系統,其中,所述方向元素是第一功能組件標簽。56.根據權利要求55所述的系統,其中,所述第一功能組件標簽選自包括初始化標簽、調用標簽、前提標簽、調試標簽、錯誤標簽、賦值標簽、條件標簽的組。57.根據權利要求56所述的系統,其中,所述第一功能組件標簽表示為方向模塊的指令,所述方向模塊執行所述多層應用程序。58.根據權利要求51所述的系統,其中,所述方向模塊是Java服務器頁。全文摘要一種用于與用戶界面(例如PC或PDA上的瀏覽器)相互作用的多層應用程序。應用程序包括表示層(例如,具有JSP/Servlet引擎的網絡服務器)和業務邏輯層(例如,應用程序服務器),以在用戶界面上處理用于隨后表示的數據。引導模塊具有多個連接的方向,包括功能方向,用于引導相應的功能組件,以使用業務邏輯層執行數據處理功能并且提供數據處理輸出;以及表示方向,用于引導相應的表示組件,以當數據處理輸出可應用時將其與表示模板相結合來生成用于用戶界面的表示元素。功能組件和表示組件彼此獨立并且分離,功能組件的連接產生數據且表示組件輸出數據。表示組件是表示元素普通種類的抽象表現,每個指定的表示元素具有儲存在不同表示模板中的布局和格式(例如,置標語言),并且可以在表示層的中在處理時間內確定用于表示組件的對于特定表示模板的引用。文檔編號A47G9/02GK1914594SQ20048004146公開日2007年2月14日申請日期2004年12月17日優先權日2003年12月19日發明者倫尼·霍恩,肯·施奈德申請人:愛默吉斯公司