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

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

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

    鷹翔宇空

    學(xué)習(xí)和生活

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    原文引自:http://www-128.ibm.com/developerworks/cn/webservices/ws-startaxis/

    作者:劉東
    本文介紹使用AXIS作為開(kāi)發(fā)環(huán)境來(lái)體會(huì)Web服務(wù)的開(kāi)發(fā)過(guò)程。

    一. 介紹


    本文并不是想介紹Web服務(wù)的原理、系統(tǒng)架構(gòu)等,我們假設(shè)您已經(jīng)了解了關(guān)于Web服務(wù)的一些基本的概念、原理等知識(shí)。本文主要是針對(duì)那些已經(jīng)了解Web服務(wù)概念,但是還沒(méi)有親身體會(huì)Web服務(wù)所帶來(lái)令人歡欣鼓舞的特征的開(kāi)發(fā)人員。在此我們認(rèn)為你已經(jīng)具備了Java、XML等基礎(chǔ)知識(shí),如果你還有其他開(kāi)發(fā)環(huán)境的經(jīng)驗(yàn)例如VB、VC那是再好不過(guò)的了。

    1.Web服務(wù)


    雖然我們并不想詳細(xì)講述Web服務(wù)的體系結(jié)構(gòu),但是大概的介紹一下還是有必要的。Web服務(wù)是一種新型的Web應(yīng)用程序。不同于其他Web應(yīng)用程序,它是自適應(yīng)、自我描述、模塊化的應(yīng)用程序,并可以跨越Web進(jìn)行發(fā)布、定位以及調(diào)用。簡(jiǎn)單的Web服務(wù)可以提供例如天氣預(yù)報(bào)或者航班信息的服務(wù)。一旦部署了Web服務(wù),其他的應(yīng)用程序就可以發(fā)現(xiàn)和調(diào)用所部署的服務(wù)。

    2.AXIS項(xiàng)目


    Axis框架來(lái)自 Apache 開(kāi)放源代碼組織,它是基于JAVA語(yǔ)言的最新的 SOAP 規(guī)范(SOAP 1.2)和 SOAP with Attachments 規(guī)范(來(lái)自 Apache Group )的開(kāi)放源代碼實(shí)現(xiàn)。有很多流行的開(kāi)發(fā)工具都使用AXIS作為其實(shí)現(xiàn)支持Web服務(wù)的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本是1.1,可以從 http://ws.apache.org/axis/index.html下載。下圖是AXIS核心引擎的體系結(jié)構(gòu)圖:



    圖1

    整個(gè)AXIS項(xiàng)目包括以下幾個(gè)部分:

    1. 消息流子系統(tǒng)
      消息流子系統(tǒng)提供了靈活的消息傳遞框架,這個(gè)消息傳遞框架包括處理程序、鏈、序列化程序和反序列化程序。處理程序是一個(gè)處理請(qǐng)求、響應(yīng)和故障流的對(duì)象。處理程序可被組合在一起成為鏈,而且可以使用一個(gè)靈活的部署描述符來(lái)配置這些處理程序的順序。
    2. 傳輸框架子系統(tǒng)
      提供了一個(gè)傳輸框架,這個(gè)傳輸框架可以幫助您創(chuàng)建自己的可插式傳輸發(fā)送器和傳輸偵聽(tīng)器。
    3. 數(shù)據(jù)編碼子系統(tǒng)
      AXIS完全按照 XML Schema 規(guī)范提供各種數(shù)據(jù)類(lèi)型的自動(dòng)序列化,并且提供功能擴(kuò)展接口來(lái)使用您自己定制的序列化器和反序列化器。
    4. 其他
      AXIS完全支持 WSDL 以及日志記錄、出錯(cuò)以及故障處理機(jī)制。它同時(shí)提供一些工具用來(lái)講WSDL文檔轉(zhuǎn)換成客戶端的調(diào)用框架以及根據(jù)類(lèi)來(lái)產(chǎn)生WSDL定義文檔。

    AXIS目前版本支持的標(biāo)準(zhǔn)是:W3C SOAP 1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java API for XML-Based RPC)1.0。

    除了前面介紹的AXIS外,本文中還將會(huì)用到TOMCAT,這里不再另行介紹。另外為了演示W(wǎng)eb服務(wù)真正與開(kāi)發(fā)環(huán)境無(wú)關(guān)以及AXIS產(chǎn)生的是標(biāo)準(zhǔn)的、符合規(guī)范的Web服務(wù),我們還將用到微軟公司的SOAP TOOLKIT以及微軟的開(kāi)發(fā)環(huán)境VB和VC來(lái)做為Web服務(wù)的客戶端。





    回頁(yè)首


    二. 環(huán)境搭建


    由于AXIS本身是基于JAVA語(yǔ)言開(kāi)發(fā)的項(xiàng)目,并且是以Web應(yīng)用形式發(fā)布的,因此它運(yùn)行時(shí)需要一個(gè)應(yīng)用服務(wù)器作為支撐。為了方便我們這里選用的是Tomcat。由于AXIS本身需要用到處理XML信息的包,所以我們建議使用JDK1.4并安裝Tomcat 4.1.24。下面是環(huán)境搭建步驟,讀取根據(jù)自身情況進(jìn)行安裝。

    1. 安裝JDK1.4.1
    2. 安裝Tomcat 4.1.24到C:\Tomcat并驗(yàn)證安裝是否成功
    3. 下載AXIS項(xiàng)目打包文件axis-1_1.zip解壓縮后將目錄中的webapps目錄下的axis子目錄拷貝到C:\Tomcat\webapps下。
    4. 驗(yàn)證AXIS的安裝:重新啟動(dòng)Tomcat服務(wù)器后打開(kāi)瀏覽器輸入網(wǎng)址http://localhost:8080/axis 后應(yīng)該出現(xiàn)如下圖所示頁(yè)面,點(diǎn)擊鏈接"Validate"來(lái)驗(yàn)證Axis所需的幾個(gè)JAVA包是否齊全。


    圖2

    點(diǎn)擊超鏈接Validate后,AXIS會(huì)自動(dòng)檢查所需的每一個(gè)JAVA組件,這協(xié)組件分為:必需組件以及可選組件,必須保證所有必需組件都存在,如下圖所示即為驗(yàn)證成功。



    圖3





    回頁(yè)首


    三. Web Service服務(wù)端開(kāi)發(fā)


    經(jīng)過(guò)了前兩步之后我們就可以開(kāi)始Web服務(wù)之旅了!大多數(shù)人在學(xué)習(xí)一種編程語(yǔ)言的第一步都是從Hello world程序開(kāi)始的,我們也不例外。我們將提供這樣一個(gè)Web服務(wù),通過(guò)給它傳入姓名,服務(wù)返回:你好[姓名],歡迎來(lái)到Web服務(wù)的世界。這就是我們的需求。我們將馬上根據(jù)AXIS的要求完成我們的需求,你就會(huì)發(fā)現(xiàn)原來(lái)Web服務(wù)可以這么簡(jiǎn)單!

    編寫(xiě)JAVA類(lèi)Hello.java,內(nèi)容如下:

    public class Hello{
     public String hello(String name){
      if(name==null)
       name = "";
      return "你好"+name+",歡迎來(lái)到Web服務(wù)的世界!";
    }
    }
    

    僅此而已,無(wú)需編譯,將該文件改名為Hello.jws并拷貝到AXIS應(yīng)用目錄C:\Tomcat\webapps\axis下。

    下面我們就可以測(cè)試該Web服務(wù)了,打開(kāi)瀏覽器并輸入剛剛創(chuàng)建的文件名對(duì)應(yīng)的URL地址 http://localhost:8080/axis/Hello.jws 瀏覽器顯示如下結(jié)果:

    There is a Web Service here
    
            
            Click to see the WSDL 

    點(diǎn)擊頁(yè)面上的鏈接查看該Web服務(wù)對(duì)應(yīng)的WSDL信息如下所示(我們將在下一小節(jié)簡(jiǎn)單介紹WSDL)

    <?xml version="1.0" encoding="UTF-8" ?>
    -<wsdl:definitions
     targetNamespace="http://localhost:8080/axis/Hello.jws"
     xmlns="http://schemas.xmlsoap.org/wsdl/"
     xmlns="http://www.w3.org/2000/xmlns/"
     xmlns:apachesoap="http://xml.apache.org/xml-soap" 
     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
     xmlns:impl="http://localhost:8080/axis/Hello.jws" 
     xmlns:intf="http://localhost:8080/axis/Hello.jws"
     xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
     - <wsdl:message name="helloRequest">
     <wsdl:part name="name" type="xsd:string" /> 
     </wsdl:message>
     + <wsdl:message name="helloResponse">
     - <wsdl:portType name="Hello">
     - <wsdl:operation name="hello" parameterOrder="name">
     <wsdl:input name="helloRequest" message="intf:helloRequest" /> 
     <wsdl:output name="helloResponse" message="intf:helloResponse" />
     </wsdl:operation> 
     </wsdl:portType>
     - <wsdl:binding name="HelloSoapBinding" type="intf:Hello"> 
     <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
     - <wsdl:operation name="hello"> 
     <wsdlsoap:operation soapAction="" />
     - <wsdl:input name="helloRequest">
     <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
      namespace="http://DefaultNamespace" />  
     </wsdl:input>- <wsdl:output name="helloResponse">  
     <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
      namespace="http://localhost:8080/axis/Hello.jws" />   
     </wsdl:output> 
     </wsdl:operation> 
     </wsdl:binding>
     - <wsdl:service name="HelloService">
     - <wsdl:port name="Hello" binding="intf:HelloSoapBinding">
     <wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" /> 
     </wsdl:port>  
     </wsdl:service> 
     </wsdl:definitions>
    

    到此我們已經(jīng)完成了hello的Web服務(wù)了,那我們?cè)趺锤嬖V用戶如何來(lái)使用該服務(wù)呢?我們只需要告訴用戶我們的Web服務(wù)的URL地址: http://localhost:8080/axis/Hello.jws?wsdl 就可以了!下一節(jié)我們將介紹如何通過(guò)這個(gè)地址來(lái)訪問(wèn)對(duì)應(yīng)的Web服務(wù)。





    回頁(yè)首


    四. Web Service客戶端開(kāi)發(fā)


    在這一節(jié)中我們將使用三種不同的語(yǔ)言來(lái)訪問(wèn)剛剛創(chuàng)建的Web服務(wù),分別是JAVA、VB、VC。為了使用VB和VC訪問(wèn)Web服務(wù),我們需要安裝微軟公司的Soap Toolkit 開(kāi)發(fā)工具包,這個(gè)工具包可以從微軟公司的主頁(yè)

    http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe

    下載,下載該軟件包并使用默認(rèn)方式安裝即可。

    在開(kāi)始客戶端開(kāi)發(fā)之前有兩個(gè)概念我們必須先粗略的介紹一下。

    SOAP:簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議。這是一種在松散的、分布的環(huán)境中使用XML對(duì)等地交換結(jié)構(gòu)化的和類(lèi)型化的信息提供了一個(gè)簡(jiǎn)單且輕量級(jí)的機(jī)制,它是一個(gè)基于XML的協(xié)議。它包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰(shuí)發(fā)送的,誰(shuí)應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encoding rules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類(lèi)型的實(shí)例; SOAP RPC表示(RPC representation),表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。

    雖然這四個(gè)部分都作為SOAP的一部分,作為一個(gè)整體定義的,但他們?cè)诠δ苌鲜窍嘟坏摹⒈舜霜?dú)立的。特別的,信封和編碼規(guī)則是被定義在不同的XML命名空間(namespace)中,這樣使得定義更加簡(jiǎn)單。

    SOAP的主要設(shè)計(jì)目標(biāo)是簡(jiǎn)明性和可擴(kuò)展性。這就意味著有一些傳統(tǒng)消息系統(tǒng)或分布式對(duì)象系統(tǒng)中的特性將不包含在SOAP的核心規(guī)范中。這些特性包括:分布式垃圾收集;批量消息傳輸/處理;對(duì)象引用;對(duì)象激活。

    WSDL:Web Service描述語(yǔ)言。使用了WSDL,我們就可以通過(guò)這種跨平臺(tái)和跨語(yǔ)言的方法使Web Service代理的產(chǎn)生自動(dòng)化。就像COM和CORBA的IDL文件,WSDL文件由客戶和服務(wù)器約定。由于WSDL設(shè)計(jì)成可以綁定除SOAP以外的其他協(xié)議,這里我們主要關(guān)注WSDL在HTTP上和SOAP的關(guān)系。同樣,由于SOAP目前主要用來(lái)調(diào)用遠(yuǎn)程的過(guò)程和函數(shù),WSDL支持SOAP傳輸?shù)奈臋n規(guī)范。

    WSDL文檔可以分為兩部分。頂部分由抽象定義組成,而底部分則由具體描述組成。抽象部分以獨(dú)立于平臺(tái)和語(yǔ)言的方式定義SOAP消息,它們并不包含任何隨機(jī)器或語(yǔ)言而變的元素。這就定義了一系列服務(wù),截然不同的網(wǎng)站都可以實(shí)現(xiàn)。

    1. JAVA客戶端


    使用AXIS的工具將使Web服務(wù)的訪問(wèn)和我們之前介紹的創(chuàng)建一個(gè)Web服務(wù)一樣的簡(jiǎn)單。我們前面安裝的AXIS環(huán)境中已經(jīng)包含著這樣的工具,它是一個(gè)JAVA類(lèi),類(lèi)名為:org.apache.axis.wsdl.WSDL2Java。打開(kāi)命令行窗口,轉(zhuǎn)到AXIS目錄下的WEB-INF子目錄。確保Tomcat服務(wù)已經(jīng)處于啟動(dòng)狀態(tài),鍵入命令 :

    Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl
    

    該命令執(zhí)行的結(jié)果是在當(dāng)前所在目錄下產(chǎn)生一個(gè)子目錄 localhost/axis/Hello_jws,該目錄下有四個(gè)JAVA源文件,它們分別是:

    Hello.java 定義了Web服務(wù)接口,此例中只有一個(gè)hello方法。

    HelloService.java 定義了用于獲取Web服務(wù)接口的方法。

    HelloServiceLocator.java 接口HelloService的具體實(shí)現(xiàn)。

    HelloSoapBindingStub.java Web服務(wù)客戶端樁,通過(guò)該類(lèi)與服務(wù)器交互。

    這四個(gè)JAVA類(lèi)幫我們處理了大部分的邏輯,我們需要的僅僅是把這些類(lèi)加到我們的項(xiàng)目然后創(chuàng)建一個(gè)我們自己的類(lèi)來(lái)調(diào)用它們即可。為此我們新加一個(gè)類(lèi)Main.java,為了方便,讓這個(gè)類(lèi)與剛產(chǎn)生的四個(gè)類(lèi)都在同一個(gè)包下。內(nèi)容如下:

    //Main.java
    package localhost.axis.Hello_jws;
    public class Main{
    public static void main(String[] args) throws Exception{
     HelloService service = new HelloServiceLocator();
     Hello hello = service.getHello(); 
     System.out.println("Response:"+hello.hello("罐頭")); 
     }
    }
    

    使用以下命令進(jìn)行編譯:

    javac -classpath lib\axis.jar;lib\jaxrpc.jar localhost\axis\Hello_jws\*.java
    

    如果編譯沒(méi)有問(wèn)題的話執(zhí)行該測(cè)試程序:

    java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main//運(yùn)行結(jié)果:Response:你好罐頭,歡迎來(lái)到Web服務(wù)的世界!
    

    在WSDL2Java工具自動(dòng)產(chǎn)生的幾個(gè)類(lèi)中,類(lèi)HelloServiceLocator中保存這一些跟服務(wù)器相關(guān)的信息,例如URL地址等,當(dāng)服務(wù)器的地址更改后但是服務(wù)并沒(méi)有改動(dòng)的時(shí)候直接修改該文件中的字符串定義,而無(wú)需重新生成這幾個(gè)類(lèi)。具體需要修改的內(nèi)容,打開(kāi)該文件便可一目了然。

    2. VB客戶端


    有了微軟SOAP toolkit,用VB調(diào)用Web服務(wù)也是一件令人愉快的事情。

    打開(kāi)VB開(kāi)發(fā)環(huán)境新建一個(gè)標(biāo)準(zhǔn)EXE項(xiàng)目,打開(kāi)工程(Project)菜單并選擇引用打開(kāi)組件引用對(duì)話框如下圖所示:找到并選中Microsoft Soap Type Library。



    圖 4

    新建并編輯窗體如下圖所示:



    圖 5

    編輯按鈕Call的點(diǎn)擊事件處理程序如下:(注意窗體的控件名稱要與程序中的名稱對(duì)應(yīng))

    Private Sub callBtn_Click()    
    '這種做法需要在工程中引用Soap Type Library  
    'Dim soap As MSSOAPLib.SoapClient  
    'Set soap = New MSSOAPLib.SoapClient
    Dim soap  
    Set soap = CreateObject("MSSOAP.SoapClient")   
    On Error Resume Next
    'soap.mssoapinit urlText.Text 
    Call soap.mssoapinit(urlText.Text)   
    If Err <> 0 Then   
     MsgBox "初始化SOAP失敗: " + Err.Description       
     urlText.SetFocus 
    Else       
     If Len(Trim(nameText.Text)) = 0 Then       
      MsgBox "請(qǐng)輸入您的姓名!"          
      nameText.SetFocus    
     Else          
      responseText.Text = soap.hello(nameText.Text) 
     End If 
     End If
    End Sub
    

    保存項(xiàng)目并運(yùn)行,輸入姓名并點(diǎn)擊按鈕Call。

    3. VC客戶端


    打開(kāi)VC開(kāi)發(fā)環(huán)境,新建項(xiàng)目HelloClient,項(xiàng)目類(lèi)型為 Win32 Console Application的空項(xiàng)目。新建C++ Source File文件名為:HelloSoap.cpp,編輯文件內(nèi)容如下:

    //#include "stdafx.h"
    #include <stdio.h>
    #import "msxml3.dll"
    using namespace MSXML2;
    //根據(jù)自己機(jī)器的情況修改下面語(yǔ)句中指定的路徑
    
    #import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap1.dll" \ 
     exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \ 
     "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
    using namespace MSSOAPLib;
    
    void Hello(){ 
     ISoapSerializerPtr Serializer;
     ISoapReaderPtr Reader; 
     ISoapConnectorPtr Connector;
     // Connect to the service 
     Connector.CreateInstance(__uuidof(HttpConnector));
     Connector->Property["EndPointURL"] = "http://localhost:8080/axis/Hello.jws?wsdl";
     Connector->Connect(); 
     // Begin message
     Connector->BeginMessage(); 
     // Create the SoapSerializer 
     Serializer.CreateInstance(__uuidof(SoapSerializer)); 
     // Connect the serializer to the input stream of the connector
     Serializer->Init(_variant_t((IUnknown*)Connector->InputStream)); 
    
     // Build the SOAP Message 
    
     Serializer->startEnvelope("","",""); 
     Serializer->startBody(""); 
     Serializer->startElement("hello","","",""); 
     Serializer->startElement("name","","","");
     Serializer->writeString("罐頭"); 
     Serializer->endElement(); 
     Serializer->endElement();
     Serializer->endBody(); 
     Serializer->endEnvelope();  
     
     // Send the message to the web service 
     Connector->EndMessage();   
     
     // Let us read the response
     Reader.CreateInstance(__uuidof(SoapReader)); 
     // Connect the reader to the output stream of the connector
     Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), ""); 
    
     // Display the result 
     printf("Response: %s\n", (const char*)Reader->RPCResult->text);  
    }
    
    int main()
    {
     CoInitialize(NULL);
     Hello(); 
     CoUninitialize(); 
     
     return 0; 
    }
    

    編譯并運(yùn)行該項(xiàng)目。

    本節(jié)只是為了演示如果通過(guò)VC來(lái)訪問(wèn)使用AXIS創(chuàng)建的Web服務(wù),至于Soap toolkit的具體使用請(qǐng)參照soap toolkit的幫助手冊(cè),其他語(yǔ)言的訪問(wèn)請(qǐng)查閱相關(guān)的文檔。





    回頁(yè)首


    五. AXIS集成

    為了讓我們的WEB應(yīng)用程序支持Web服務(wù)功能,我們需要將AXIS集成到我們的應(yīng)用程序中。集成AXIS很簡(jiǎn)單,首先需要拷貝AXIS用到的幾個(gè)JAR包文件,這些文件都在[AXIS]\WEB-INF\lib目錄下,將這些文件拷貝到我們自己的應(yīng)用目錄下的WEB-INF\lib。另外如果你用的不是TOMCAT服務(wù)器那就需要拷貝activation.jar,這個(gè)JAR文件可以在[TOMCAT]\common\lib目錄下找到!

    拷貝完JAR文件后就是web.xml的配置了,只需要把AXIS中的web.xml中的配置信息添加到我們自己應(yīng)用程序中的web.xml中即可。最重要的是下面的內(nèi)容:

    <servlet>  
     <servlet-name>AxisServlet</servlet-name>  
     <display-name>Apache-Axis Servlet</display-name>   
     <servlet-class> 
      org.apache.axis.transport.http.AxisServlet  
     </servlet-class>
    </servlet>
    
    <servlet-mapping>   
     <servlet-name>AxisServlet</servlet-name>  
     <url-pattern>*.jws</url-pattern>
    </servlet-mapping>
    
    <mime-mapping>    
     <extension>wsdl</extension>  
     <mime-type>text/xml</mime-type>
    </mime-mapping>
    
    <mime-mapping>   
     <extension>xsd</extension>   
     <mime-type>text/xml</mime-type>
    </mime-mapping>
    





    回頁(yè)首


    六 總結(jié)


    到此文章告一段落,通過(guò)以上的演練,我相信你已經(jīng)對(duì)Web服務(wù)有一個(gè)感性的認(rèn)識(shí),但是這個(gè)僅僅是開(kāi)始,我們也只是很簡(jiǎn)單的介紹了Web服務(wù)的一些基本概念并演示了一個(gè)無(wú)法再簡(jiǎn)單的例子。Web服務(wù)還有很多其他高級(jí)的內(nèi)容例如復(fù)雜類(lèi)型、數(shù)據(jù)安全等沒(méi)有涉及到,不過(guò)沒(méi)有關(guān)系,萬(wàn)事開(kāi)頭難,希望本文能夠促進(jìn)大家理解和應(yīng)用下一代的應(yīng)用模式并給還沒(méi)有動(dòng)手試驗(yàn)的開(kāi)發(fā)人員開(kāi)一個(gè)好頭。

    posted on 2006-05-10 23:13 TrampEagle 閱讀(281) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): web
    主站蜘蛛池模板: 亚洲日韩中文字幕在线播放| 日本XXX黄区免费看| 大片免费观看92在线视频线视频| 亚洲国产精品无码久久98 | 国产一区二区三区免费视频| 女人18毛片水真多免费看| a级毛片无码免费真人| 国产香蕉九九久久精品免费| 免费看国产精品3a黄的视频| 成年女人18级毛片毛片免费| 国内免费高清在线观看| 国产免费人成在线视频| 伊在人亚洲香蕉精品区麻豆| 亚洲乱亚洲乱少妇无码| 亚洲人成中文字幕在线观看| 亚洲春色在线视频| 亚洲美女aⅴ久久久91| 亚洲人成网站色在线观看| 亚洲va中文字幕| 一级做性色a爰片久久毛片免费| 久久久WWW免费人成精品| 国产精品免费无遮挡无码永久视频| 免费无遮挡无码永久视频| 国产卡二卡三卡四卡免费网址| 在线精品免费视频| 亚洲女人被黑人巨大进入| 亚洲AV无码久久寂寞少妇| 久久亚洲AV无码精品色午夜麻豆| 久久久久se色偷偷亚洲精品av| 亚洲av永久无码精品网址| 一级毛片视频免费| 人妻丰满熟妇无码区免费| 在线免费观看一级片| 国产偷窥女洗浴在线观看亚洲| 亚洲欧洲日韩国产综合在线二区| 亚洲人成777在线播放| 精品免费AV一区二区三区| 中文成人久久久久影院免费观看| 中文字幕无码播放免费| www国产亚洲精品久久久日本| 亚洲成AV人片在线播放无码|