第一篇:webService基礎(chǔ)總結(jié)
? WebService是一種跨編程語言和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)
? 所謂跨編程語言和跨操作平臺(tái),就是說服務(wù)端程序采用java編寫,客戶端程序則可以采用其他編程語言編寫,反之亦然!跨操作系統(tǒng)平臺(tái)則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運(yùn)行。? 除了WebService外,常見的遠(yuǎn)程調(diào)用技術(shù)還有RMI(Remote method invoke)和CORBA,由于WebService的跨平臺(tái)和跨編程語言特點(diǎn),因此比其他兩種技術(shù)應(yīng)用更為廣泛,但性能略低。
? WebService使用SOAP協(xié)議實(shí)現(xiàn)跨編程語言和跨操作系統(tǒng)平臺(tái)
? WebService采用HTTP協(xié)議傳輸數(shù)據(jù),采用XML格式封裝數(shù)據(jù)(即XML中說明調(diào)用遠(yuǎn)程服務(wù)對象的哪個(gè)方法,傳遞的參數(shù)是什么,以及服務(wù)對象的返回結(jié)果是什么)。WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時(shí),發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議(simple object access protocol,簡單對象訪問協(xié)議)。
? SOAP協(xié)議 = HTTP協(xié)議 + XML數(shù)據(jù)格式
? HTTP協(xié)議和XML是被廣泛使用的通用技術(shù),各種編程語言對HTTP協(xié)議和XML這兩種技術(shù)都提供了很好的支持,WebService客戶端與服務(wù)器端使用什么編程語言都可以完成SOAP的功能,所以,WebService很容易實(shí)現(xiàn)跨編程語言,跨編程語言自然也就跨了操作系統(tǒng)
? WebService客戶端要調(diào)用一個(gè)WebService服務(wù),首先要有知道這個(gè)服務(wù)的地址在哪,以及這個(gè)服務(wù)里有什么方法可以調(diào)用,所以,WebService務(wù)器端首先要通過一個(gè)WSDL文件來說明自己家里有啥服務(wù)可以對外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個(gè)url地址表示,服務(wù)通過什么方式來調(diào)用。? WSDL(webservice description language)是基于XML格式的,它是WebService客戶端和服務(wù)器端都能理解的標(biāo)準(zhǔn)格式,其中描述的信息可以分為what,where,how等部分!? WSDL文件保存在Web服務(wù)器上,通過一個(gè)url地址就可以訪問到它。客戶端要調(diào)用一個(gè)WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:
? 注冊到UDDI服務(wù)器,以便被人查找 ? 直接告訴給客戶端調(diào)用者,例如,在自己網(wǎng)站給出信息或郵件告訴。
第二篇:WebService優(yōu)缺點(diǎn)[最終版]
Web服務(wù)的優(yōu)缺點(diǎn)分析
當(dāng)前WebService是一個(gè)熱門話題。但是,WebService究竟是什么?,WebService有什么優(yōu)點(diǎn)和缺點(diǎn),什么情況下應(yīng)該用WebService?什么情況下不應(yīng)該用WebService?是需要我們正確認(rèn)識(shí)的。
實(shí)際上,WebService的主要目標(biāo)是跨平臺(tái)的可互操作性。為了達(dá)到這一目標(biāo),WebService完全基于XML(可擴(kuò)展標(biāo)記語言)、XSD(XMLSchema)等獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn),是創(chuàng)建可互操作的、分布式應(yīng)用程序的新平臺(tái)。由此可以看出,在以下三種情況下,使用 WebService會(huì)帶來極大的好處。
優(yōu)點(diǎn)一:跨防火墻的通信
如果應(yīng)用程序有成千上萬的用戶,而且分布在世界 各地,那么客戶端和服務(wù)器之間的通信將是一個(gè)棘手的問題。因?yàn)榭蛻舳撕头?wù)器之間通常會(huì)有防火墻或者代理服務(wù)器。在這種情況下,使用DCOM就不是那么簡 單,通常也不便于把客戶端程序發(fā)布到數(shù)量如此龐大的每一個(gè)用戶手中。傳統(tǒng)的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應(yīng)用程序的中間層暴 露給最終用戶。這樣做的結(jié)果是開發(fā)難度大,程序很難維護(hù)。
舉個(gè)例子,在應(yīng)用程序里加入一個(gè)新頁面,必須先建立好用戶界面(Web頁面),并在這個(gè)頁面后面,包含相應(yīng)商業(yè)邏輯的中間層組件,還要再建立至少一個(gè)ASP頁面,用 來接受用戶輸入的信息,調(diào)用中間層組件,把結(jié)果格式化為HTML形式,最后還要把“結(jié)果頁”送回瀏覽器。要是客戶端代碼不再如此依賴于HTML表單,客戶 端的編程就簡單多了。
如果中間層組件換成WebService的話,就可以從用戶界面直接調(diào)用中間層組件,從而省掉建立ASP頁面的 那一步。要調(diào)用WebService,可以直接使用MicrosoftSOAPToolkit或.NET這樣的SOAP客戶端,也可以使用自己開發(fā)的 SOAP客戶端,然后把它和應(yīng)用程序連接起來。不僅縮短了開發(fā)周期,還減少了代碼復(fù)雜度,并能夠增強(qiáng)應(yīng)用程序的可維護(hù)性。同時(shí),應(yīng)用程序也不再需要在每次 調(diào)用中間層組件時(shí),都跳轉(zhuǎn)到相應(yīng)的“結(jié)果頁”。
從經(jīng)驗(yàn)來看,在一個(gè)用戶界面和中間層有較多交互的應(yīng)用程序中,使用 WebService這種結(jié)構(gòu),可以節(jié)省花在用戶界面編程上20%的開發(fā)時(shí)間。另外,這樣一個(gè)由WebService組成的中間層,完全可以在應(yīng)用程序集 成或其它場合下重用。最后,通過WebService把應(yīng)用程序的邏輯和數(shù)據(jù)“暴露”出來,還可以讓其它平臺(tái)上的客戶重用這些應(yīng)用程序。
優(yōu)點(diǎn)二:應(yīng)用程序集成
企業(yè)級的應(yīng)用程序開發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語言寫成的、在不同平臺(tái)上運(yùn)行的各種程序集成起來,而這種集成將花費(fèi)很大的開發(fā)力量。應(yīng)用程序經(jīng) 常需要從運(yùn)行在IBM主機(jī)上的程序中獲取數(shù)據(jù);或者把數(shù)據(jù)發(fā)送到主機(jī)或UNIX應(yīng)用程序中去。即使在同一個(gè)平臺(tái)上,不同軟件廠商生產(chǎn)的各種軟件也常常需要 集成起來。通過WebService,應(yīng)用程序可以用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)“暴露”出來,供其它應(yīng)用程序使用。
例如,有一個(gè)訂單登 錄程序,用于登錄從客戶來的新訂單,包括客戶信息、發(fā)貨地址、數(shù)量、價(jià)格和付款方式等內(nèi)容;還有一個(gè)訂單執(zhí)行程序,用于實(shí)際貨物發(fā)送的管理。這兩個(gè)程序來 自不同軟件廠商。一份新訂單進(jìn)來之后,訂單登錄程序需要通知訂單執(zhí)行程序發(fā)送貨物。通過在訂單執(zhí)行程序上面增加一層WebService,訂單執(zhí)行程序可 以把“AddOrder”函數(shù)“暴露”出來。這樣,每當(dāng)有新訂單到來時(shí),訂單登錄程序就可以調(diào)用這個(gè)函數(shù)來發(fā)送貨物了。
優(yōu)點(diǎn)三:B2B的集成
用WebService集成應(yīng)用程序,可以使公司內(nèi)部的商務(wù)處理更加自動(dòng)化。但當(dāng)交易跨越供應(yīng)商和客戶、突破公司的界限時(shí)會(huì)怎么樣呢?跨公司的商務(wù)交易集成通常叫做B2B集成。
WebService是B2B集成成功的關(guān)鍵。通過WebService,公司可以把關(guān)鍵的商務(wù)應(yīng)用“暴露”給指定的供應(yīng)商和客戶。例如,把電子下單系 統(tǒng)和電子發(fā)票系統(tǒng)“暴露”出來,客戶就可以以電子的方式發(fā)送訂單,供應(yīng)商則可以以電子的方式發(fā)送原料采購發(fā)票。當(dāng)然,這并不是一個(gè)新的概念,EDI(電子 文檔交換)早就是這樣了。但是,WebService的實(shí)現(xiàn)要比EDI簡單得多,而且WebService運(yùn)行在Internet上,在世界任何地方都可 輕易實(shí)現(xiàn),其運(yùn)行成本就相對較低。不過,WebService并不像EDI那樣,是文檔交換或B2B集成的完整解決方案。WebService只是B2B 集成的一個(gè)關(guān)鍵部分,還需要許多其它的部分才能實(shí)現(xiàn)集成。
用WebService來實(shí)現(xiàn)B2B集成的最大好處在于可以輕易實(shí)現(xiàn)互操作 性。只要把商務(wù)邏輯“暴露”出來,成為WebService,就可以讓任何指定的合作伙伴調(diào)用這些商務(wù)邏輯,而不管他們的系統(tǒng)在什么平臺(tái)上運(yùn)行,使用什么 開發(fā)語言。這樣就大大減少了花在B2B集成上的時(shí)間和成本,讓許多原本無法承受EDI的中小企業(yè)也能實(shí)現(xiàn)B2B集成。
優(yōu)點(diǎn)四:軟件和數(shù)據(jù)重用
軟件重用是一個(gè)很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,另一種形式是二進(jìn)制形式的組件重用。
當(dāng)前,像表格控件或用戶界面控件這樣的可重用軟件組件,在市場上都占有很大的份額。但這類軟件的重用有一個(gè)很大的限制,就是重用僅限于代碼,數(shù)據(jù)不能重用。原因在于,發(fā)布組件甚至源代碼都比較容易,但要發(fā)布數(shù)據(jù)就沒那么容易,除非是不會(huì)經(jīng)常變化的靜態(tài)數(shù)據(jù)。
WebService在允許重用代碼的同時(shí),可以重用代碼背后的數(shù)據(jù)。使用WebService,再也不必像以前那樣,要先從第三方購買、安裝軟件組 件,再從應(yīng)用程序中調(diào)用這些組件;只需要直接調(diào)用遠(yuǎn)端的WebService就可以了。舉個(gè)例子,要在應(yīng)用程序中確認(rèn)用戶輸入的地址,只需把這個(gè)地址直接 發(fā)送給相應(yīng)的WebService,這個(gè)WebService就會(huì)幫你查閱街道地址、城市、省區(qū)和郵政編碼等信息,確認(rèn)這個(gè)地址是否在相應(yīng)的郵政編碼區(qū) 域。WebService的提供商可以按時(shí)間或使用次數(shù)來對這項(xiàng)服務(wù)進(jìn)行收費(fèi)。這樣的服務(wù)要通過組件重用來實(shí)現(xiàn)是不可能的,那樣的話你必須下載并安裝好包 含街道地址、城市、省區(qū)和郵政編碼等信息的數(shù)據(jù)庫,而且這個(gè)數(shù)據(jù)庫還是不能實(shí)時(shí)更新的。
另一種軟件重用的情況是,把好幾個(gè)應(yīng)用程序的 功能集成起來。例如,要建立一個(gè)局域網(wǎng)上的門戶站點(diǎn)應(yīng)用,讓用戶既可以查詢聯(lián)邦快遞包裹,查看股市行情,又可以管理自己的日程安排,還可以在線購買電影 票。現(xiàn)在Web上有很多應(yīng)用程序供應(yīng)商,都在其應(yīng)用中實(shí)現(xiàn)了這些功能。一旦他們把這些功能都通過WebService“暴露”出來,就可以非常容易地把所 有這些功能都集成到你的門戶站點(diǎn)中,為用戶提供一個(gè)統(tǒng)一的、友好的界面。
將來,許多應(yīng)用程序都會(huì)利用WebService,把當(dāng)前基 于組件的應(yīng)用程序結(jié)構(gòu)擴(kuò)展為組件/WebService的混合結(jié)構(gòu),可以在應(yīng)用程序中使用第三方的WebService提供的功能,也可以把自己的應(yīng)用程 序功能通過WebService提供給別人。兩種情況下,都可以重用代碼和代碼背后的數(shù)據(jù)。
從以上論述可以看出,WebService在通過Web進(jìn)行互操作或遠(yuǎn)程調(diào)用的時(shí)候是最有用的。不過,也有一些情況,WebService根本不能帶來任何好處。
缺點(diǎn)一:單機(jī)應(yīng)用程序
目前,企業(yè)和個(gè)人還使用著很多桌面應(yīng)用程序。其中一些只需要與本機(jī)上的其它程序通信。在這種情況下,最好就不要用WebService,只要用本地的 API就可以了。COM非常適合于在這種情況下工作,因?yàn)樗刃∮挚臁_\(yùn)行在同一臺(tái)服務(wù)器上的服務(wù)器軟件也是這樣。最好直接用COM或其它本地的API來 進(jìn)行應(yīng)用程序間的調(diào)用。當(dāng)然WebService也能用在這些場合,但那樣不僅消耗太大,而且不會(huì)帶來任何好處。
缺點(diǎn)二:局域網(wǎng)的同構(gòu)應(yīng)用程序
在許多應(yīng)用中,所有的程序都是用VB或VC開發(fā)的,都在Windows平臺(tái)下使用COM,都運(yùn)行在同一個(gè)局域網(wǎng)上。例如,有兩個(gè)服務(wù)器應(yīng)用程序需要相互 通信,或者有一個(gè)Win32或WinForm的客戶程序要連接局域網(wǎng)上另一個(gè)服務(wù)器的程序。在這些程序里,使用DCOM會(huì)比SOAP/HTTP有效得多。與此相類似,如果一個(gè).NET程序要連接到局域網(wǎng)上的另一個(gè).NET程序,應(yīng)該使用.NETremoting。有趣的是,在.NETremoting中,也可以指定使用SOAP/HTTP來進(jìn)行WebService調(diào)用。不過最好還是直接通過TCP進(jìn)行RPC調(diào)用,那樣會(huì)有效得多。
第三篇:java 調(diào)用webservice的各種方法總結(jié)
一、利用jdk web服務(wù)api實(shí)現(xiàn),這里使用基于 SOAP message 的 Web 服務(wù)
1.首先建立一個(gè)Web services EndPoint:
Java代碼
package Hello;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
@WebService
public class Hello {
@WebMethod
public String hello(String name){
return “Hello, ” + name + “n”;}
public static void main(String[] args){
// create and publish an endpoint
Hello hello = new Hello();
Endpoint endpoint Endpoint.publish(“http://localhost:8080/hello”, hello);
} }
=
2.使用 apt 編譯 Hello.java(例:apt-d [存放編譯后的文件目錄] Hello.java),會(huì)生成 jaws目錄
3.使用java Hello.Hello運(yùn)行,然后將瀏覽器指向http://localhost:8080/hello?wsdl就會(huì)出現(xiàn)下列顯示
4.使用wsimport 生成客戶端
使用如下:wsimport-p.-keep http://localhost:8080/hello?wsdl
5.客戶端程序:
Java代碼
1.class HelloClient{ 2.3.public static void main(String args[]){ 4.5.HelloService service = new HelloService();6.7.Hello helloProxy = service.getHelloPort();8.9.String hello = helloProxy.hello(“你好”);10.11.System.out.println(hello);12.13.} 14.15.} 16.二、使用xfire,我這里使用的是myeclipse集成的xfire進(jìn)行測試的
利用xfire開發(fā)WebService,可以有三種方法:
1一種是從javabean 中生成;
一種是從wsdl文件中生成;
還有一種是自己建立webservice
步驟如下:
用myeclipse建立webservice工程,目錄結(jié)構(gòu)如下:
首先建立webservice接口,代碼如下:
Java代碼
1.package com.myeclipse.wsExample;2.3.//Generated by MyEclipse 4.5.6.7.public interface IHelloWorldService { 8.9.10.11.public String example(String message);12.13.14.15.} 16.Java代碼
1.package com.myeclipse.wsExample;2.3.//Generated by MyEclipse 4.5.6.7.public class HelloWorldServiceImpl implements IHelloWorldService { 8.9.10.11.public String example(String message){ 12.13.return message;14.15.} 16.17.18.19.} 20.修改service.xml 文件,加入以下代碼:
Xml代碼
1.2.3.
客戶端實(shí)現(xiàn)如下:
Java代碼
1.package com.myeclipse.wsExample.client;2.3.import java.net.MalformedURLException;4.5.import java.net.URL;6.7.8.9.import org.codehaus.xfire.XFireFactory;10.11.import org.codehaus.xfire.client.Client;12.13.import org.codehaus.xfire.client.XFireProxyFactory;14.15.import org.codehaus.xfire.service.Service;16.17.import org.codehaus.xfire.service.binding.ObjectServiceFactory;18.19.20.21.import com.myeclipse.wsExample.IHelloWorldService;22.23.24.25.public class HelloWorldClient { 26.27.public static void main(String[] args)throws MalformedURLException, Exception { 28.29.// TODO Auto-generated method stub 30.31.Service s=new ObjectServiceFactory().create(IHelloWorldService.class);32.33.XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());34.35.String url=“http://localhost:8989/HelloWorld/services/HelloWorldService”;36.37.38.39.try 40.41.{ 42.43.44.45.IHelloWorldService hs=(IHelloWorldService)xf.create(s,url);46.47.String st=hs.example(“zhangjin”);48.49.System.out.print(st);50.51.} 52.53.catch(Exception e)54.55.{ 56.57.e.printStackTrace();58.59.} 60.61.} 62.63.64.65.} 66.這里再說點(diǎn)題外話,有時(shí)候我們知道一個(gè)wsdl地址,比如想用java客戶端引用.net 做得webservice,使用myeclipse引用,但是卻出現(xiàn)無法通過驗(yàn)證的錯(cuò)誤,這時(shí)我們可以直接在類中引用,步驟如下:
Java代碼
1.public static void main(String[] args)throws MalformedURLException, Exception { 2.3.// TODO Auto-generated method stub 4.5.Service s=new ObjectServiceFactory().create(IHelloWorldService.class);6.7.XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());8.9.10.11.//遠(yuǎn)程調(diào)用.net開發(fā)的webservice 12.13.Client c=new Client(new URL(“http://www.tmdps.cn/axis2/
同理,也需要將axis2復(fù)制到webapp目錄中
在axis2中部署webservice有兩種方法,第一種是pojo方式,這種方式比較簡單,但是有一些限制,例如部署的類不能加上包名
第二種方式是利用xml發(fā)布webservice,這種方法比較靈活,不需要限制類的聲明
下面分別說明使用方法:
1.pojo方式:在Axis2中不需要進(jìn)行任何的配置,就可以直接將一個(gè)簡單的POJO發(fā)布成WebService。其中POJO中所有的public方法將被發(fā)布成WebService方法。先實(shí)現(xiàn)一個(gè)pojo類:
Java代碼
1.public class HelloWorld{ 2.3.public String getName(String name)4.5.{ 6.7.return ”你好 “ + name;8.9.} 10.11.public int add(int a,int b)12.13.{ 14.15.return a+b;16.17.} 18.19.} 20.由于這兩個(gè)方法都是public類型,所以都會(huì)發(fā)布成webservice。編譯HelloWorld類后,將HelloWorld.class文件放到%tomcat%webappsaxis2WEB-INFpojo目錄中(如果沒有pojo目錄,則建立該目錄),然后打開瀏覽器進(jìn)行測試:
輸入一下url:
http://localhost:8080/axis2/services/listServices
會(huì)列出所有webservice
這是其中的兩個(gè)webservice列表,接著,在客戶端進(jìn)行測試:
首先可以寫一個(gè)封裝類,減少編碼,代碼如下:
Java代碼
1.package MZ.GetWebService;2.3.import javax.xml.namespace.QName;4.5.6.7.import org.apache.axis2.AxisFault;8.9.import org.apache.axis2.addressing.EndpointReference;10.11.import org.apache.axis2.client.Options;12.13.import org.apache.axis2.rpc.client.RPCServiceClient;14.15.16.17.18.19.public class GetWSByAxis2 { 20.21.private static String EndPointUrl;22.23.private static String QUrl=”http://ws.apache.org/axis2“;
24.25.private QName opAddEntry;26.27.public String WSUrl;28.29.public RPCServiceClient setOption()throws AxisFault 30.31.{ 32.33.RPCServiceClient serviceClient = new RPCServiceClient();34.35.Options options = serviceClient.getOptions();36.37.EndpointReference targetEPR = new EndpointReference(WSUrl);38.39.options.setTo(targetEPR);40.41.return serviceClient;42.43.} 44.45.46.47.public QName getQname(String Option){ 48.49.50.51.return new QName(QUrl,Option);52.53.} 54.55.//返回String 56.57.public String getStr(String Option)throws AxisFault 58.59.{ 60.61.RPCServiceClient serviceClient =this.setOption();62.63.64.65.opAddEntry =this.getQname(Option);66.67.68.69.String str =(String)serviceClient.invokeBlocking(opAddEntry, 70.71.new Object[]{}, new Class[]{String.class })[0];72.73.return str;74.75.} 76.77.// 返回一維String數(shù)組 78.79.public String[] getArray(String Option)throws AxisFault
80.81.{ 82.83.RPCServiceClient serviceClient =this.setOption();84.85.86.87.opAddEntry =this.getQname(Option);88.89.90.91.String[] strArray =(String[])serviceClient.invokeBlocking(opAddEntry, 92.93.new Object[]{}, new Class[]{String[].class })[0];94.95.return strArray;96.97.} 98.99.//從WebService中返回一個(gè)對象的實(shí)例
100.101.public Object getObject(String Option,Object o)throws AxisFault 102.103.{ 104.105.RPCServiceClient serviceClient =this.setOption();106.107.QName qname=this.getQname(Option);108.109.Object object = serviceClient.invokeBlocking(qname, new Object[]{},new Class[]{o.getClass()})[0];110.111.return object;112.113.} 114.115.116.117.///////////////////////////////////////// 讀者可以自己封裝數(shù)據(jù)類型,如int,byte,float等數(shù)據(jù)類型
118.119.} 120.客戶端調(diào)用方法:
Java代碼
1.MZ.GetWebService.GetWSByAxis2 ws=new MZ.GetWebService.GetWSByAxis2();2.3.ws.WSUrl=”http://localhost:8989/axis2/services/HelloWorld“;4.5.HelloWorld hello=(HelloWorld)ws.getObject(”getName“, HelloWorld.class);6.7.8.9.10.11.System.out.println(hello.getName(”zhangjin“));12.2.使用service.xml發(fā)布webservice,這種方式和直接放在pojo目錄中的POJO類不同。要想將MyService類發(fā)布成Web Service,需要一個(gè)services.xml文件,這個(gè)文件需要放在META-INF目錄中,該文件的內(nèi)容如下:
Xml代碼
1.
http://localhost:8080/axis2/services/myService?wsdl
除此之外,還有直接可以在其中制定webservice操作方法:可以這樣些service.xml文件
Java代碼
1. 10.11.service.HelloWorld 12.13. 14.15.
第四篇:WebService客戶端代碼生成方式總結(jié)
一、Webservice可以使用的框架很多。AXIS、CXF、JAX、XFIRE,這些框架都可以根據(jù)wsdl文件生成ws的服務(wù)器和客戶端代碼。
二、Ws的調(diào)用方式有三種,http post、http get、soap post。本人建議使用http post,他訪問遠(yuǎn)程ws接口的速度比使用soap post要快些。象使用axis框架實(shí)現(xiàn)soap post方式來說,簡單的接口還好,對于使用了大量代理類及帶有soaphead的ws,且還要在本地生成一大堆JAVA類來和服務(wù)端對應(yīng)。特別如下這種情況,axis好像無法實(shí)現(xiàn)。Soaphead如下 67677
下面就如何書寫客戶端代碼詳細(xì)講解下。1.通過發(fā)送http post請求來調(diào)用ws。
SOAPUI是個(gè)不錯(cuò)的工具,他可以根據(jù)wsdl文件生成測試?yán)印A硗庵匾氖牵梢陨蓋sdl對應(yīng)的請求報(bào)文和響應(yīng)報(bào)文。這樣我們在調(diào)用別人寫的ws時(shí),不管多復(fù)雜的ws都可以簡單的調(diào)用。首先按照SOAPUI顯示的請求報(bào)文格式拼裝我們的請求報(bào)文,使用java.net.HttpURLConnection對象來發(fā)送http post請求。然后使用輸出流、輸出流獲得響應(yīng)報(bào)文,再用Element解析報(bào)文得到要取的數(shù)據(jù)。示例代碼如下: JAVA類SoapInvoke: package test;
import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;
public class SoapInvoke {
public static void main(String[] args){
} try {
} soapSpecialConnection();e.printStackTrace();} catch(Exception e){ public static void soapSpecialConnection()throws Exception {
//拼裝soap請求報(bào)文
StringBuilder sb = new StringBuilder();StringBuilder soapHeader = new StringBuilder();soapHeader.append(“
//設(shè)置soap請求報(bào)文的相關(guān)屬性
String url=“http://localhost:8080/CXFServer/SayHelloService”;URL u = new URL(url);HttpURLConnection conn =(HttpURLConnection)u.openConnection();conn.setDoInput(true);conn.setDoOutput(true);conn.setUseCaches(false);conn.setDefaultUseCaches(false);conn.setRequestProperty(“Host”, “l(fā)ocalhost:8080”);conn.setRequestProperty(“Content-Type”, “text/xml;charset=utf-8”);conn.setRequestProperty(“Content-Length”, String.valueOf(soapHeader.length()));conn.setRequestProperty(“SOAPAction”, “");conn.setRequestMethod(”POST“);//定義輸出流
OutputStream output = conn.getOutputStream();if(null!= soapHeader){ byte[] b = soapHeader.toString().getBytes(”utf-8“);//發(fā)送soap請求報(bào)文
output.write(b, 0, b.length);} output.flush();output.close();//定義輸入流,獲取soap響應(yīng)報(bào)文
InputStream input = conn.getInputStream();int c =-1;//sb為返回的soap響應(yīng)報(bào)文字符串
while(-1!=(c = input.read())){ sb.append((char)c);} input.close();}
} 2.通過axis來調(diào)用ws。
對于使用了復(fù)雜代理類的ws,我們在調(diào)用時(shí)可以使用AXIS、CXF、xfire架包來自動(dòng)生成ws客戶端JAVA代碼。下面以axis為例,來展示。服務(wù)器端主要JAVA代碼 package test;
import javax.jws.WebService;
@WebService public class SayHelloImpl implements SayHelloService {
public wsResult sayHelloMr(String name){
wsResult retObj = new wsResult();
retObj.setResultVal(”Hello,mr “ + name);
return retObj;
}
public wsResult sayHelloMiss(InputClass input){
wsResult retObj = new wsResult();
retObj.setResultVal(”Hello,Miss “ + input.getName());
return retObj;
} } 客戶端:
1)新建wsdltojava.bat文件,放到C盤,文件內(nèi)容如下: set Axis_Lib=E:axis-bin-1_4axis-1_4lib set Java_Cmd=java-Djava.ext.dirs=%Axis_Lib% set Axis_Servlet=http://localhost:8080/CXFServer/SayHelloService?wsdl %Java_Cmd% org.apache.axis.wsdl.WSDL2Java-u %Axis_Servlet% 其中Axis_Lib為本地axis架包的路徑;Axis_Servlet為本地ws的URL,這里也可以設(shè)置為此ws服務(wù)器對應(yīng)的wsdl文件的路徑。
2)在DOS里,執(zhí)行wsdltojava.bat。在C盤根目錄下就會(huì)生成JAVA客戶端的代碼了 3)新建一個(gè)java類Invoke,代碼如下:
package test;
public class invoke {
} }
SayHelloService stub = svc.getSayHelloImplPort();//調(diào)用
//WsResult wsResult = stub.sayHelloMr(”zhouyun“);InputClass inputClass=new InputClass();inputClass.setName(”zhouyun“);WsResult wsResult = stub.sayHelloMiss(inputClass);System.out.println(”結(jié)果是:" + wsResult.getResultVal());public static void getResult(){ try { SayHelloImplServiceLocator svc = new } public static void main(String[] args)throws Exception { getResult();SayHelloImplServiceLocator();} catch(Exception e){ } System.out.println(e);Ps: 1.通過命令生成的java客戶端代碼里SayHelloImplServiceLocator類是調(diào)用ws的入口。
2.執(zhí)行此類,Myelipse控制臺(tái)會(huì)輸出Hello,Miss zhouyun,代表調(diào)用成功。
3.象JAX、xfire架包生成的客戶端代碼不能實(shí)現(xiàn)代理類輸入、輸出,只可以實(shí)現(xiàn)簡單數(shù)據(jù)類型輸入、輸出,象String、Map、AaaryList等等。只有axis可以實(shí)現(xiàn)代理類的輸入、輸出。
第五篇:材料科學(xué)基礎(chǔ)總結(jié)
金屬學(xué)復(fù)習(xí)總結(jié)
鋼的牌號代表的鋼的種類: Q235 9SiCr 1Cr18Ni9 45 H62 KTH300-06 4Cr13 LC4 LY1 1Cr18Ni9Ti QT450-10 QT700-2 HT200 40CrNi T7A QT400-15 20CrMnTi CrWMn LF5 60Si2Mn Q345 H80 Q215 65Mn 20CrMnTi 40 40Cr 40Cr ZGMn13-1 15Cr 60Si2Mn 3Cr13 2Cr13 GCr15 5CrNiMo 1Cr18Ni9 T8 RUT260 W18Cr4V Q345 HT250 Q275 1Cr13 Q255 T12 20 GCr15SiMn HT250
鋼的種類代表的常用鋼種: 如: 優(yōu)質(zhì)碳素結(jié)構(gòu)鋼45, 高錳鋼 滲碳鋼 灰鑄鐵 球墨鑄鐵 合金彈簧鋼 低合金工具鋼 蠕墨鑄鐵 奧氏體不銹鋼 普通質(zhì)量碳素結(jié)構(gòu)鋼 調(diào)質(zhì)鋼 馬氏體不銹鋼 碳素工具鋼 1.過冷奧氏體發(fā)生的馬氏體轉(zhuǎn)變屬于(非擴(kuò)散型相變)2.珠光體型的組織是由鐵素體和滲碳體組成的(機(jī)械混合物)3.碳鋼誶火要得到馬氏體組織,其冷卻速度要()臨界冷卻速度(vk)。4.工件淬火后需立即回火處理,隨著回火溫度的提高,材料的硬度()5.共析成分的液態(tài)鐵碳合金緩慢冷卻得到的平衡組織是P
表征材料表面局部區(qū)域內(nèi)抵抗變形能力的指標(biāo)為()2.下列原子結(jié)合鍵既具有方向性又具有飽和性的是()3.下面哪個(gè)不屬于大多數(shù)金屬具有的晶體結(jié)構(gòu)()4.面心立方結(jié)構(gòu)晶胞中原子數(shù)個(gè)數(shù)是()
5.如圖1所示的位錯(cuò)環(huán)中,屬于刃型位錯(cuò)的是()6.固體材料中物質(zhì)傳輸?shù)姆绞綖?)7.純鐵在室溫下的晶體結(jié)構(gòu)為()8.由一種成分的液相同時(shí)凝固生成兩種不同成分面相的過程稱為()9.碳原子溶于α-Fe形成的固溶體為()10.鋼鐵材料的熱加工通常需要加熱到()相區(qū)
l.成分三角形中標(biāo)出了O材料的成分點(diǎn)()2.白銅是以()為主要合金元素的鋼合金
3.45鋼和40Cr鋼比較,45鋼的(淬透性低,淬硬性高)4.金屬塑性變形方式的是(滑移)5.下列不同含碳量的鋼中,強(qiáng)度最高的是()A.WC=0.2% B.WC=0.45% C.WC=0.8% 「,WC=l.2%
我的手機(jī)
16:23:21 l.高分子大分子鏈的()決定了高分子材料獨(dú)特的性能 2.在置換型固溶體中,兩組元原子擴(kuò)散速率的差異引起的標(biāo)記面漂移現(xiàn)象稱為()3.為減少鑄造缺陷,鑄造合金需要熔點(diǎn)低、流動(dòng)性好,因此一般選擇()的合金。4.根據(jù)相律,對于三元合金,最大的平衡相數(shù)為()5.調(diào)質(zhì)處理是()的復(fù)合熱處理工藝 6.材料塑性常用()和()兩個(gè)指標(biāo)表示
7.按溶質(zhì)原子不在晶格中的位置不同,固溶體可分為()和()8.純金屬品體中的點(diǎn)缺陷主要包括()和()
加工硬化: 淬火: 熱硬性:
回復(fù)與再結(jié)晶: 成分過冷:
制造某齒輪,要求齒輪表面有高的硬度(>50HRC),面心部具有良好的韌(AK>40J),原采用40鋼材料,現(xiàn)因廠庫存的40鋼已用完,現(xiàn)只剩20鋼,擬用20鋼代替,試說明
(1)分別寫出40鋼和20鋼的預(yù)先熱處理和最終熱處理方法(或者寫出完整的加工工藝路線)(2)分別寫出40鋼和20鋼的熱處理方法的目的及最終熱處理后獲得組織?
1.()是固體材料中物質(zhì)傳輸?shù)奈ㄒ环绞健?/p>
2.a-Fe在室溫下的品體結(jié)構(gòu)為()A.面心立方B.體心立方C.密排六方D.正方結(jié)構(gòu)
3.恒溫條件下,由一種成分的固相同時(shí)生成兩種不同成分固相的轉(zhuǎn)變稱為()。A.勻晶轉(zhuǎn)變B.共析轉(zhuǎn)變C.包晶轉(zhuǎn)變D.共晶轉(zhuǎn)變 4.碳原子溶于γ-Fe中形成的固溶體為()。5.過冷奧氏體發(fā)生的珠光體轉(zhuǎn)變屬于()。
6.表征材料在外力作用下產(chǎn)生塑性變形能力的指標(biāo)為()。7.結(jié)合鍵既無方向性又無飽和性的是()8.不屬于大多數(shù)金屬具有的晶體結(jié)構(gòu)()9.體心立方結(jié)構(gòu)晶胞中原子的個(gè)數(shù)是()。10.萊氏體是由()組成的共晶體。
11.工件淬火后需立即回火處理,隨著回火溫度的降低,材料的硬度()。12.過共析成分的液態(tài)鐵碳合金緩慢冷卻得到的平衡組織是()。13.黃銅是以()為主要合金元素的銅合金。14.45鋼和40Cr鋼比較,40Cr鋼的(B)。
A.淬透性低,淬硬性高B.淬透性高,淬硬性低C淬透性高,淬硬性高D.無法比較
15.下列不同含碳量的鋼中,塑性最好的是()A.WC=0.25% B.WC=0.50% C.WC=0.9% D.WC=1.4%
1.常溫下的塑料為玻璃態(tài),而常溫下的橡膠為()2.鐵碳合金貝氏體轉(zhuǎn)變時(shí),溫度較高存在()的擴(kuò)散。3.根據(jù)相律,對于二元合金,最大的平衡相數(shù)為(3)。4.晶體中位錯(cuò)運(yùn)動(dòng)的方式有()和()。
5.按溶質(zhì)原子在晶格中的位置不同,固溶體可分為()和()
6.晶體中產(chǎn)生刃型位錯(cuò)的位錯(cuò)線與柏氏矢量(),螺型位錯(cuò)的位錯(cuò)線與柏氏矢量()。
二次硬化: 時(shí)效處理: 復(fù)合材料: 變形織構(gòu):
我的手機(jī)
16:23:21 分別用40Cr和20Cr做某型號柴油機(jī)的凸輪軸,試說明:(1)寫出40Cr鋼和20Cr鋼的預(yù)先熱處理和最終熱處理方法(2)分別寫出40Cr鋼和20Cr鋼的熱處理方法的目及最終熱處理 后獲得組織?
T10鋼加熱到A1+50℃,用圖示的方法冷卻。1.T10鋼加熱后得到什么組織? 2.分別寫出轉(zhuǎn)變完全后得到什么組織?
1.擴(kuò)散發(fā)生的驅(qū)動(dòng)力是()
2.有反應(yīng)擴(kuò)散的現(xiàn)象的熱處理工藝是()A.回火 B.退火 C.表面淬火 D.滲碳 3.γ-Fe在室溫下的晶體結(jié)構(gòu)為()
4.()是碳原子溶于γ-Fe中形成的間隙固溶體。5.板條馬氏體和針狀馬氏體相比,其特點(diǎn)是()
6.常溫下的塑料為(),而常溫下的橡膠為高彈態(tài)。
7.一般碳鋼淬火后有殘余奧氏體存在,可以通過()處理,最大限度消除殘余奧氏體。
8.錫基和鉛基鑄造軸承合金也稱為()
9.材料的結(jié)晶過程是品核()與()兩個(gè)過程。
10.晶體中()的位錯(cuò)線與柏氏失量垂直,()的位錯(cuò)線與柏氏矢量平行。
鋼的牌號代表的鋼的種類: Q255 KTH300-06 65Mn 20 CrWMn 40Cr HT250 LY1 15Cr 1Cr18Ni9 T7A 2Cr13QT700-2 Q345
1.均勻形核(非均勻形核): 2.二次硬化: 4.偽共晶: 5.熱處理:
下圖所示的二元共品相圖,(1)在平衡凝固條件下、成份為Wb=40%的合金①在室溫下的相組成和組織組成分別是什么?(2)如果希望得到共品組織加上相對量為5%的β的合金,求該合金的成分。
材料9SiCr(T12A)制造簡單小型冷沖模。1.零件加工工藝路線。
2.各熱處理的目的和獲得的組織。
1.面心立方晶體中,可能潛在的滑移系有()。
2.圖中1、2、3合金在常溫下凝固后,枝晶偏析最大的是()3.殘余奧氏體可以通過()處理進(jìn)行最大限度的消除。4.針狀馬氏體和板條馬氏體相比,其特點(diǎn)是()。
5.板條狀馬氏體的亞結(jié)構(gòu)()針狀馬氏體的亞結(jié)構(gòu)是()6.屬于擴(kuò)散型轉(zhuǎn)變的是()A.珠光體體轉(zhuǎn)變 B.上貝氏轉(zhuǎn)變 C.下貝氏體轉(zhuǎn)變 D.馬氏體轉(zhuǎn)變
1.鐵素體最高含碳量為()2.鐵碳合金相圖中從奧氏體中開始析出鐵素體的轉(zhuǎn)變曲線又稱為()3.反應(yīng)擴(kuò)散的現(xiàn)象的熱處理工藝是()4.鐵碳合金平衡凝固后,室溫存在的低溫萊氏體的組成相是()
Fe-Fe3C相圖
立方晶體的ABCD滑移面上有一正方形位錯(cuò)環(huán)(順時(shí)針為正方向),指出CD段位錯(cuò)線的類型是()A.正刃型B.負(fù)刃型C.右螺型D.左螺型
立方晶體的ABCD滑移面上有一正方形位錯(cuò)環(huán)(順時(shí)針為正方向),指出CD段位錯(cuò)線的類型是()A.正刃型B.負(fù)刃型C.右螺型D.左螺型
1.密排六方結(jié)構(gòu)的配位數(shù)是(12)。
2.面心立方結(jié)構(gòu)的原子最密排面的晶品向族為()A.[111] B.<111> C.[110] D.<110>
1.灰鑄鐵力學(xué)性能主要取決于()和(),2.結(jié)構(gòu)起伏和能量起伏是均勻形核的必要條件同時(shí),均勻形核還須在一定的()
1.相律是在完全平衡狀態(tài)下,系統(tǒng)的()、()和溫度壓力之間的關(guān)系,是系統(tǒng)的平衡條件的數(shù)學(xué)表達(dá)式:()口ZGMn13-1 口Q275 口空間點(diǎn)陣 口5CrNiMo 口RUT260 口結(jié)構(gòu)起伏 口3Cr13 口彌散強(qiáng)化 口Q345 口李晶
口柏氏矢量
1.生產(chǎn)中一般以()作為評定材料切削加工性能的主要參數(shù)。A.強(qiáng)度B.硬度C.韌性D.塑性
2.哪種材料不能鍛造加工成型()。A.可鍛鑄鐵B.鋁合金C.銅合金D.低碳鋼 3.圖2所示的二元共晶型合金中,容易產(chǎn)生偽共晶組織的合金為(); 容易產(chǎn)生離異共晶的合金為()。A.合金A B.合金B(yǎng) C.合金C D.合金D
1.位錯(cuò)沿滑移面的移動(dòng)稱為滑移,滑移面和滑移方向往往是()和()。2.不同含碳量的鋼中,硬度最高的是()。
A.WC=0.3% B.WC=0.70% C.WC=0.8% D.WC=1.3% 3.鋼鐵材料能夠進(jìn)行熱處理的根本原因是()。
鋼的種類代表的常用鋼種: 如: 優(yōu)質(zhì)碳素結(jié)構(gòu)鋼45。高錳鋼 球墨鑄鐵 @蠕墨鑄鐵 調(diào)質(zhì)鋼 滲碳鋼
@合金彈簧鋼 奧氏體不銹鋼 馬氏體不銹鋼 灰鑄鐵
低合金工具鋼
普通質(zhì)量碳素結(jié)構(gòu)鋼 @碳素工具鋼 定義: 材料的工藝性能: 熱變形:
非平衡凝固(平衡凝固)離異共晶
正(負(fù))溫度梯度
1.亞共析鋼的平衡相組成是()。A.F+A B.F+P C.F+Fe3C D.A+Fe3C 2.過共析碳鋼的正常淬火加熱溫度為()A.Ac1+30~50℃ E Ac3+30~50℃ C.Ac3+50~100℃ D.Accm+30~50℃
3.反復(fù)彎折鐵絲,鐵絲會(huì)越來越硬,最后會(huì)斷裂,這是由于產(chǎn)生了()。A.固溶強(qiáng)化現(xiàn)象B.再結(jié)晶現(xiàn)象C.加工硬化現(xiàn)象D.彌散強(qiáng)化現(xiàn)象
4.為了改善碳素工具鋼的切削加工性能,常采用的熱處理工藝是()。A.完全退火B(yǎng).擴(kuò)散退火C球化退火D.再結(jié)晶退火
5.灰鑄鐵具有良好的抗壓、減震性能,常用于制造(A.曲軸B.管接頭C.連桿D.機(jī)床床身、底座、箱體 6.下列鋼淬透性高低排列順序正確的是()。A.T8>20CrMnTi>25 B.20CrMnT1>25>T8 C.25>T8>20CrMnTi D.20CrMnTi>T8>25 7.鋼加熱時(shí)A的形成是由()、()、()、()等四個(gè)基本過程所組成的8.鋼的淬火加熱溫度越高,淬火后馬氏體中含碳量越(),馬氏體晶粒越(),殘余奧氏體的量()