不需要Web應(yīng)用服務(wù)器Java實(shí)現(xiàn)WebServices
近日來(lái),在社區(qū)內(nèi)瀏覽了一部分關(guān)于Java來(lái)實(shí)現(xiàn)WebServives的帖子,發(fā)現(xiàn)其中90%以上都有這樣一步操作:
- 首先在進(jìn)行webservice 一定要下載Axis安裝包。
- 將某某文件配置到%TOMCAT_HOME%\webapps\axis\WEB-INF。
- 然后在web.xml 加上。
實(shí)際上這種做法本身沒(méi)有錯(cuò),但是卻扼殺了WebServices的諸多優(yōu)點(diǎn)。那么讓我們從頭了解一下什么是WebServices吧。
百度百科中寫(xiě)道:
Web Services是由企業(yè)發(fā)布的完成其特定商務(wù)需求的在線應(yīng)用服務(wù),其他公司或應(yīng)用軟件能夠通過(guò)Internet來(lái)訪問(wèn)并使用這項(xiàng)在線服務(wù)。它是一種構(gòu)建應(yīng)用程序的普遍模型,可以在任何支持網(wǎng)絡(luò)通信的操作系統(tǒng)中實(shí)施運(yùn)行;它是一種新的web應(yīng)用程序分支,是自包含、自描述、模塊化的應(yīng)用,可以發(fā)布、定位、通過(guò)web調(diào)用。
Web Service是一個(gè)應(yīng)用組件,它邏輯性的為其他應(yīng)用程序提供數(shù)據(jù)與服務(wù).各應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議和規(guī)定的一些標(biāo)準(zhǔn)數(shù)據(jù)格式(Http,XML,Soap)來(lái)訪問(wèn)Web Service,通過(guò)Web Service內(nèi)部執(zhí)行得到所需結(jié)果.Web Service可以執(zhí)行從簡(jiǎn)單的請(qǐng)求到復(fù)雜商務(wù)處理的任何功能。一旦部署以后,其他Web Service應(yīng)用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務(wù)。
在構(gòu)建和使用Web Service時(shí),主要用到以下幾個(gè)關(guān)鍵的技術(shù)和規(guī)則:
1.XML:描述數(shù)據(jù)的標(biāo)準(zhǔn)方法.
2.SOAP:表示信息交換的協(xié)議.
3.WSDL:Web服務(wù)描述語(yǔ)言.
4.UDDI(Universal Description, Discovery and Integration):通用描述、發(fā)現(xiàn)與集成,它是一種獨(dú)立于平臺(tái)的,基于XML語(yǔ)言的用于在互聯(lián)網(wǎng)上描述商務(wù)的協(xié)議。 實(shí)際上,WebService的主要目標(biāo)是跨平臺(tái)的可互操作性。為了達(dá)到這一目標(biāo),WebService完全基于XML(可擴(kuò)展標(biāo)記語(yǔ)言)、XSD(XMLSchema)等獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn),是創(chuàng)建可互操作的、分布式應(yīng)用程序的新平臺(tái)。
長(zhǎng)項(xiàng)一:跨防火墻的通信。
長(zhǎng)項(xiàng)二:應(yīng)用程序集成。
長(zhǎng)項(xiàng)三:B2B的集成。
回到標(biāo)題我所說(shuō)的,WebServices真的一定必須要什么Jar包嗎?需要插件么?實(shí)際上webservice實(shí)現(xiàn)有多種方式比如最常用的有axis框架,xfire框架,通過(guò)該框架可以發(fā)布wsdl接口,也可以實(shí)現(xiàn)webservice客戶端,目前eclipse都有集成的插件,可以根據(jù)wsdl文件生成webservice客戶端調(diào)用接口,但是這樣部署的時(shí)候必須依賴框架的jar包,有時(shí)候可能因?yàn)榄h(huán)境等等原因,我們僅僅需要wsdl中的某一個(gè)接口,這時(shí)候可以通過(guò)http接口或socket接口直接發(fā)生xml數(shù)據(jù),來(lái)調(diào)用服務(wù)端webservice服務(wù),其實(shí)webservice底層還是發(fā)送xml數(shù)據(jù),只是框架封裝了對(duì)xml數(shù)據(jù)進(jìn)行序列化與反序列化操作,下面以兩個(gè)簡(jiǎn)單的例子說(shuō)明http方式和socket方式。第一個(gè)例子:http實(shí)現(xiàn)webservice接口調(diào)用例子:
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.UnsupportedEncodingException;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- public class HttpPostTest {
- void testPost(String urlStr) {
- try {
- URL url = new URL(urlStr);
- URLConnection con = url.openConnection();
- con.setDoOutput(true);
- con.setRequestProperty("Pragma:", "no-cache");
- con.setRequestProperty("Cache-Control", "no-cache");
- con.setRequestProperty("Content-Type", "text/xml");
- OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
- String xmlInfo = getXmlInfo();
- out.write(new String(xmlInfo));
- out.flush();
- out.close();
- BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
- String line = "";
- StringBuffer buf = new StringBuffer();
- for (line = br.readLine(); line != null; line = br.readLine()) {
- buf.append(new String(line.getBytes(),"UTF-8"));
- }
- System.out.println(buf.toString());
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private String getXmlInfo() {
- // 通過(guò)wsdl文件可以查看接口xml格式數(shù)據(jù),構(gòu)造調(diào)用接口xml數(shù)據(jù)
- String xml = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
- + "<SOAP-ENV:Body>"
- + "<m:getItemDetailSingle xmlns:m=\"http:xxxxxxxxxxxxxxxxxx/\">"
- + "<itemMo>"
- + "<category>政務(wù)域名</category>"
- + "<city>北京西壩河北里</city>"
- + "<flag>3</flag>"
- + "<itemId>10</itemId>"
- + "<itemIndex>22</itemIndex>"
- + "<keyword>朝陽(yáng)區(qū)</keyword>"
- + "<mobile>139-0111-1111</mobile>"
- + "<password>iteyePl</password>"
- + "<userName>hwak</userName>"
- + "</itemMo>"
- + "</m:getItemDetailSingle>"
- + "</SOAP-ENV:Body>"
- + "</SOAP-ENV:Envelope>";
- return xml;
- }
- public static void main(String[] args) throws UnsupportedEncodingException {
- String url = "http://localhost:9999/dataService/services/Job";
- new HttpPostTest().testPost(url);
- }
- }</PRE>
以上兩個(gè)例子我們可以看出,Java來(lái)實(shí)現(xiàn)WebServices的時(shí)候Web應(yīng)用服務(wù)器不是必須的,希望各位同學(xué)能夠因地制宜好好的利用WebServices所提供的各種優(yōu)勢(shì),我們要不僅會(huì)做,還要善于做!
原文鏈接:http://hwak.iteye.com/blog/1222660
編輯推薦: