企業(yè)級開發(fā)WEB服務應用



《企業(yè)級開發(fā)WEB服務應用》由會員分享,可在線閱讀,更多相關《企業(yè)級開發(fā)WEB服務應用(46頁珍藏版)》請在裝配圖網上搜索。
1、第六章第六章WEB服務(服務(WEB SERVICE)開發(fā)和應用)開發(fā)和應用課程內容課程內容WebService的各種創(chuàng)建和查看 實現(xiàn)WebService客戶端 WebService的應用場合WebService的優(yōu)點和缺點 WebService的性能優(yōu)化 創(chuàng)建和查看創(chuàng)建和查看WEB服務服務Web Service軟件的支持軟件的支持 Web Service構建工具如下:構建工具如下:微軟微軟.NET IBM的的WebSphere Borland的的JBuilder 開源的開源的Eclipse 總之,在總之,在Web Service開發(fā)上,開發(fā)上,.NET 和和Java都是很好的選擇,盡管兩者都
2、是很好的選擇,盡管兩者現(xiàn)在都有一些需要完善的地方,但是就目前來說,它們還是最好的開發(fā)手段現(xiàn)在都有一些需要完善的地方,但是就目前來說,它們還是最好的開發(fā)手段和技術。具體選擇哪種開發(fā)工具,也是仁者見仁,智者見智的問題。和技術。具體選擇哪種開發(fā)工具,也是仁者見仁,智者見智的問題。使用使用XFire開發(fā)開發(fā)Web服務服務 一個一個Demo:一個銀行業(yè)應用程序,將資金從一個賬戶轉到另外一個賬戶上。一個銀行業(yè)應用程序,將資金從一個賬戶轉到另外一個賬戶上。它需要四個輸入參數:String fromAccount:轉帳的帳戶帳號。String toAccount:被轉到的帳戶帳號。double amount:
3、轉帳的資金數目。String bankName:服務的銀行名稱。XFire是一個免費的開源SOAP框架,它不僅可以極大方便地實現(xiàn)這樣一個環(huán)境,并且可以提供許多Web Services規(guī)范中的高級特征,這些特征在多數的商業(yè)或者開源工具都沒有提供。下面你將會看到使用XFire創(chuàng)建Web Services是多么的簡單。接口的設計:接口的設計:package com.test.webservice;public interface IBankService public String transferFunds(String fromAccount,String toAccount,double am
4、ount,String bankName);編寫編寫Java類簡單的實現(xiàn)以上接口(代碼省略)類簡單的實現(xiàn)以上接口(代碼省略)Web應用的部署描述符應用的部署描述符 首先,修改首先,修改web.xml。我們需要增加下面的。我們需要增加下面的XFire servlet相關的條相關的條目,部分代碼如下:目,部分代碼如下:XFireServlet/servlet/XFireServlet/*XFireServlet/services/*在Java中,Web應用程序通常需要至少一個部署描述符對其進行配置。XFire本身是一個基于Servlet的應用程序。因此,我們需要增加必要的引用到描述符文件中。然后我
5、們還必須配置將要創(chuàng)建的Web Services。我們使用一個稱為services.xml的新文件來完成這件事。services.xml Web Services是由一個叫做是由一個叫做services.xml的文件組成的,的文件組成的,存放在存放在META-INF/xfire目錄下目錄下。該文件的部分配置代碼如下:。該文件的部分配置代碼如下:BankServicecom.test.webservice.IBankServicecom.test.webservice.BankServiceImplwrappedliteralapplication分析分析service.xml文件中的元素文件中的
6、元素 ,它可以是你提供任何的合法名字。這將會被客,它可以是你提供任何的合法名字。這將會被客戶端程序和其它需要定位你的服務的組件用到。可以在瀏戶端程序和其它需要定位你的服務的組件用到??梢栽跒g覽器上使用這個名字來查看覽器上使用這個名字來查看WSDL。任何合法的。任何合法的XML名字都是可以的。名字都是可以的。用來唯一標識你的服務的各個參數。用來唯一標識你的服務的各個參數。元素包含了元素包含了Java類的名字,它指定了方法類的名字,它指定了方法簽名。在我們的例子中,它是接口簽名。在我們的例子中,它是接口IBankingService。如果。如果Java類沒有實現(xiàn)任何接口,就需要把類的名字放在這里。
7、類沒有實現(xiàn)任何接口,就需要把類的名字放在這里。在你的在你的Java類或者接口中可能有幾個方法。只需要一個入類或者接口中可能有幾個方法。只需要一個入口把它們全部發(fā)布為口把它們全部發(fā)布為Web Services。保存了實現(xiàn)方法的保存了實現(xiàn)方法的Java類名。這類名。這是一個可選元素。如果上一個元素是一個可選元素。如果上一個元素包含了一包含了一個接口,那么相應的實現(xiàn)類必須在這里指定。個接口,那么相應的實現(xiàn)類必須在這里指定?;镜幕镜腤eb Services開發(fā)步驟開發(fā)步驟 基本的基本的Web Services開發(fā)步驟開發(fā)步驟 如下:如下:1編寫Java類,類中的方法和默認構造函數確保為public
8、。2增加XFire servlet相關條目到web.xml中。3創(chuàng)建services.xml,把它放到WEB-INF/classes/META-INF/xfire目 錄下。4增加XFire和第三方包到你的Web應用的WEB-INF/lib文件夾中。XFire的其他高級特性的其他高級特性 本地數據綁定支持本地數據綁定支持POJOs(plain-old Java objects)、)、XMLBeans、JAXB(Java Architecture for XML Binding)、)、Castor等等。等等。使用使用StAX(Streaming API for XML)處理處理XML文檔。文檔。支
9、持多種傳輸協(xié)議,如支持多種傳輸協(xié)議,如HTTP、JMS(Java Message Service)和和JVM內部傳輸。內部傳輸。嵌入式,這是嵌入式,這是XFire的核心功能之一。的核心功能之一。豐富的豐富的API,它使,它使XFire可高度自定義可高度自定義。兼容最新的標準例如兼容最新的標準例如SOAP1.1(沒有加密遠程工程調用,或者(沒有加密遠程工程調用,或者RPC)和)和1.2、WSDL1.1等。等。其他開發(fā)其他開發(fā)Web服務的途徑服務的途徑一:使用EJB來暴露Web服務二:將Web工程發(fā)布為Web服務 查看查看Web服務服務 假如我們的Web服務是發(fā)布在JBoss服務器中的,我們可以通
10、過JBoss管理平臺查看剛才發(fā)布的Web Service,我們可以輸入:“http:/localhost:8080/jbossws/”進入JBossWS的查看界面,點擊“View”連接后,可以查看已經發(fā)布的Web服務 兩種實現(xiàn)兩種實現(xiàn)Web服務的方法服務的方法 1開始編寫Java類,并讓容器去生成WSDL及其它所需要的XML文檔;2開始編寫(或直接使用現(xiàn)成的)WSDL文件,并借助于開發(fā)工具生成所需要的Java類。其他開發(fā)其他開發(fā)Web服務的途徑服務的途徑實現(xiàn)實現(xiàn)WEB服務客戶服務客戶調用調用WebService的方法的方法 在在J2EE平臺中,平臺中,Web服務客戶同服務客戶同EJB客戶類似。
11、如以下兩種方式能客戶類似。如以下兩種方式能夠訪問到夠訪問到Web服務:服務:1單獨的JAX-WS客戶。它們不借助于JNDI來訪問Web服務。2J2EE客戶(比如Web客戶、J2EE應用客戶)。它們借助于客戶端的JNDI上下文訪問Web服務。分析:分析:第一種方式:不借助于JNDI,即單獨客戶,比如那些未運行在應用服務器中的遠程Java客戶能夠訪問到Web服務。第二種方式:依賴于Dispatch對象。它在運行的時候以來動態(tài)調用接口(Dynamic Invocation Interface,DII)創(chuàng)建調用對象。開發(fā)一個客戶端開發(fā)一個客戶端 如以下代碼:/創(chuàng)建一個服務模型創(chuàng)建一個服務模型Servi
12、ce serviceModel=new ObjectServiceFactory().create(IBankService.class);/獲得服務的代理工廠獲得服務的代理工廠XFire xfire=XFireFactory.newInstance().getXFire();XFireProxyFactory factory=new XFireProxyFactory(xfire);可以使用任何的SOAP工具創(chuàng)建客戶端,例如,.Net或者Apache Axis,有很多種方法,使用從WSDL產生的stubs,使用動態(tài)代理等等。下面這個例子中,我們使用一個動態(tài)代理,以一個簡單的Servlet形式
13、,叫做WsClient.java。為了保持代碼量最小,所有在屏幕顯示的元素都放在了doGet()方法中。String serviceUrl=http:/localhost:8080/BankWebService/services/BankService;IBankService client=null;try client=(IBankService)factory.create(serviceModel,serviceUrl);catch(MalformedURLException e)log.error(WsClient.callWebService():出現(xiàn)異常:+e.toString(
14、);/調用服務調用服務String serviceResponse=;try serviceResponse=client.transferFunds(fromAccount,toAccount,amount,currency);catch(Exception e)/返回服務的調用結果返回服務的調用結果return serviceResponse;WEB服務的應用探討服務的應用探討WebService的缺點的缺點 XML限制限制 無狀態(tài)(無狀態(tài)(stateless)的服務)的服務 數據綁定也存在一些不足數據綁定也存在一些不足 技術要求高,學習曲線較長技術要求高,學習曲線較長 在體會到在體會到W
15、ebService自身的優(yōu)點的同時,不要忘了自身的優(yōu)點的同時,不要忘了WebService也存在很多的缺點:也存在很多的缺點:什么應用適合什么應用適合Web Services?基于基于WAN和和Internet的應用的應用 基于異構平臺的應用基于異構平臺的應用 需要強安全特性的應用需要強安全特性的應用 EAI(企業(yè)應用集成)(企業(yè)應用集成)行業(yè)內部行業(yè)內部B2B應用應用 就目前來說,就目前來說,Web Services比較適合用于下列形式的應用:比較適合用于下列形式的應用:提高提高Web Services的性能的性能 要想提高要想提高Web Services應用的性能,需要對整個系統(tǒng)做全應用的
16、性能,需要對整個系統(tǒng)做全盤的考慮。一般來說,有以下幾點需要注意:盤的考慮。一般來說,有以下幾點需要注意:(1)Web Services的顆粒度的顆粒度,Web Services比較適用于比較適用于大顆粒度的應用,在一個調用中便獲得所有的信息大顆粒度的應用,在一個調用中便獲得所有的信息(2)謹慎使用)謹慎使用XML接口接口,避免不必要的,避免不必要的XML文檔的解文檔的解析和效驗;在處理析和效驗;在處理XML的時候,盡量將的時候,盡量將XML轉換成內部轉換成內部對象,對象,XML的傳遞只會增加系統(tǒng)的開銷。的傳遞只會增加系統(tǒng)的開銷。(3)最大可能性使用)最大可能性使用CACHE,可以使用可以使用C
17、ACHE(緩沖緩沖技術技術)。無論是客戶端的。無論是客戶端的CACHE還是服務器端的還是服務器端的CACHE,都能大大提高系統(tǒng)的性能。,都能大大提高系統(tǒng)的性能。本章總結本章總結WebService的各種創(chuàng)建和查看 實現(xiàn)WebService客戶端 WebService的應用場合WebService的優(yōu)點和缺點 WebService的性能優(yōu)化 動手實踐:人數計算器動手實踐:人數計算器人數計數器人數計數器 要開始本章的體驗項目首先要做以下的準備工作:要開始本章的體驗項目首先要做以下的準備工作:(1)首先將本章體驗項目下配置文件按照指定要求放到指定目錄)首先將本章體驗項目下配置文件按照指定要求放到指定
18、目錄 下:下:C盤根目錄下。盤根目錄下。(2)之后將體驗項目部署到服務器中,并啟動服務器。)之后將體驗項目部署到服務器中,并啟動服務器。(3)最后在瀏覽器中輸入以下地址:)最后在瀏覽器中輸入以下地址:http:/localhost:8080/CounterWebService/counter.jsp 如果成功運行則會看到類似以下的畫面,如圖如果成功運行則會看到類似以下的畫面,如圖6-1所示:所示:圖6-1 計數器頁面 可以看到頁面中成功的輸出了當天的訪問量以及當周的訪問量和總訪可以看到頁面中成功的輸出了當天的訪問量以及當周的訪問量和總訪問量,當刷新頁面的時候,會看到統(tǒng)計的數字依次加一。問量,當
19、刷新頁面的時候,會看到統(tǒng)計的數字依次加一。實現(xiàn)步驟實現(xiàn)步驟(1)新建一個)新建一個WebService工程工程,之后編寫業(yè)務操作的接口,之后編寫業(yè)務操作的接口類:類:ICounterSerivce;(2)實現(xiàn)該接口的業(yè)務)實現(xiàn)該接口的業(yè)務Bean:CounterServiceImpl(3)編寫一個簡單客戶端是如何調用以上)編寫一個簡單客戶端是如何調用以上Web服務服務(4)在工程中新建一個)在工程中新建一個JSP頁面:頁面:counter.jsp,通過客戶端,通過客戶端Bean應用該應用該Web服務服務 在開始開發(fā)在開始開發(fā)WebSerivce之前,我們首先要做的是在之前,我們首先要做的是在c
20、盤下或者是其它目盤下或者是其它目錄下新建一個文件錄下新建一個文件-counter.xml,用于保存記錄的數字,用于保存記錄的數字。(1)創(chuàng)建一個Web服務,實現(xiàn)對用戶訪問頁面的次數進行分天或分周進行統(tǒng)計。(2)在Java中調用該Web服務,并在JSP頁面中把結果顯示出來。(1)在開始開發(fā)Web Serivce之前,我們首先要做的是在C盤下或者是其它目錄下新建一個文件counter.xml,用于保存記錄的數字,counter.xml文件內容如下:admin123456124562007-6-18 5:42:58(2)新建一個Web Services工程,命名為CounterWebSerivce,
21、之后編寫業(yè)務操作的接口類ICounterSerivce,代碼如下:package com.test.webserivce;public interface ICounterSerivce public String counter(String userName,String password);(3)編寫實現(xiàn)類CounterServiceImpl,代碼如下:package com.test.webservice;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.text.D
22、ateFormat;import java.text.ParseException;import java.util.*;import org.dom4j.*;public class CounterServiceImpl implements ICounterService private final String filePath=c:/counter.xml;private final static DateFormat DATEFORMATER=DateFormat.getDateTimeInstance();private final String errorInfor=0;0;/*
23、功能:打開計數器文檔*/private Document openDocument()/*功能:對文檔進行解析,之后進行加一操作,保存*該方法為同步的*/public synchronized String doCount(String userName,String passWord)/public String counter(String userName,String password)if(userName=null|password=null)return null;elsereturn doCount(userName,password);/測試用的main()方法,最后屏蔽該段
24、代碼/*public static void main(String args)CounterServiceImpl c=new CounterServiceImpl();String src=c.counter(admin,123456);System.out.println(src);*/(4)下面我們一一實現(xiàn)以上的方法:openDocument()方法的實現(xiàn):主要是使用SAXReader的read()方法來獲得一個指定xml文件路徑的Document文檔對象。代碼如下:private Document openDocument()Document doc=null;SAXReader r
25、eader=new SAXReader();try File xmlfile=new File(filePath);doc=reader.read(xmlfile);xmlfile=null;catch(DocumentException e)e.printStackTrace();return doc;doCount()方法的實現(xiàn):該方法一定是要同步的,不然會導致數據的不正確。該方法是主要的操作方法,通過openDocument()方法獲取的Document對象doc來對XML文件進行解析,分別獲取代表周訪問量、日訪問量、登記時間、總訪問量的數據,并分別保存到wc、dc、rt、tc變量中,之
26、后利用Date對象和Calendar對象和當前時間進行對比,從而修改XML文件的數據并將修改后的數據返回以供客戶端調用。具體代碼如下:public synchronized String doCount(String userName,String passWord)Document doc=openDocument();Date currdt=new java.util.Date();/wc:month counter(周計數器);dc:day counter(日計數器);/rt:registe time登記時間;tc:Total counter(總計數器)String wc=-1,dc=-
27、1,tc=-1,rt=-1;Element root=doc.getRootElement();Element selitem=null,item=null;for(Iterator it=root.elementIterator(item);it.hasNext();)item=(Element)it.next();if(userName.equals(item.element(userName).getText()selitem=item;if(!passWord.equals(item.elementText(passWord)/密碼不對,直接返回return errorInfor;dc
28、=item.element(dc).getText();wc=item.element(wc).getText();tc=item.element(tc).getText();rt=item.element(rt).getText();break;/處理計數器加一操作。Calendar currcr=Calendar.getInstance();Date lastdt=null;try/獲得xml文件記錄的登錄時間lastdt=DATEFORMATER.parse(rt);catch(ParseException e)lastdt=new java.util.Date();Calendar l
29、astcr=Calendar.getInstance();lastcr.setTime(lastdt);currcr.setTime(currdt);/System.out.println(上次登記時間:+DATEFORMATER.format(lastdt);/System.out.println(本次登記時間:+DATEFORMATER.format(currdt);/對年判斷是否相同if(lastcr.get(Calendar.YEAR)=currcr.get(Calendar.YEAR)/如果周相同,周計數加1if(lastcr.get(Calendar.WEEK_OF_YEAR)=c
30、urrcr.get(Calendar.WEEK_OF_YEAR)wc=String.valueOf(Integer.parseInt(wc)+1);elsewc=1;/如果日相同,日計數加1if(lastcr.get(Calendar.DAY_OF_YEAR)=currcr.get(Calendar.DAY_OF_YEAR)dc=String.valueOf(Integer.parseInt(dc)+1);elsedc=1;/年不一樣,則月計數器、周計數器日計數器肯定也不一樣。elsedc=1;wc=1;tc=String.valueOf(Integer.parseInt(tc)+1);/總數
31、器總是加1。selitem.element(wc).setText(wc);selitem.element(dc).setText(dc);selitem.element(tc).setText(tc);/登記記錄時間selitem.element(rt).setText(DATEFORMATER.format(currdt);try XMLWriter xw=new XMLWriter(new FileWriter(filePath);xw.write(doc);xw.close();catch(IOException e)e.printStackTrace();return dc+;+wc
32、+;+tc;(5)以上代碼主要涉及到了XML的讀寫操作和日期的判斷,這些此處我們不必深究,主要是以上業(yè)務的邏輯操作掌握即可。下面我們看一下客戶端是如何調用以上Web服務的:客戶端Bean:CounterServiceClient.javapackage com.counterservice.client;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.code
33、haus.xfire.service.binding.ObjectServiceFactory;import com.test.webservice.ICounterService;public class CounterServiceClient private String counterarr;public boolean getCounter(String CounterName,String password)boolean flag=false;try Service srvcModel=new ObjectServiceFactory().create(ICounterServi
34、ce.class);XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire();String endpointURL=http:/localhost:8080/CounterWebService/services/CounterService;/填寫你要調用的方法名稱ICounterService srvc=(ICounterService)factory.create(srvcModel,endpointURL);String counter=srvc.counter(Counte
35、rName,password);counterarr=counter.split(;);flag=(counterarr!=null&counterarr.length=3);catch(Exception e)e.printStackTrace();return flag;public String getDc()return counterarr0;public String getWc()return counterarr1;public String getTc()return counterarr2;/測試用的main()方法,測試完畢后屏蔽該段代碼/*public static v
36、oid main(String args)CounterServiceClient cl=new CounterServiceClient();boolean b=cl.getCounter(admin,123456);System.out.println(獲得服務:+b);System.out.println(總訪問量:+cl.counterarr2);*/(6)最后在工程中新建一個JSP頁面:counter.jsp,通過客戶端Bean應用該Web服務。counter.jsp代碼如下:base href=My JSP counter.jsp starting page計數器頁面 今天訪問量:本周訪問量:總訪問量:
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題黨課講稿:以高質量黨建保障國有企業(yè)高質量發(fā)展
- 廉政黨課講稿材料:堅決打好反腐敗斗爭攻堅戰(zhàn)持久戰(zhàn)總體戰(zhàn)涵養(yǎng)風清氣正的政治生態(tài)
- 在新錄用選調生公務員座談會上和基層單位調研座談會上的發(fā)言材料
- 總工會關于2025年維護勞動領域政治安全的工作匯報材料
- 基層黨建工作交流研討會上的講話發(fā)言材料
- 糧食和物資儲備學習教育工作部署會上的講話發(fā)言材料
- 市工業(yè)園區(qū)、市直機關單位、市紀委監(jiān)委2025年工作計劃
- 檢察院政治部關于2025年工作計劃
- 辦公室主任2025年現(xiàn)實表現(xiàn)材料
- 2025年~村農村保潔員規(guī)范管理工作方案
- 在深入貫徹中央8項規(guī)定精神學習教育工作部署會議上的講話發(fā)言材料4篇
- 開展深入貫徹規(guī)定精神學習教育動員部署會上的講話發(fā)言材料3篇
- 在司法黨組中心學習組學習會上的發(fā)言材料
- 國企黨委關于推動基層黨建與生產經營深度融合工作情況的報告材料
- 副書記在2025年工作務虛會上的發(fā)言材料2篇