[摘要] Web Services為企業(yè)系統(tǒng)集成、電子商務(wù)、電子政務(wù)等提供了規(guī)范的、開放的分布式應(yīng)用環(huán)境本。本文討論了其基本概念和體系結(jié)構(gòu),并利用J2EE技術(shù)加以實(shí)現(xiàn),最后給出了一個(gè)具體應(yīng)用實(shí)例。
[關(guān)鍵詞] J2EE Web服務(wù) SOAP 認(rèn)證 Apache Axis
一、相關(guān)工作研究
1.Web Services的體系結(jié)構(gòu)。各種高級(jí)和擴(kuò)展的Web Services體系架構(gòu)都是在這個(gè)三角形的基礎(chǔ)上擴(kuò)展而成的。
二、基于J2EE的Web Services體系
1.基于J2EE的多層結(jié)構(gòu)
J2EE的多層體系結(jié)構(gòu)可由圖2所示。一個(gè)應(yīng)用組件安裝的位置,取決于該應(yīng)用組件位于多層J2EE環(huán)境中的位置。這些層是客戶層、Web層、業(yè)務(wù)層和企業(yè)信息系統(tǒng)層(EIS)。
(1)客戶層??蛻魧悠毡榈刂С諬TML協(xié)議,也稱客戶代理。
(2)Web層。Web層由Web容器運(yùn)行,它包括Web服務(wù)、JSP頁(yè)面及顯示HTML頁(yè)面的Servlet等Web組件。
(3)業(yè)務(wù)層。業(yè)務(wù)層由EJB(Enterprise JavaBean)容器運(yùn)行,支持EJB、JMS、JTA等服務(wù)和技術(shù)。業(yè)務(wù)層和Web層一起構(gòu)成三層J2EE應(yīng)用的中間層。
(4)企業(yè)信息系統(tǒng)層(EIS)。提供數(shù)據(jù)存儲(chǔ)的服務(wù),這里主要指數(shù)據(jù)庫(kù)。
2.Apache Axis框架
Axis(Apache Extensible Interaction System)是Apache軟件基金會(huì)(Apache Software Foundation)開發(fā)的一個(gè)SOAP標(biāo)準(zhǔn)的Java實(shí)現(xiàn),是早期Apache SOAP項(xiàng)目的后繼。它基于Java語(yǔ)言的SOAP規(guī)范(SOAP1.2)和SOAP with Attachments規(guī)范的開放源代碼實(shí)現(xiàn)。下面是該Axis框架的主要特征:
●靈活的消息傳遞框架;
●靈活的傳輸框架;
●數(shù)據(jù)編碼支持;
●其他特征:Axis完全支持WSDL以及日志記錄、出錯(cuò)以及故障處理機(jī)制。
Axis框架主要包括以下幾個(gè)關(guān)鍵部件:
●Axis引擎:它是Axis 消息處理模型的主要入口點(diǎn),負(fù)責(zé)保證遵循SOAP的語(yǔ)義,還負(fù)責(zé)協(xié)調(diào)其他部件的調(diào)用次序。
●處理器:是Axis的基本構(gòu)件塊,又可稱為處理程序。用于檢查和修改SOAP消息,以便完成自己的工作。
●鏈:也是處理器,表示的是有序的處理器的集合。
三、開發(fā)實(shí)例
在校園信息管理系統(tǒng)中,包括學(xué)生信息管理、教務(wù)信息管理、人事信息管理、財(cái)務(wù)管理、校園卡管理、科研信息管理、資產(chǎn)信息管理、行政辦公系統(tǒng)等子系統(tǒng),在這些系統(tǒng)中,需要重復(fù)地使用到學(xué)校各部門的信息、教職工信息、學(xué)生信息、登錄權(quán)限管理信息等,采用Web Services技術(shù)就很好地解決了這個(gè)問(wèn)題,為信息跨平臺(tái)集成提供了解決方案。以下筆者以校園信息管理系統(tǒng)項(xiàng)目中的使用權(quán)限信息發(fā)布與集成為例,具體闡述Web Services的建立與應(yīng)用。為了節(jié)省篇幅,程序進(jìn)行了刪簡(jiǎn)與修改。
1.Web Services服務(wù)程序
提供登錄驗(yàn)證并返回權(quán)限等級(jí)的服務(wù)程序如下:
import com.sspu.util.DBconn;//連接數(shù)據(jù)庫(kù)的Bean
public class LoginService {
public String getPowerid(String username, String password) {
DBconn conn = new DBconn();//創(chuàng)建數(shù)據(jù)庫(kù)連接
String powerid=1;
try {
ResultSet rs = conn.executeQuery (“select * from login where username='” + username +”' and password='” + password + “'”);
if (rs.next()) {
powerid=rs.getString (\"powerid\");//返回權(quán)限等級(jí)
……}
2.服務(wù)部署文件
服務(wù)程序需要部署到SOAP服務(wù)器上,可用部署文件WSDD來(lái)完成。以下是部署文件代碼:
執(zhí)行java org.apache.axis.client.AdminClient 部署文件名.wsdd,則可將前面的Web Services服務(wù)程序部署到指定的SOAP服務(wù)器上。
3.Web Services發(fā)布
Web Services的發(fā)布、綁定與調(diào)用的接口由WSDL文件來(lái)完成。
4.Web Services的客戶端測(cè)試
經(jīng)過(guò)測(cè)試,實(shí)現(xiàn)了跨平臺(tái)獲取用戶權(quán)限的功能,實(shí)現(xiàn)了系統(tǒng)集成。但是,測(cè)試中發(fā)現(xiàn)通過(guò)Web Services獲取信息的效率低,影響了系統(tǒng)的正常運(yùn)行速度,因而采用在開發(fā)過(guò)程中采用以下方法提高Web Services的傳輸速度:
(1)盡量避免SOAP格式序列化,首先對(duì)JAVA而言,SOAP格式返回的類型有一定的局限性,給編碼帶來(lái)諸多不便,不能返回一定自定義的類。所以,首先把所有要傳輸?shù)膶?duì)象全部通過(guò)java.io包中的ObjectOutputStream類將對(duì)象寫入字節(jié)流,ObjectInputStream從字節(jié)流重構(gòu)對(duì)象。然后通過(guò)ObjectInputStream類將對(duì)象反序列化,這樣可以傳遞本來(lái)不允許的一些對(duì)象。
(2)將序列化后的二進(jìn)制流用算法實(shí)時(shí)壓縮后再發(fā)送(相應(yīng)在另一端必須實(shí)現(xiàn)首先進(jìn)行解壓縮后再進(jìn)行反序列化),這一步應(yīng)該是提高速度的關(guān)鍵,一般數(shù)據(jù)在壓縮后會(huì)變成原來(lái)的十分之一還不到,經(jīng)測(cè)試,在2M的ADSL上如果采用原來(lái)的方式傳遞一個(gè)1000行數(shù)據(jù)的ResultSet需要3秒,改進(jìn)后只需要0.5秒;如果在連接速度更低的網(wǎng)絡(luò)環(huán)境下,改善效率更明顯。
通過(guò)以上的改進(jìn),提高了Web Services的運(yùn)行速度。進(jìn)而把經(jīng)驗(yàn)推廣,對(duì)整個(gè)系統(tǒng)中的各子系統(tǒng)進(jìn)行分析,將教務(wù)、科研、人事、財(cái)務(wù)、圖書館、網(wǎng)絡(luò)中心、學(xué)生各管理系統(tǒng)(包括電子政務(wù))中的學(xué)院信息、專業(yè)信息、專業(yè)方向信息、學(xué)生信息、教工信息這些共同的內(nèi)容利用Web Services進(jìn)行整合,逐步構(gòu)建一個(gè)完成的學(xué)校信息化管理平臺(tái)。
四、結(jié)論
由于J2EE的平臺(tái)無(wú)關(guān)性和Web Services的組件性,它將成為開發(fā)Web應(yīng)用的一種良好選擇。它不僅滿足眾多Web應(yīng)用的需求,而且簡(jiǎn)化了電子商務(wù)的開發(fā)流程??梢灶A(yù)見(jiàn),基于J2EE的Web Services應(yīng)用具有非常廣闊的發(fā)展前景。
參考文獻(xiàn):
[1]P.Alvarez, J.A.Banares, P.R.Muro-Medrao, J.Nogueras, F.J.Zarazaga. A Java Coordination Tool for Web-Service Architectures: The Location-Based Service Context[J], Revised Papers from the International Workshop on Scientfic Engineering for Distributed Java Applications, 2002.11, 28~29:1~4
[2]Zhou Zhu, James Bailey. Fast Discovery of Interesting Collections of Web Services. Proceedings of the 2006 IEEE/WIC/ACM International Conference on Web Intelligence WI '06, 2006:152~160
[3]Ethan Cerami, Simo n St.Laurent, Web Services Essentials[M], O’ReillyAssociates, Inc., Sebastopol, CA, 2002
[4]范玉珍:基于Web Services構(gòu)架的企業(yè)應(yīng)用系統(tǒng)的開發(fā)方法[D],中國(guó)科學(xué)院軟件研究所碩士論文,2003
[5]楊德華. 利用J2EE實(shí)現(xiàn)Web Services模型與應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2004,9:122~125
[6]冉春玉趙凌燕郝銳陳才賢:用Apache Axis開發(fā)Web服務(wù)[J],計(jì)算機(jī)應(yīng)用,2004,24(5):140~142
[7]梁俊斌蘇德富:開發(fā)基于J2EE的Web Services應(yīng)用研究[J].微計(jì)算機(jī)應(yīng)用,2005,26(1):26~29
[8]李慧盈李德昌段羽呂邦國(guó):利用J2EE構(gòu)建XML Web Services的研究[J].計(jì)算機(jī)工程與應(yīng)用,2004,5:128~130
[9]鐘濤:一種基于J2EE的Web Service體系的研究與實(shí)踐[D].復(fù)旦大學(xué)碩士論文,2002:11~19
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”