1 引言
目前制約我國服裝生產企業發展的瓶頸已經從生產環節轉向市場營銷與貿易環節,許多服裝生產企業都開始采用網上定制的方式來開拓銷售市場。另一方面,借助于WWW通過動態的交互式信息發布,出現了諸如網上購物、網上銀行、網上書店等一系列在線電子商務服務系統。這些系統都離不開分布式的數據庫、與用戶及后臺數據庫交互的動態Web應用程序、安全認證等技術。因此在Internet/Intranet環境下如何構建分布式動態Web應用系統的開發自然而然地成為一項熱門技術。
文中所介紹的服裝(羊毛衫)遠程定制系統,采用了基于J2EE / EJB的分布式應用體系結構和MVC開發模型,使分布在不同地理位置上的花型數據庫、遠程定制系統與遠程診斷系統,通過Internet互連在一起,共享信息資源,實現羊毛衫的遠程定制生產和電腦橫機遠程維護。
2? 基于J2EE分布式開發技術簡介
目前使用的分布式開發技術主要有以下幾種C/S、C/A/S、B/A/S等。這幾種技術共同點在于都可以實現數據的共享,對數據進行統一管理和維護。
分布式技術發展到現在,出現了許多相關的標準和產品。其中最為引人注目的就是SUN公司推出的J2EE / EJB的體系結構了。這是自SUN公司推出JAVA后的又一大手筆。Enterprise JavaBean這一名稱利用了JavaBean這種可移植、可重用的Java軟件組件的聲望。Enterprise JavaBean技術把Java組件的概念從客戶機域擴展到了服務器域,這是Java技術成長過程中有重大意義的一步,它使Java技術發展成為一種強健的、可伸縮的環境,能夠支持以任務為關鍵的信息系統。下圖是J2EE / EJB的分布式應用模型:
??? 從圖中可以看出,Servlet/JSP起著聯系前后臺的橋梁作用。客戶端Browser通過HTTP協議向Java應用服務器發送請求。Web層的Servlet或JSP生成網頁用來完成表示層邏輯,它們的主要作用是接受并檢驗用戶輸入,調用后端的業務邏輯層,并把業務邏輯層處理的結果返回給用戶[2]。JSP和Servlet都運行在應用服務器端,業務邏輯層由EJB或JavaBean來實現,他們通過JDBC訪問DBMS,或通過其它途徑去訪問遺留系統。
??? J2EE思想的一個重要的實現構架就是MVC(Model-View-Controller,模型-視圖-控制器)模式。在MVC模型中,應用程序被分解成獨立的3個部分:
??? 2 模型:即程序將要實現的業務邏輯
??? 2?視圖:又稱用戶界面
??? 2?控制:用來管理模型和視圖之間交互以及應用程序的流程的構件
??? 在這種設計模式下,JSP主要用來實現MVC模型的視圖部分,Servlet用來實現模型的控制部分(控制用戶輸入和流程),JavaBean等后臺Java技術則用來實現MVC的模型部分。這種模式比較適合控制邏輯較復雜的情況,如用戶輸入情況復雜或者程序流程復雜的情況。
??? 在遠程定制系統設計的具體實踐中,在J2EE中間件應用服務器和數據庫服務器的選取可考慮使用IBM的WebSphere和DB2的組合或BEA的WebLogic和ORACLE的組合,這兩種方法是目前比較流行和性能較好的方法,在大型的系統中得到了廣泛的使用。
3? (羊毛衫)遠程定制系統的設計內容
??? 本系統以大型電腦針織橫機為基礎,將羊毛衫銷售商場的遠程定制用戶端計算機通過Internet網絡與羊毛衫設計中心的Web服務器以及企業的大型電腦針織橫機互連在一起,實現羊毛衫遠程定制設計與生產。整個定制系統總體構造示意圖如下:
?????????
??? 2 花型數據庫模塊
??? 羊毛衫花型設計中心通過基于Web的花型數據系統。可以定制或選擇各種不同類型的花型,可對花型圖案數據進行查詢、編輯、修改、打印等。從攝像輸入、圖片掃描、或直接繪圖取得花型圖像轉換成花型數據文件,羊毛衫生產企業也可以對花型數據庫進行編輯修改。
??? 2?遠程定制模塊
??? 羊毛衫專賣商場采用基于Web的遠程定制系統,共享花型設計中心資源。顧客可以在線瀏覽現有的羊毛衫產品或者根據自己喜好選擇花型式樣,品種和顏色等款式信息進行羊毛衫定制,向羊毛衫生產企業提交定制工藝單,并由系統提供模擬橫機編織和試穿效果演示。
??? 2?遠程診斷模塊
??? 大型電腦針織橫機制造與售后服務基地,通過基于Web的遠程監測維護系統,將被監測的電腦針織橫機運行狀況,以頁面形式顯示到自己的計算機上,對遠方的大型電腦針織橫機進行遠程監測、故障診斷、遠程交談、文件傳輸等。
??? 系統設計采用SQL Server 2000數據庫系統建立羊毛衫花型數據庫,服務器操作系統為Windows 2000 server,遠程定制和診斷模塊的開發都采用基于J2EE的JSP / Servlet,JavaBean,JDBC的三層結構。J2EE應用服務器為BEA WebLogic6.1,Web服務器采用微軟的IIS4.0。Borland Jbuilder6.0作為J2EE的開發工具。系統采用Browser / Web / DBMSServer三層結構作為總體結構設計的計算模式。此三層結構最大的優點是將用戶界面、應用邏輯與數據管理三層分開,使得系統可以靈活多變地應付各種變化。
??? 下面介紹基于MVC開發模型設計遠程定制模塊。
4? 遠程定制模塊的具體實現
4.1? 用JSP實現視圖
??? 由于JSP程序的特點,宜采用獨立的JSP程序來實現不同的程序功能模塊,或者說,用不同的JSP程序實現不同的程序頁面。下圖說明了模塊的主要頁面以及實現它們的JSP程序:
??????????
??? 其中白色方框代表程序中顯示給用戶的頁面,灰色方框代表程序后臺實現的功能,箭頭表示了頁面之間的鏈接關系和功能調用關系。這樣分立的實現比單一的程序結構更容易調試,也更容易維護。
4.2 用JavaBean實現模型
??? (1)業務實體
??? 整個模塊中存在著5個業務實體,為了實現系統的業務邏輯,需要定義如下的JavaBean(每個實體對應一個Bean):Catalog:羊毛衫分類目錄;Product:羊毛衫產品信息;User: 用戶信息,它包含了Order;Order定制工藝單,它包含了Item;Item:定制信息條目。
??? 每個業務實體都具有若干主要功能操作(方法)。例如定制工藝單管理實體,它可以增加定制信息(addOrderItem方法)、刪除定制信息(delOrderItem方法)、修改定制信息(setOrderItem方法)和清空所有定制信息(clearOrder方法)。
??? 另外,為了使對數據庫的訪問得到統一的管理,將數據庫訪問的各個操作進行了封裝,封裝到一個Java類DBSQL中。這樣,程序的數據庫訪問都可以通過這個類的方法來實現。經過這樣的抽象以后,上層的Bean無需關心如何訪問數據庫,它只需要知道DBSQL類的接口就可以了;而DBSQL類只要保持接口不變,內部的實現可以任意改變,例如進行優化,并且不會影響到上層應用。
??? (2)JavaBean的定義
??? 下面列出了實現用戶實體Bean(User)屬性和方法的部分程序,User Bean是一個按標準定義的JavaBean,它定義了以下一組屬性:
public class User {
??? int UserID;?????只讀屬性,標示登錄用戶的編號
??? String UserName;????可讀可寫屬性,標示登錄用戶的姓名
??? String Password;????可讀可寫屬性,標示登錄用戶的密碼
??? boolean Login;????可讀可寫屬性,標示用戶是否登錄成功
??? Order order;?只讀屬性,標示用戶的定制工藝單對象,這個對象如果存在,它本身也是一個Bean,在Order類中定義
……
// checkUser方法用來檢查用戶登錄信息。通過JDBC訪問數據庫,檢查用戶名稱和口令是否正確,如果正確就把login屬性設置為true,并為該用戶創建一個定制工藝單對象保存在屬性order中
……
??? db.openDB();
??? String strSQL = "select UserID from USER where Name='"+UserName+"' and Password='"+Password+"' and Type=0";
??? try {
????? ResultSet sqlRst = db.executeQuery(strSQL);
????? if (sqlRst.next()) {
??????? Login = true;
??????? UserID = sqlRst.getInt(1);
??????? order = new Order();
????? } else {
????? ?Login = false;
????? ?order = null;
}
……
// orderPay方法用來實現定制工藝單提交。它獲取定制工藝單中的款式定制信息,然后通過JDBC將工藝單信息增加到數據庫的表中。該方法返回boolean值,標示定制工藝單提交是否成功
……
??? db.openDB();
??? try {
????? ……
????? strSQL = "select OrderID from order where UserID="+(new Integer(UserID)).toString()+" and OrderCount="
??????? +OrderCount+" and OrderTotal="+OrderTotal+" and OrderDate=Date() order by OrderID desc";
????? ResultSet sqlRst = db.executeQuery(strSQL);?????????? 取得當前定制款式的用戶號
????? sqlRst.next();
????? String OID = sqlRst.getString(1);
????? sqlRst.close();
????? for(int i=0; i
??????? String PID = (new Integer(anItem.getPID())).toString();??? ? 定制款式號
??????? String Price = (new Integer(anItem.getPrice())).toString();??? 定制款式價格
??????? String Qty = (new Integer(anItem.getQty())).toString();?????? 定制款式數量
??????? strSQL = "insert into orderlist (OrderID,ProductID,Price,Qty) values ("
????????? +OID+","+PID+","+Price+","+Qty+")";??? 將定制工藝單信息添加到數據庫中
??????? sqlRet = db.executeUpdate(strSQL);
????? }
……
??? User Bean在程序中是作為session范圍的Bean定義的。它在程序中的第一個用處是獲取login的屬性值,檢查是否是登錄會員的訪問;第二個用處是在member.jsp程序中使用checkUser方法執行會員登錄認證操作;第三個用處是在pay.jsp程序中使用orderPay方法執行定制工藝單提交操作。
4.3? 用Servlet實現控制
???? (1)JSP / Servlet設計模型
???? JSP / Servlet設計模型的原理如下圖所示:
??? 用戶瀏覽器發出的訪問請求都發送到Servlet統一處理,Servlet解釋請求信息,進行相應處理,如果需要同實現業務邏輯的模型部分交互則同相應的模型Bean交互。實現業務邏輯模型的Bean被稱為“模型Bean”,它們封裝了程序的業務邏輯,將后臺的模型同前臺的控制與視圖分離開,如果業務邏輯比較復雜,“模型Bean”往往還需要同其他的后臺系統交互,例如數據庫,其他的EJB等等。最后,Servlet調用(通過forward或include機制)JSP程序顯示相應的頁面。
??? (2)使用JSP / Servlet設計模型實現頁面調用
??? 由于定制工藝單的管理比較復雜,包含多個功能,即需要根據用戶的不同請求,進行不同的定制工藝單操作。因此采用Servlet類OrderServlet實現這個控制邏輯,而另外編寫一個order.jsp程序,它就只需要完成調用頁面各部分的顯示程序顯示管理頁面內容就可以了,所有的根據用戶請求進行定制工藝單管理操作的控制都在OrderServlet中實現,定制功能的業務邏輯則仍在實現定制工藝單實體的JavaBean中實現。
??? (3)編寫部署描述文件
??? 在使用WebLogic6.1對系統進行裝配和部署時,需要在部署描述文件web.xml中將order.jsp映射到OrderServlet這個Servlet,這樣,當在其他程序中訪問order.jsp時,系統實際執行的是OrderServlet。
……
??
?????
????????? OrderServlet
?????
?????
????????? OrderServlet
?????
???
???
???????
??????????? OrderServlet
???????
???????
??????????? /order.jsp
???????
???
5? 結束語
??? J2EE是一個比較成熟的分布式體系結構,只需按照其規范和對應的開發工具的文檔來編寫程序和配置容器就可以實現整個系統的標準化。實現整個遠程定制系統的過程體現了使用J2EE體系結構編寫分布式系統的許多優勢:通過Session Bean封裝業務邏輯,Entity Bean完成數據庫的訪問實現的系統分布式的組件編程;通過JSP定制標簽庫構成模板,實現頁面內容和布局的分離。這個系統是全部利用JAVA編寫,而像Servlet、JSP等也基本上遵循JAVA的語法,因此非常方便。
參考文獻:
[1] 柳樹春,廖孟揚,王思賢,徐振勤. Browser/Server模式管理信息系統的設計與實現[J]. 計算機工程與應用,2002.06
[2] 常晉義,沈健. 基于J2EE的電子商務網構建技術及應用[J]. 計算機應用研究,2002.04
[3] Nicholas Kassem and the Enterprise Team.? Designing Enterprise Applications with the Java TM 2 Platform [J], Enterprise Edition Version 1.0.1 Final Release October 3.2000
[4] Khawar Zaman Ahmed,Cary E.Umrysh.? Developing Enterprise Java Application with
J2EE and UML [M]. 2002,Pearson Education,California,120-160
[5] Michael Girdley,Rob Woollen,Sandra L. Emerson.? J2EE Application and BEA WebLogic Server [M]. 2002,Prentice Hall PTR,American,1-36