<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
     

    Java Web系統(tǒng)常用的第三方接口

    編寫(xiě)人:阿蜜果

    日期:2010-12-21
    版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處:http://www.tkk7.com/amigoxie/archive/2010/12/21/341257.html

    1.    Web Service接口

    1.1 接口方式說(shuō)明和優(yōu)點(diǎn)

    在筆者的開(kāi)發(fā)生涯中,當(dāng)作為接口提供商給第三方提供接口時(shí),以及作為客戶端去調(diào)用第三方提供的接口時(shí),大部分時(shí)候都是使用Web  Service接口,Web Service作為接口使用廣泛的原因,與它的特點(diǎn)息息相關(guān)。

    Web Service的主要目標(biāo)是跨平臺(tái)的可互操作性,為了實(shí)現(xiàn)這一目標(biāo),Web Service 完全基于XML(可擴(kuò)展標(biāo)記語(yǔ)言)、XSDXML Schema)等獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn),是創(chuàng)建可互操作的、分布式應(yīng)用程序的新平臺(tái)。因此使用Web Service有許多優(yōu)點(diǎn):

    1.1.1 跨防火墻的通信

    如果應(yīng)用程序有成千上萬(wàn)的用戶,而且分布在世界各地,那么客戶端和服務(wù)器之間的通信將是一個(gè)棘手的問(wèn)題。因?yàn)榭蛻舳撕头?wù)器之間通常會(huì)有防火墻或者代理服務(wù)器。要調(diào)用Web Service,可以直接使用SOAP客戶端,然后把它和應(yīng)用程序連接起來(lái)。不僅縮短了開(kāi)發(fā)周期,還減少了代碼復(fù)雜度,并能夠增強(qiáng)應(yīng)用程序的可維護(hù)性。
       
    1.1.2 跨程序語(yǔ)言的應(yīng)用程序集成

    在企業(yè)的各種應(yīng)用系統(tǒng)中,很多系統(tǒng)不是使用相同的語(yǔ)言編寫(xiě)的,例如有的使用Java,有的使用phpC#asp。當(dāng)各種系統(tǒng)之間需要交互時(shí),可使用各種語(yǔ)言都通用的WSDL定義接口,對(duì)外將需要的接口暴露給指定的客戶。

    XML Web services 提供了在松耦合環(huán)境中使用標(biāo)準(zhǔn)協(xié)議(HTTPXMLSOAP WSDL)交換消息的能力。消息可以是結(jié)構(gòu)化的、帶類型的,也可以是松散定義的。
           1.1.3 軟件和數(shù)據(jù)重用

    Web Service在允許重用代碼的同時(shí),可以重用代碼背后的數(shù)據(jù)。使用Web Service,再也不必像以前那樣,要先從第三方購(gòu)買、安裝軟件組件,再?gòu)膽?yīng)用程序中調(diào)用這些組件;只需要直接調(diào)用遠(yuǎn)端的Web Service就可以了。

    另一種軟件重用的情況是,把好幾個(gè)應(yīng)用程序的功能集成起來(lái),通過(guò)Web Service “暴露出來(lái),就可以非常容易地把所有這些功能都集成到你的門戶站點(diǎn)中,為用戶提供一個(gè)統(tǒng)一的、友好的界面。

    可以在應(yīng)用程序中使用第三方的Web Service 提供的功能,也可以把自己的應(yīng)用程序功能通過(guò)Web Service 提供給別人。兩種情況下,都可以重用代碼和代碼背后的數(shù)據(jù)。

    1.2 重要概念

     1.2.1 何為Web Service
            Web Service是構(gòu)建互聯(lián)網(wǎng)分布式系統(tǒng)的基本部件,它是一個(gè)應(yīng)用程序,它向外界暴露出一個(gè)能夠通過(guò)Web進(jìn)行調(diào)用的API。這就是說(shuō),別人能夠用編程的方法通過(guò)Web來(lái)調(diào)用這個(gè)應(yīng)用程序。

    它通過(guò)標(biāo)準(zhǔn)通信協(xié)議,在互聯(lián)網(wǎng)上以服務(wù)的方式發(fā)布有用的程序模塊,目前大部分是用SOAP作為通信協(xié)議。

     它提供一份詳細(xì)的接口說(shuō)明書(shū),來(lái)幫助用戶構(gòu)建應(yīng)用程序,這個(gè)接口說(shuō)明書(shū)叫WSDLWeb服務(wù)描述語(yǔ)言,Web Service Description Language)。

    通常已發(fā)布的Web Service要注冊(cè)到管理服務(wù)器,便于使用者查詢和使用。這個(gè)是通過(guò)UDDI統(tǒng)一描述、發(fā)現(xiàn)和集成,Universal Discovery Description and Integration)來(lái)完成的。 
           1.2.2 何為SOAP協(xié)議?

    SOAP定義SOAP消息的XML格式(XML格式),如果你用一對(duì)SOAP標(biāo)記(SOAP Elements)把XML文檔括起來(lái),那么這個(gè)就是一個(gè)SOAP消息。 

    SOAP規(guī)范還定義了怎樣用XML來(lái)描述程序數(shù)據(jù),怎樣執(zhí)行RPC遠(yuǎn)程過(guò)程調(diào)用,Remote Procedure Call)。大多數(shù)SOAP解決方案都支持RPC-style應(yīng)用程序,因?yàn)楹芏喑绦騿T已對(duì)DCOMCORBA熟悉。它還支持Document-style應(yīng)用程序(SOAP消息只包含XML文本信息)。Document-style應(yīng)用程序有很好的靈活性,所以很多用RPC很難構(gòu)建的Web Service用這種方式構(gòu)建。 

    最后SOAP規(guī)范還定義了HTTP消息是怎樣傳輸SOAP消息的。這并不代表SOAP只能用HTTP來(lái)作為傳輸協(xié)議,MSMQSMTPTCP/IP都可以做SOAP的傳輸協(xié)議。

    安全性對(duì)于應(yīng)用程序來(lái)說(shuō)是很重要的。那么SOAP的安全性如何呢?對(duì)于把HTTP作為傳輸協(xié)議的SOAP來(lái)說(shuō)是沒(méi)有問(wèn)題的,因?yàn)?/span>HTTP協(xié)議已經(jīng)有很好的安全構(gòu)架。那么用其他傳輸協(xié)議會(huì)出現(xiàn)安全問(wèn)題嗎?這方面也已經(jīng)有相關(guān)規(guī)范

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-security.asp)。
         1.2.3 何為WSDL

    WSDL是一種XML文檔,它定義SOAP消息和這些消息是怎樣交換的。IDLInterface Description Language,接口描述語(yǔ)言)是用于COMCORBA的,WSDL是用于SOAP的。WSDL是一種XML文檔,所以可以閱讀和編輯,但很多時(shí)候是用工具來(lái)創(chuàng)建、由程序閱讀。

    舉個(gè)實(shí)例,當(dāng)讀者需要使用第三方的Web Service構(gòu)建應(yīng)用程序。你可以向接口提供商索取使用WSDL文檔,在該文檔中詳細(xì)的說(shuō)明了各個(gè)方法的方法名、參數(shù)和參數(shù)類型等信息。在Java等編程語(yǔ)言的IDE(例如My Eclipse)中,可以根據(jù)Web Servie生成對(duì)應(yīng)的測(cè)試代碼,稍微修改一下即可。
       
    1.2.4 何為UDDI

    UDDI可以比喻成電話本,電話本里記錄的是電話信息,而UDDI記錄的是Web Service信息。可以不把Web Service注冊(cè)到UDDI。但如果要讓全球的人知道這個(gè)Web Service,最好還是注冊(cè)到UDDI 

    UDDI目錄說(shuō)明文件也是一個(gè)XML文檔,它包括三個(gè)部分。“白頁(yè)(White Paper)”說(shuō)明提供Web Service的公司(人)信息,比如說(shuō)名稱、地址和聯(lián)系方式等等。“黃頁(yè)(Yellow Paper)”說(shuō)明UDDI目錄的分類,比如說(shuō)金融、服務(wù)和印刷等等。“綠頁(yè)(green Paper)”說(shuō)明接口(Web Service 提供的)的詳細(xì)信息。 UDDI提供多種查詢方式,來(lái)幫助你找到需要的Web Service。如果你查詢與財(cái)務(wù)有關(guān)的Web Service,那么UDDI會(huì)提供詳細(xì)的信息。
       1
    .2.5 何為XML

    XMLExtensible Markup Language)即可擴(kuò)展標(biāo)記語(yǔ)言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)。在Web Service接口中,WSDLUDDI目錄文件都是一種XML文檔,XML解決了數(shù)據(jù)表示的問(wèn)題。
       
    1.2.6 何為XSD

    XML解決了數(shù)據(jù)表示的問(wèn)題,但它沒(méi)有定義一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,更沒(méi)有說(shuō)怎么去擴(kuò)展這套數(shù)據(jù)類型。例如,整型數(shù)到底代表什么?16位,32位,還是64位?

    W3C制定的XML Schema(XSD)就是專門解決這個(gè)問(wèn)題的一套標(biāo)準(zhǔn)。它定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,并給出了一種語(yǔ)言來(lái)擴(kuò)展這套數(shù)據(jù)類型。Web Service就是用XSD來(lái)作為其數(shù)據(jù)類型系統(tǒng)的。

    1.3 開(kāi)發(fā)Web Service接口和調(diào)用測(cè)試

    Java IDE環(huán)境中開(kāi)發(fā)Web Service接口,以及如何調(diào)用第三方的WSDL文檔如何進(jìn)行接口測(cè)試的參考文章詳見(jiàn):

    1)《使用XFire+Spring構(gòu)建Web Service(一)——helloWorld》:

    http://www.tkk7.com/amigoxie/archive/2007/09/26/148207.html

    2)《使用XFire+Spring構(gòu)建Web Service(二)》:

          http://www.tkk7.com/amigoxie/archive/2007/09/28/149074.html

    3)《根據(jù)wsdl生成對(duì)應(yīng)的Java代碼進(jìn)行接口測(cè)試(一)》:

          http://www.tkk7.com/amigoxie/archive/2009/11/20/303038.html

    1.4 開(kāi)發(fā)舉例

    1.4.1 作為提供商提供hello world的接口
       參見(jiàn):《
    使用XFire+Spring構(gòu)建Web Service(一)——helloWorld》:

    http://www.tkk7.com/amigoxie/archive/2007/09/26/148207.html
       1.4.2
    作為提供商提供用戶信息查詢接口

       參見(jiàn):《使用XFire+Spring構(gòu)建Web Service(二)》:

       http://www.tkk7.com/amigoxie/archive/2007/09/28/149074.html

    2.    js接口

    2.1 接口方式說(shuō)明和優(yōu)缺點(diǎn)

    在開(kāi)發(fā)的過(guò)程中,也遇到過(guò)需要調(diào)用第三方接口的情況,例如筆者在完成的一個(gè)股票查詢的小demo中,就需要調(diào)用新浪提供的股票查詢的js接口。另外有一次,在系統(tǒng)中使用了第三方的GIS系統(tǒng),調(diào)用的也是js接口。因?yàn)檎{(diào)用js接口的門檻很低,所以有的接口供應(yīng)商會(huì)提供多種調(diào)用接口的方式,例如Web Servivce接口和js接口等。
       對(duì)于瀏覽器來(lái)說(shuō),script標(biāo)簽的src屬性所指向資源就跟img標(biāo)簽的src屬性所指向的資源一樣,都是一個(gè)靜態(tài)資源,瀏覽器會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)去加 載這些資源,而不會(huì)出現(xiàn)所謂的跨域問(wèn)題。這樣我們就可以通過(guò)該屬性將要訪問(wèn)的數(shù)據(jù)對(duì)象引用進(jìn)當(dāng)前頁(yè)面而繞過(guò)js跨域問(wèn)題。當(dāng)然,前提是接口必須是返回一段js腳本,如一個(gè)json對(duì)象數(shù)組定義的腳本:

    modlist = [
    {"modname": "mod1", "usernum": 200, "url": "/widget/info/1"},
    {"modname": "mod2", "usernum": 300, "url" : "/widget/info/2"},

    ];

    script標(biāo)簽也有一定的局限性,并不能解決所有js跨域問(wèn)題。script標(biāo)簽的src屬性值不能動(dòng)態(tài)改變以滿足在不同條件下獲取不同數(shù)據(jù)的需求, 更重要的是,不能通過(guò)這種方式正確訪問(wèn)以xml內(nèi)容方式組織的數(shù)據(jù)。

    2.2 開(kāi)發(fā)舉例

       2.2.1 新浪股票查詢的js接口
      功能說(shuō)明
    stockDetail.jsp根據(jù)傳入的stockId參數(shù),調(diào)用新浪股票查詢提供的js接口返回股票結(jié)果信息,并解析返回結(jié)果,將股票信息在頁(yè)面展示出來(lái)。

    stockDetail.jsp代碼參考如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%
    String stockId = request.getParameter("stockId");
    if (stockId == null) {
        stockId 
    = "000001";
    }
    %>
    <html>
      
    <head>
        
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        
    <title>股票查詢結(jié)果</title>
        
    <link href="<%=request.getContextPath() %>/css/style.css" type="text/css" rel="stylesheet">
        
    <script type="text/javascript" src="http://hq.sinajs.cn/list=s_sh<%=stockId %>" charset="gb2312"></script>
            
    <meta http-equiv="pragma" content="no-cache">
            
    <meta http-equiv="cache-control" content="no-cache">
            
    <meta http-equiv="expires" content="0">
      
    </head>
        
    <body onload="">
            
    <div class="bodyDiv">
                
    <table>
                    
    <tr>
                        
    <td colspan="2" valign="bottom" align="left" 
                            style
    ="width:176px; background: url(<%=request.getContextPath() %>/images/line2_bg.gif) repeat-x;border-bottom: 1px solid #b0bec7;"
                            height
    ="19">
                            
    <span class="titleFont">
                        
    <font class="newTitleFont"><b>股票查詢結(jié)果</b></font>
                            
    </span>
                        
    </td>
                    
    </tr>
                    
    <tr>
                        
    <td>指數(shù)名稱: </td>
                        
    <td><span id="stockName">&nbsp;</span></td>
                    
    </tr>
                    
    <tr>
                        
    <td>當(dāng)前點(diǎn)數(shù): </td>
                        
    <td><span id="currentPoint">&nbsp;</span></td>
                    
    </tr>
                    
    <tr>
                        
    <td>當(dāng)前價(jià)格: </td>
                        
    <td><span id="currentPrice">&nbsp;</span></td>
                    
    </tr>
                    
    <tr>
                        
    <td>漲跌率: </td>
                        
    <td><span id="ratio">&nbsp;</span></td>
                    
    </tr>
                    
    <tr>
                        
    <td>成交額(w): </td>
                        
    <td><span id=turnVolume>&nbsp;</span></td>
                    
    </tr>
                    
    <tr>
                        
    <td colspan="2" valign="bottom" align="right" 
                            style
    ="width:176px; background: url(<%=request.getContextPath() %>/images/line2_bg.gif) repeat-x;border-bottom: 1px solid #b0bec7;"
                            height
    ="19">
                            
    <span class="titleFont">
                                
    <font class="newTitleFont"><b>1日K線&nbsp;&nbsp;&nbsp;0返回</b></font>
                            
    </span>
                        
    </td>
                    
    </tr>
                
    </table>
            
    </div>
            
    <script language="javascript">
            
    <!--
            
    // 查詢結(jié)果的格式為:指數(shù)名稱,當(dāng)前點(diǎn)數(shù),當(dāng)前價(jià)格,漲跌率,成交量(手),成交額(萬(wàn)元)
            // 解析字符串
            var stockValue = hq_str_s_sh<%=stockId %>;
            
    var stockArray = stockValue.split(",");
            document.getElementById(
    "stockName").innerText = stockArray[0];
            document.getElementById(
    "currentPoint").innerText = stockArray[1];
            document.getElementById(
    "currentPrice").innerText = stockArray[2];
            document.getElementById(
    "ratio").innerText = stockArray[3];
            document.getElementById(
    "turnVolume").innerText = stockArray[5];
            
    -->
            
    </script>
      
    </body>
    </html>

    帶上6stockId參數(shù)(例如:值為000002),實(shí)時(shí)的A股(代號(hào)為s_sh000002)查詢結(jié)果如下圖所示:
      

       在文件頭部可看到如下一句引入了新浪提供的js

    <script type="text/javascript" src="http://hq.sinajs.cn/list=s_sh<%=stockId %>" charset="gb2312"></script>

       用如下語(yǔ)句獲得通過(guò)接口查詢到的數(shù)據(jù):

    var stockValue = hq_str_s_sh<%=stockId %>;
       2.2.2 對(duì)外提供js接口
     

    對(duì)外提供js接口只需要通過(guò)<script src="..." type="..."/>請(qǐng)求的地址返回的是JSON字符串即可。
       在本實(shí)例中,用到了筆者一篇
    JSON文章的實(shí)例(《JSON知識(shí)總結(jié)入門篇》:http://www.tkk7.com/amigoxie/archive/2010/09/25/332832.html),在上面進(jìn)行了小幅修改,簡(jiǎn)便起見(jiàn),沒(méi)有創(chuàng)建任何的Java類,提供的對(duì)外的js接口是直接通過(guò)json.txt,通過(guò)該文件返回一個(gè)JSON字符串,在實(shí)際的應(yīng)用情況中,可以是一個(gè)Ation等。
       json.txt定義了JSON格式的字符串,并定義放在json這個(gè)變量中,jsInterface.html文件請(qǐng)求遠(yuǎn)端的一個(gè)路徑,而后解析返回的JSON串,并打印出來(lái)。json.txt在遠(yuǎn)端的一個(gè)服務(wù)器上,例如該文件訪問(wèn)地址為:http://test.com/json.txt,文件的內(nèi)容如下:

    var json={
     "programmers": [
        { "firstName": "阿蜜果", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
        { "firstName": "范范", "lastName":"Hunter", "email": "jason@servlets.com" },
        { "firstName": "高子", "lastName":"Harold", "email": "elharo@macfaq.com" }
       ],
     "authors": [
        { "firstName": "安安", "lastName": "Asimov", "genre": "science fiction" },
    { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
    { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
       ],
     "musicians": [
        { "firstName": "茂茂", "lastName": "Clapton", "instrument": "guitar" },
    { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
       ]
    }

    在本地創(chuàng)建一個(gè)jsInterface.html網(wǎng)頁(yè),使用<script type="text/javascript" src=”…”/>請(qǐng)求返回json字符串的路徑信息,接著進(jìn)行打印,該文件代碼如下:

    <html>
        
    <head>
            
    <title>JS Interface Test</title>
            
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            
    <script type="text/javascript" src="http://test.com/json.txt"></script>
            
    <script type="text/javascript">
                alert(json.programmers[
    0].firstName + ',' + json.programmers[0].lastName + ',' + json.programmers[0].email);
                alert(json.programmers[
    1].firstName + ',' + json.programmers[1].lastName + ',' + json.programmers[1].email);
                alert(json.programmers[
    2].firstName + ',' + json.programmers[2].lastName + ',' + json.programmers[2].email);
                
                alert(json.authors[
    0].firstName + ',' + json.authors[0].lastName + ',' + json.authors[0].genre);
                alert(json.authors[
    1].firstName + ',' + json.authors[1].lastName + ',' + json.authors[1].genre);
                alert(json.authors[
    2].firstName + ',' + json.authors[2].lastName + ',' + json.authors[2].genre);
                
                alert(json.musicians[
    0].firstName + ',' + json.musicians[0].lastName + ',' + json.musicians[0].instrument);
                alert(json.musicians[
    1].firstName + ',' + json.musicians[1].lastName + ',' + json.musicians[1].instrument);
            
    </script>
        
    </head>
        
    <body>
        
    </body>
    </html>
             運(yùn)行后可看到運(yùn)行結(jié)果與《JSON知識(shí)總結(jié)入門篇》第一個(gè)實(shí)例的運(yùn)行結(jié)果一致。

    3.    http接口

    3.1 接口方式說(shuō)明和優(yōu)缺點(diǎn)

    需要為第三方提供一個(gè)接口,本來(lái)打算繼續(xù)使用Web Service接口,結(jié)果那邊的開(kāi)發(fā)人員說(shuō),他們沒(méi)有使用過(guò)Web Service接口(是做IPTV的一個(gè)公司),希望我們能夠提供http方式的接口。

    另外我們一般在提供Web Sservice接口的同時(shí),也對(duì)外提供http接口。

    3.2 開(kāi)發(fā)實(shí)例

    3.2.1 向http接口發(fā)送消息的使用小程序
       本實(shí)例對(duì)自己提供請(qǐng)求信息為xml格式的http接口,將xml格式的請(qǐng)求信息發(fā)給http接口的地址后,將調(diào)用接口的返回消息簡(jiǎn)單的顯示在頁(yè)面,為了簡(jiǎn)便起見(jiàn),筆者沒(méi)有對(duì)js代碼進(jìn)行包裝。
       該html文件代碼如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      
    <head>
          
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
          
    <title>http interface test</title>
            
    <meta http-equiv="pragma" content="no-cache">
            
    <meta http-equiv="cache-control" content="no-cache">
            
    <meta http-equiv="expires" content="0">
            
    <script>
            
    // XMLHttpRequest
            var http_request = false;
            
    function send_request(method, url, content, responseType, callback) {
                http_request 
    = false;
                
    // XMLHttpRequest
                if(window.XMLHttpRequest) {
                    
    //Mozilla
                    http_request = new XMLHttpRequest();
                    
    if(http_request.overrideMimeType) {
                        
    //MIME
                        http_request.overrideMimeType("text/xml");
                    }

                }
     else if(window.ActiveXObject) {
                    
    //IE
                    try {
                        http_request 
    = new ActiveXObject("Msxml2.XMLHTTP");
                    }
     catch (e) {
                        
    try {
                            http_request 
    = new ActiveXObject("Microsoft.XMLHTTP");
                        }

                        
    catch (e){}
                    }

                }

                
    if(!http_request) {
                    window.alert(
    "XMLHttpRequest create Error.");
                    
    return false;
                }

                
    if(responseType.toLowerCase() == "text" || responseType.toLowerCase() == "xml"{
                    http_request.onreadystatechange 
    = callback;
                }
      else {
                    window.alert(
    "error responseType.");
                    
    return false;
                }


                
    if(method.toLowerCase() == "get"{
                    http_request.open(method, url, 
    true);
                }
     else if(method.toLowerCase() == "post"{
                    http_request.open(method, url, 
    true);
                    http_request.setRequestHeader(
    "Content-Type""text/xml");
                }
     else {
                    window.alert(
    "http method error.");
                    
    return false;
                }

                http_request.send(content);
            }

            
            
    function submitInfo()
            
    {
                
    var form = document.httpTestForm;
                
    var pathInfo = form.pathInfo.value;
                
    var xmlInfo = form.xmlInfo.value;
                form.returnInfo.value 
    = "wait";
                send_request(
    "POST", pathInfo, xmlInfo, "xml", showHttpTestBack);
                
            }

            
    function showHttpTestBack() {
                
    if(http_request.readyState == 4
                
    {
                    
    if(http_request.status == 200
                    
    {
                        
    var responseInfo = http_request.responseText;
                        
    var form = document.httpTestForm;
                        form.returnInfo.value 
    = responseInfo;
                    }

                }

            }

            
    </script>
      
    </head>

      
    <body>
          
    <form name="httpTestForm" action="" method="post">
              
    <table width="100%" border="1">
                  
    <tr>
                      
    <td colspan="2" align="center">
                          
    <b>http interface Test</b>
                      
    </td>
                  
    </tr>
                  
    <tr>
                      
    <td>xmlInfo:</td>
                      
    <td>
                          
    <textarea id="xmlInfo" name="xmlInfo" cols="100" rows="5"></textarea>
                      
    </td>
                  
    </tr>
                  
    <tr>
                      
    <td>pathInfo:</td>
                      
    <td>
                          
    <input type="text" name="pathInfo" value="http://192.168.2.154:16000/Mbd/http/video" size="100" />
                      
    </td>
                  
    </tr>
                  
    <tr>
                      
    <td>returnInfo:</td>
                      
    <td>
                         
    <textarea name="returnInfo" id="returnInfo" cols="100" rows="5"></textarea>
                      
    </td>
                  
    </tr>
                  
    <tr>
                      
    <td colspan="2" align="center">
                          
    <input type="button" name="submitButton1" value="Submit" onclick="javascript:submitInfo()" />
                      
    </td>
                  
    </tr>
                  
              
    </table>
          
    </form>
      
    </body>
    </html>

    訪問(wèn)該頁(yè),頁(yè)面很簡(jiǎn)單,輸入正確的xml請(qǐng)求消息,和正確的路徑信息,點(diǎn)擊“Submit”按鈕,通過(guò)ajax調(diào)用http端口,并在成功取得信息后將返回結(jié)果顯示在最后一個(gè)文本框:

       3.2.2 作為提供商提供http接口

    在這個(gè)實(shí)例中,服務(wù)器提供了一個(gè)http接口,在這里是一個(gè)jsp頁(yè)面的訪問(wèn)地址,實(shí)際應(yīng)用過(guò)程中,可以是ServletAction的訪問(wèn)地址,在這個(gè)實(shí)例中,客戶端發(fā)送http get發(fā)送請(qǐng)求,帶上了hotel(賓館信息)和name(顧客姓名),http接口程序拿到參數(shù)信息后,根據(jù)一定算法檢查分配空閑房間號(hào),這里為了簡(jiǎn)便起見(jiàn),只是隨機(jī)的生成一個(gè)數(shù)字返回給客戶端。http接口的簡(jiǎn)單程序httpInterface.jsp如下所示:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%
    Double room = 500 * Math.random();
    out.write(
    "hotel=" + request.getParameter("hotel")
                
    + ";name=" + request.getParameter("name")
                
    + ";room=" + room.intValue());
    out.close();
    %>
    <html>
          
    <head>
            
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            
    <title>http Interface</title>
            
    <meta http-equiv="pragma" content="no-cache">
            
    <meta http-equiv="cache-control" content="no-cache">
            
    <meta http-equiv="expires" content="0">
          
    </head>
        
    <body>
          
    </body>
    </html>

    可在IE上帶上參數(shù)訪問(wèn)這個(gè)地址,可看到參考的結(jié)果信息,例如訪問(wèn)http://IP:端口/應(yīng)用名稱/httpInterface.jsp?hotel=motel&name=amigo,參考返回結(jié)果如下:

    hotel=motel;name=amigo;room=407

    4.    參考文章

    1)《Web Service入門》:http://tech.it168.com/j/2007-09-09/200709092111735.shtml

    2)《Web Service簡(jiǎn)介特點(diǎn),優(yōu)點(diǎn),缺點(diǎn)》:

    http://hi.baidu.com/linjk03/blog/item/4ee93b03a5d29a8dd43f7cd5.html

    3)《Web Service百度百科》:

    http://baike.baidu.com/view/67105.htm

    4)《如何解決js跨域問(wèn)題》:

    http://www.yaronspace.cn/blog/index.php/archives/542

    posted on 2010-12-21 17:24 阿蜜果 閱讀(8742) 評(píng)論(3)  編輯  收藏 所屬分類: Java解決方案


    FeedBack:
    # re: Java Web系統(tǒng)常用的第三方接口[未登錄](méi)
    2010-12-22 14:26 | abc
    不錯(cuò)。標(biāo)題有點(diǎn)大了,歡迎再補(bǔ)充其他的接口。  回復(fù)  更多評(píng)論
      
    # re: Java Web系統(tǒng)常用的第三方接口
    2010-12-22 14:54 | 阿蜜果
    @abc
    是從word上拷貝過(guò)來(lái)的,就變成這樣了,等全部寫(xiě)的差不多了提供個(gè)word下載吧。  回復(fù)  更多評(píng)論
      
    # re: Java Web系統(tǒng)常用的第三方接口
    2010-12-23 20:32 | 何楊
    好!有空來(lái)細(xì)讀。  回復(fù)  更多評(píng)論
      
    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

          生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來(lái)如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊(cè)

    關(guān)注blog

    積分與排名

    • 積分 - 2298118
    • 排名 - 3

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲视频在线观看网站| 免费精品一区二区三区第35| 又爽又黄无遮挡高清免费视频| 四虎亚洲精品高清在线观看| 成人奭片免费观看| 亚洲中文无码永久免| 成人人观看的免费毛片| 亚洲乱码国产乱码精华| 啦啦啦在线免费视频| 亚洲AV色欲色欲WWW| 国产在线观看免费不卡| 黄色毛片免费观看| 亚洲欧洲日产国码一级毛片| 香蕉97碰碰视频免费| 亚洲国产黄在线观看| 人人公开免费超级碰碰碰视频 | 亚洲综合成人网在线观看| 99热精品在线免费观看| 亚洲精品乱码久久久久久下载 | 黄网站色视频免费在线观看的a站最新 | 久久精品国产亚洲AV未满十八| 日产乱码一卡二卡三免费| 午夜在线亚洲男人午在线| 国产va免费精品| 亚洲尤码不卡AV麻豆| 国产午夜无码精品免费看| 亚洲视频在线播放| 成人在线免费看片| 亚洲日本va一区二区三区| 四虎影在线永久免费观看| 亚洲ts人妖网站| 曰皮全部过程视频免费国产30分钟| 青草久久精品亚洲综合专区| 久久99亚洲综合精品首页| 国产免费网站看v片在线| 亚洲天堂中文资源| 男人的好看免费观看在线视频| 午夜亚洲国产理论片二级港台二级 | 香蕉视频在线观看免费| 亚洲va中文字幕无码久久不卡| 最近免费中文字幕大全高清大全1|