日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WebService技术详解CXF

發(fā)布時(shí)間:2025/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebService技术详解CXF 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

WebService

WebService簡(jiǎn)介

Web Service技術(shù), 能使得運(yùn)行在不同機(jī)器上的不同應(yīng)用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數(shù)據(jù)或集成。依據(jù)Web Service規(guī)范實(shí)施的應(yīng)用之間, 無論它們所使用的語言、 平臺(tái)或內(nèi)部協(xié)議是什么, 都可以相互交換數(shù)據(jù)。

簡(jiǎn)單的說,WebService就是一種跨編程語言和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)。所謂跨編程語言和跨操作平臺(tái),就是說服務(wù)端程序采用java編寫,客戶端程序則可以采用其他編程語言編寫,反之亦然。跨操作系統(tǒng)平臺(tái)則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運(yùn)行。 遠(yuǎn)程調(diào)用,就是一臺(tái)計(jì)算機(jī)的應(yīng)用可以調(diào)用其他計(jì)算機(jī)上的應(yīng)用。例如:支付寶,支付寶并沒有銀行卡等數(shù)據(jù),它只是去調(diào)用銀行提供的接口來獲得數(shù)據(jù)。還有天氣預(yù)報(bào)等,也是氣象局把自己的系統(tǒng)服務(wù)以webservice服務(wù)的形式暴露出來,讓第三方網(wǎng)站和程序可以調(diào)用這些服務(wù)功能。

WebService原理

XML,SOAP和WSDL就是構(gòu)成WebService平臺(tái)的三大技術(shù) 。

  • WebService采用Http協(xié)議來在客戶端和服務(wù)端之間傳輸數(shù)據(jù)。WebService使用XML來封裝數(shù)據(jù),XML主要的優(yōu)點(diǎn)在于它是跨平臺(tái)的。
  • WebService通過HTTP協(xié)議發(fā)送請(qǐng)求和接收結(jié)果時(shí),發(fā)送的請(qǐng)求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議規(guī)定的。
  • WebService服務(wù)器端首先要通過一個(gè)WSDL文件來說明自己有什么服務(wù)可以對(duì)外調(diào)用。簡(jiǎn)單的說,WSDL就像是一個(gè)說明書,用于描述WebService及其方法、參數(shù)和返回值。 WSDL文件保存在Web服務(wù)器上,通過一個(gè)url地址就可以訪問到它。客戶端要調(diào)用一個(gè)WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:1.注冊(cè)到UDDI服務(wù)器,以便被人查找;2.直接告訴給客戶端調(diào)用者。

WebService交互的過程就是,WebService遵循SOAP協(xié)議通過XML封裝數(shù)據(jù),然后由Http協(xié)議來傳輸數(shù)據(jù)。

JAVA WebService規(guī)范

Java 中共有三種WebService 規(guī)范,分別是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。

(1)JAX-WS:

JAX-WS(Java API For XML-WebService)。早期的基于SOAP 的JAVA 的Web 服務(wù)規(guī)范JAX-RPC(java API For XML-Remote Procedure Call)目前已經(jīng)被JAX-WS 規(guī)范取代,JAX-WS 是JAX-RPC 的演進(jìn)版本,但JAX-WS 并不完全向后兼容JAX-RPC,二者最大的區(qū)別就是RPC/encoded 樣式的WSDL,JAX-WS 已經(jīng)不提供這種支持。JAX-RPC 的API 從JAVA EE5 開始已經(jīng)移除,如果你使用J2EE1.4,其API 位于javax.xml.rpc.*包。JAX-WS(JSR 224)規(guī)范的API 位于javax.xml.ws.*包,其中大部分都是注解,提供API 操作Web 服務(wù)(通常在客戶端使用的較多,由于客戶端可以借助SDK 生成,因此這個(gè)包中的API 我們較少會(huì)直接使用)。

(2)JAXM&SAAJ:

JAXM(JAVA API For XML Message)主要定義了包含了發(fā)送和接收消息所需的API,相當(dāng)于Web 服務(wù)的服務(wù)器端,其API 位于javax.messaging.*包,它是Java EE 的可選包,因此你需要單獨(dú)下載。

SAAJ(SOAP With Attachment API For Java,JSR 67)是與JAXM 搭配使用的API,為構(gòu)建SOAP 包和解析SOAP 包提供了重要的支持,支持附件傳輸,它在服務(wù)器端、客戶端都需要使用。這里還要提到的是SAAJ 規(guī)范,其API 位于javax.xml.soap.*包。

JAXM&SAAJ 與JAX-WS 都是基于SOAP 的Web 服務(wù),相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細(xì)節(jié),編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細(xì)節(jié),更加面向?qū)ο?#xff0c;實(shí)現(xiàn)起來你基本上不需要關(guān)心SOAP 的任何細(xì)節(jié)。那么如果你想控制SOAP 消息的更多細(xì)節(jié),可以使用JAXM&SAAJ。

(3)JAX-RS:

JAX-RS 是JAVA 針對(duì)REST(Representation State Transfer)風(fēng)格制定的一套Web 服務(wù)規(guī)范,由于推出的較晚,該規(guī)范(JSR 311,目前JAX-RS 的版本為1.0)并未隨JDK1.6 一起發(fā)行。

WebService入門案例

服務(wù)端的實(shí)現(xiàn)

我們來實(shí)現(xiàn)一個(gè)天氣系統(tǒng)的案例,客戶端發(fā)送城市名稱,服務(wù)器端回應(yīng)相應(yīng)的天氣。

1. 編寫SEI(Service Endpoint Interface),SEI在webservice中稱為portType,在java中就是普通接口 public interface WeatherInterface {public String queryWeather(String cityName); } 2. 編寫SEI實(shí)現(xiàn)類,此類作為webservice提供服務(wù)類 @WebService //@WebService表示該類是一個(gè)服務(wù)類,需要發(fā)布其中的public的方法 public class WeatherInterfaceImpl implements WeatherInterface {@Overridepublic String queryWeather(String cityName) {System.out.println("獲取城市名"+cityName);String weather="暴雨"; return weather;}} 3. 第三步:發(fā)布服務(wù),Endpoint類發(fā)布服務(wù),publish方法,兩個(gè)參數(shù):1.服務(wù)地址;2.服務(wù)實(shí)現(xiàn)類 public class WeatherServer {public static void main(String[] args) {Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());} } 4. 測(cè)試服務(wù)是否發(fā)布成功,通過閱讀wsdl,確定客戶端調(diào)用的接口、方法、參數(shù)和返回值存在,證明服務(wù)發(fā)布成功//我們?cè)跒g覽器輸入 http://127.0.0.1:12345/weather?wsdl 來獲取wsdl文件進(jìn)行閱讀//wsdl,是以XML文件形式來描述WebService的”說明書”,有了說明書,我們才可以知道如何使用或是調(diào)用這個(gè)服務(wù).//現(xiàn)在我們還不知道怎么去閱讀,后面我們會(huì)詳解,只要能獲取到,就能確定WebService服務(wù)發(fā)布成功 1234567

客戶端的實(shí)現(xiàn)

//客戶端調(diào)用服務(wù)有很多種方法,我們先用工具生成客戶端代碼,后面會(huì)詳解 //wsimport是jdk自帶的webservice客戶端工具,可以根據(jù)wsdl文檔生成客戶端調(diào)用代碼(java代碼).當(dāng)然,無論服務(wù)器端的WebService是用什么語言寫的,都可以生成調(diào)用webservice的客戶端代碼。1.創(chuàng)建一個(gè)客戶端空項(xiàng)目,cmd命令行進(jìn)入此項(xiàng)目的src目錄使用以下命令生成客戶端代碼 wsimport -s . http://127.0.0.1:12345/weather?wsdl-s是指編譯出源代碼文件,后面的.(點(diǎn))指將代碼放到當(dāng)前目錄下.最后面的http….是指獲取wsdl說明書的地址

2.編寫客戶端 public class WeatherClient {public static void main(String[] args) {//創(chuàng)建服務(wù)視圖,視圖是從wsdl文件的service標(biāo)簽的name屬性獲取WeatherInterfaceImplService weatherInterfaceImplService=new WeatherInterfaceImplService(); //獲取服務(wù)實(shí)現(xiàn)類,實(shí)現(xiàn)類從wsdl文件的portType的name屬性獲取WeatherInterfaceImpl weatherInterfaceImpl=weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class); //獲取查詢方法,從portType的operation標(biāo)簽獲取String weather=weatherInterfaceImpl.queryWeather("北京");System.out.println(weather);}}

至此,我們的客戶端就可以獲取遠(yuǎn)程服務(wù)端的數(shù)據(jù),接下來我們來詳解一下各個(gè)部分。

WSDL

WSDL(Web Services Description Language), web服務(wù)描述語言,他是webservice服務(wù)端使用說明書,說明服務(wù)端接口、方法、參數(shù)和返回值,WSDL是隨服務(wù)發(fā)布成功,自動(dòng)生成,無需編寫。

文檔結(jié)構(gòu)

Service:相關(guān)端口的集合,包括其關(guān)聯(lián)的接口、操作、消息等。

Binding:特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范

portType: 服務(wù)端點(diǎn),描述 web service可被執(zhí)行的操作方法,以及相關(guān)的消息,通過binding指向portType

message: 定義一個(gè)操作(方法)的數(shù)據(jù)參數(shù)

types: 定義 web service 使用的全部數(shù)據(jù)類型

閱讀方式

WSDL文檔應(yīng)該從下往上閱讀。

1.先看service標(biāo)簽,看相應(yīng)port的binding屬性,然后通過值查找上面的binding標(biāo)簽。

2.通過binding標(biāo)簽可以獲得具體協(xié)議等信息,然后查看binding的type屬性

3.通過binding的type屬性,查找對(duì)應(yīng)的portType,可以獲得可操作的方法和參數(shù)、返回值等。

4.通過portType下的operation標(biāo)簽的message屬性,可以向上查找message獲取具體的數(shù)據(jù)參數(shù)信息。

SOAP

SOAP即簡(jiǎn)單對(duì)象訪問協(xié)議,他是使用http發(fā)送的XML格式的數(shù)據(jù),它可以跨平臺(tái),跨防火墻,SOAP不是webservice的專有協(xié)議。

SOAP=http+xml

SOAP結(jié)構(gòu)

必需的 Envelope 元素,可把此 XML 文檔標(biāo)識(shí)為一條 SOAP 消息 可選的 Header 元素,包含頭部信息 必需的 Body 元素,包含所有的調(diào)用和響應(yīng)信息 可選的 Fault 元素,提供有關(guān)在處理此消息所發(fā)生錯(cuò)誤的信息

我們來看一下我們上面天氣程序發(fā)送的數(shù)據(jù)的格式,這需要一個(gè)工具TCP/IP Monitor ,Eclipse自帶的Debug工具之一,用于捕獲Http、TCP/IP協(xié)議包。原理是一個(gè)代理服務(wù),客戶端先把數(shù)據(jù)發(fā)送到代理服務(wù),然后代理服務(wù)再把數(shù)據(jù)發(fā)送到服務(wù)器,這樣就能獲取請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)。

第一步:打開這個(gè)工具,選擇other,然后輸入TCP/IP Monitor

第二步:設(shè)置要代理的服務(wù)器

第三步:詳細(xì)設(shè)置

第一個(gè)參數(shù)是代理服務(wù)器端口,我們?cè)O(shè)置為54321 第二個(gè)參數(shù)是被代理服務(wù)器的地址,第三個(gè)參數(shù)是被代理服務(wù)器的端口 第四個(gè)參數(shù)要選擇為TCP/IP

第四步:檢測(cè)是否設(shè)置成功,我們?cè)L問代理服務(wù)器來獲得wsdl文件

第五步:設(shè)置成功后,我們需要改一下客戶端要連接的服務(wù)器,改成代理服務(wù)器的端口

WeatherInterfaceImplService里的所有原來地址的端口改為54321

第六步:我們啟動(dòng)我們的客戶端,獲取請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)

請(qǐng)求 //先發(fā)送get請(qǐng)求,去獲得wsdl文件,然后獲得方法、參數(shù)等信息 GET /weather?wsdl HTTP/1.1 User-Agent: Java/1.8.0_111 Host: 127.0.0.1:54321 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive//發(fā)送數(shù)據(jù) POST /weather HTTP/1.1 Accept: text/xml, multipart/related Content-Type: text/xml; charset=utf-8 SOAPAction: "http://ws.cad.com/WeatherInterfaceImpl/queryWeatherRequest" User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e Host: 127.0.0.1:54321 Connection: keep-alive Content-Length: 203<?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:queryWeather xmlns:ns2="http://ws.cad.com/"> <arg0>北京</arg0> </ns2:queryWeather> </S:Body> </S:Envelope> 響應(yīng)數(shù)據(jù) HTTP/1.1 200 OK Date: Tue, 25 Jul 2017 05:05:58 GMT Transfer-encoding: chunked Content-type: text/xml;charset=utf-8//響應(yīng)wsdl內(nèi)容,來獲得方法、參數(shù)等信息 899 <?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><!-- Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.cad.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.cad.com/" name="WeatherInterfaceImplService"> <types> <xsd:schema> <xsd:import namespace="http://ws.cad.com/" schemaLocation="http://127.0.0.1:54321/weather?xsd=1"></xsd:import> </xsd:schema> </types> <message name="queryWeather"> <part name="parameters" element="tns:queryWeather"></part> </message> <message name="queryWeatherResponse"> <part name="parameters" element="tns:queryWeatherResponse"></part> </message> <portType name="WeatherInterfaceImpl"> <operation name="queryWeather"> <input wsam:Action="http://ws.cad.com/WeatherInterfaceImpl/queryWeatherRequest" message="tns:queryWeather"></input> <output wsam:Action="http://ws.cad.com/WeatherInterfaceImpl/queryWeatherResponse" message="tns:queryWeatherResponse"></output> </operation> </portType> <binding name="WeatherInterfaceImplPortBinding" type="tns:WeatherInterfaceImpl"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding> <operation name="queryWeather"> <soap:operation soapAction=""></soap:operation> <input> <soap:body use="literal"></soap:body> </input> <output> <soap:body use="literal"></soap:body> </output> </operation> </binding> <service name="WeatherInterfaceImplService"> <port name="WeatherInterfaceImplPort" binding="tns:WeatherInterfaceImplPortBinding"> <soap:address location="http://127.0.0.1:54321/weather"></soap:address> </port> </service> </definitions> 0//響應(yīng)數(shù)據(jù) HTTP/1.1 200 OK Date: Tue, 25 Jul 2017 05:05:59 GMT Transfer-encoding: chunked Content-type: text/xml; charset=utf-8df <?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body><ns2:queryWeatherResponse xmlns:ns2="http://ws.cad.com/"><return>暴雨</return> </ns2:queryWeatherResponse> </S:Body> </S:Envelope> 0

UDDI

UDDI 是一種目錄服務(wù),企業(yè)可以使用它對(duì) Web services 進(jìn)行注冊(cè)和搜索。
如果我們要使用一種服務(wù),但是不知道地址(wsdl等),我們就可以在UDDI中查找。
大部分情況下,我們都是知道服務(wù)地址的。

Webservice的客戶端調(diào)用方式

一:生成客戶端調(diào)用方式

wsimport是jdk自帶的webservice客戶端工具,可以根據(jù)wsdl文檔生成客戶端調(diào)用代碼(java代碼). wsimport.exe位于JAVA_HOME\bin目錄下 常用參數(shù)為:-d<目錄> - 將生成.class文件。默認(rèn)參數(shù)。-s<目錄> - 將生成.java文件。-p<生成的新包名> -將生成的類,放于指定的包下

調(diào)用公網(wǎng)的手機(jī)歸屬地查詢服務(wù)

公網(wǎng)服務(wù)地址 (里面提供了很多免費(fèi)調(diào)用的服務(wù))
http://www.webxml.com.cn/zh_cn/index.aspx

第一步:wsimport生成客戶端代碼 wsimport -p cn.cad.mobile -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl會(huì)出現(xiàn)一些警告,是因?yàn)榉?wù)端提供的一些方法是SOAP1.2標(biāo)準(zhǔn)的,這個(gè)工具沒有實(shí)現(xiàn)SOAP1.2標(biāo)準(zhǔn)的生成方式。

第二步:查看wsdl文件,獲取我們需要的信息

第三步:根據(jù)獲取到的服務(wù)名等信息來創(chuàng)建我們的客戶端 public class MobileClient {public static void main(String[] args) {//創(chuàng)建服務(wù)視圖MobileCodeWS mobileCodeWS=new MobileCodeWS();//獲取服務(wù)實(shí)現(xiàn)類MobileCodeWSSoap mobileCodeWSSoap= mobileCodeWS.getPort(MobileCodeWSSoap.class);//調(diào)用查詢方法String message=mobileCodeWSSoap.getMobileCodeInfo("xxxxxxxx", null);System.out.println(message);} }第四步:獲取到信息 1

還有天氣等服務(wù),自己可以去實(shí)現(xiàn)一下。

該種方式使用簡(jiǎn)單,但一些關(guān)鍵的元素在代碼生成時(shí)寫死在生成代碼中,不方便維護(hù),所以僅用于測(cè)試。

二:service編程調(diào)用方式

public class MobileClient2 {public static void main(String[] args) throws IOException {//創(chuàng)建WSDL文件的URLURL wsdlDocumentLocation=new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"); //創(chuàng)建服務(wù)名稱//1.namespaceURI - 命名空間地址//2.localPart - 服務(wù)視圖名QName serviceName=new QName("http://WebXml.com.cn/","MobileCodeWS");Service service=Service.create(wsdlDocumentLocation, serviceName);//獲取服務(wù)實(shí)現(xiàn)類MobileCodeWSSoap mobileCodeWSSoap= service.getPort(MobileCodeWSSoap.class);//調(diào)用方法String message=mobileCodeWSSoap.getMobileCodeInfo("XXXXXXX", null);System.out.println(message);}}

該種方式可以自定義命名空間,服務(wù)視圖名等元素,方便以后維護(hù),是一種標(biāo)準(zhǔn)的開發(fā)方式 。

三:HttpURLConnection調(diào)用方式

這種方式是由自己編寫客戶端,不再由工具生成,比較麻煩。

開發(fā)步驟: 第一步:創(chuàng)建服務(wù)地址第二步:打開一個(gè)通向服務(wù)地址的連接第三步:設(shè)置參數(shù)第四步:組織SOAP數(shù)據(jù),發(fā)送請(qǐng)求第五步:接收服務(wù)端響應(yīng) public class MobileClient2 {public static void main(String[] args) throws IOException {//第一步:創(chuàng)建服務(wù)地址,不是WSDL地址URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");//第二步:打開一個(gè)通向服務(wù)地址的連接HttpURLConnection connection = (HttpURLConnection) url.openConnection();//第三步:設(shè)置參數(shù)//3.1發(fā)送方式設(shè)置:POST必須大寫connection.setRequestMethod("POST");//3.2設(shè)置數(shù)據(jù)格式:content-typeconnection.setRequestProperty("content-type", "text/xml;charset=UTF-8");//3.3設(shè)置輸入輸出,因?yàn)槟J(rèn)新創(chuàng)建的connection沒有讀寫權(quán)限,connection.setDoInput(true);connection.setDoOutput(true);//第四步:組織SOAP數(shù)據(jù),發(fā)送請(qǐng)求String soapXML = getXML("XXXXXXX");OutputStream os = connection.getOutputStream();os.write(soapXML.getBytes());//第五步:接收服務(wù)端響應(yīng),打印int responseCode = connection.getResponseCode();if(200 == responseCode){//表示服務(wù)端響應(yīng)成功InputStream is = connection.getInputStream();//將字節(jié)流轉(zhuǎn)換為字符流InputStreamReader isr = new InputStreamReader(is,"utf-8");//使用緩存區(qū)BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String temp = null;while(null != (temp = br.readLine())){sb.append(temp);}System.out.println(sb.toString());is.close();isr.close();br.close();}os.close();}//組織數(shù)據(jù),將數(shù)據(jù)拼接一下public static String getXML(String phoneNum){String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+"<soap:Body>"+"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"+"<mobileCode>"+phoneNum+"</mobileCode>"+"<userID></userID>"+"</getMobileCodeInfo>"+"</soap:Body>"+"</soap:Envelope>";return soapXML;} }

使用注解修改WSDL內(nèi)容

作用:
通過注解,可以更加形像的描述Web服務(wù)。對(duì)自動(dòng)生成的wsdl文檔進(jìn)行修改,為使用者提供一個(gè)更加清晰的wsdl文檔

WebService的注解都位于javax.jws包下: @WebService-定義服務(wù),在類上邊targetNamespace:指定命名空間name:portType的名稱portName:port的名稱serviceName:服務(wù)名稱endpointInterface:SEI接口地址,如果一個(gè)服務(wù)類實(shí)現(xiàn)了多個(gè)接口,只需要發(fā)布一個(gè)接口的方法,可通過此注解指定要發(fā)布服務(wù)的接口。 @WebMethod-定義方法,在公開方法上邊operationName:方法名exclude:設(shè)置為true表示此方法不是webservice方法,反之則表示webservice方法,默認(rèn)是false @WebResult-定義返回值,在方法返回值前邊name:返回結(jié)果值的名稱 @WebParam-定義參數(shù),在方法參數(shù)前邊name:指定參數(shù)的名稱 //以我們前面做的天氣案例為例子@WebService(targetNamespace="http://service.cad.com",portName="WeatherSOAPPort",serviceName="WeatherWSS",name="WeatherSOAP" ) public class WeatherInterfaceImpl implements WeatherInterface {@WebMethod(operationName="getWeather",exclude=false)public @WebResult(name="result")String queryWeather(@WebParam(name="cityName")String cityName) {System.out.println("獲取城市名"+cityName);String weather="暴雨"; return weather;}} 然后重新發(fā)布服務(wù),我們?cè)僭L問wsdl文件,就可以看到我們改變的內(nèi)容

CXF

CXF簡(jiǎn)介

CXF是一個(gè)開源的WebService框架。Apache CXF = Celtix + XFire,開始叫 Apache CeltiXfire,后來更名為 Apache CXF 了,以下簡(jiǎn)稱為 CXF。CXF 繼承了 Celtix 和 XFire 兩大開源項(xiàng)目的精華,提供了對(duì) JAX-WS 全面的支持,并且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支持,并且可以根據(jù)實(shí)際項(xiàng)目的需要,采用代碼優(yōu)先(Code First)或者 WSDL 優(yōu)先(WSDL First)來輕松地實(shí)現(xiàn) Web Services 的發(fā)布和使用。

支持多種標(biāo)準(zhǔn)

  • 支持 JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;
  • 支持 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;
  • 支持 WSDL 1.1 、2.0;
  • 支持 MTOM;

它支持多種協(xié)議,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。CORBA(Common Object Request Broker Architecture公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu),早期語言使用的WS。C,c++,C#)

Cxf是基于SOA總線結(jié)構(gòu),依靠spring完成模塊的集成,實(shí)現(xiàn)SOA方式。

靈活的部署:可以運(yùn)行有Tomcat,Jboss,Jetty(內(nèi)置),weblogic上面。

CXF入門案例

我們還以昨天的天氣服務(wù)為案例來看一下CXF的開發(fā)過程。

服務(wù)端的實(shí)現(xiàn)

1.創(chuàng)建一個(gè)空的java項(xiàng)目,創(chuàng)建一個(gè)lib目錄,將所有jar包放入lib目錄然后為工程引入jar包,選擇build path,然后Add JARS,只用選擇cxf-manifest.jar即可。

2.創(chuàng)建一個(gè)SEI接口,需要在接口上添加@WebService注解@WebService public interface WeatherInterface {public String queryWeather(String cityName); } 3.創(chuàng)建SEI接口實(shí)現(xiàn)類 public class WeatherInterfaceImpl implements WeatherInterface {public String queryWeather(String cityName) {if("河南".equals(cityName)) {return "熱爆炸";}else {return "冰雹";}} } 4.發(fā)布服務(wù) public class WeatherServer {public static void main(String[] args) {//創(chuàng)建服務(wù)工廠BeanJaxWsServerFactoryBean jaxWsServerFactoryBean=new JaxWsServerFactoryBean();//設(shè)置服務(wù)接口jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);//設(shè)置服務(wù)實(shí)現(xiàn)類jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());//設(shè)置服務(wù)地址jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather");//創(chuàng)建服務(wù)jaxWsServerFactoryBean.create();}} 5.訪問服務(wù)的wsdl文件地址,看服務(wù)是否發(fā)布成功http://127.0.0.1:12345/weather?wsdl

發(fā)布SOAP1.2的服務(wù)端

SOAP分為1.1版本和1.2版本。JDK1.6并不支持1.2,我們可以通過CXF來發(fā)布SOAP1.2的服務(wù)端。
只需要在接口上添加注解 @BindingType(SOAPBinding.SOAP12HTTP_BINDING)。然后重新發(fā)布服務(wù)即可

import javax.jws.WebService; import javax.xml.ws.BindingType; import javax.xml.ws.soap.SOAPBinding;@WebService @BindingType(SOAPBinding.SOAP12HTTP_BINDING) public interface WeatherInterface {public String queryWeather(String cityName); }

客戶端的實(shí)現(xiàn)

Wsdl2java命令是CXF提供的生成客戶端的工具,他和wsimport類似,可以根據(jù)WSDL生成客戶端代碼 Wsdl2java常用參數(shù): -d,指定輸出目錄 -p,指定包名,如果不指定該參數(shù),默認(rèn)包名是WSDL的命名空間的倒序 Wsdl2java支持SOAP1.1和SOAP1.2 1.我們先創(chuàng)建一個(gè)客戶端項(xiàng)目,然后引入jar包,和上面一樣,使用Add JARS選擇cxf-manifest.jar即可然后使用工具生成客戶端wsdl2java -p com.cad.cxf -d . http://127.0.0.1:12345/weather?wsdl

2.創(chuàng)建客戶端 public class WeatherClient {public static void main(String[] args) {JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean();//設(shè)置服務(wù)接口jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class); //設(shè)置服務(wù)地址jaxWsProxyFactoryBean.setAddress("http://127.0.0.1:12345/weather");//獲取服務(wù)接口實(shí)例WeatherInterface weatherInterface=(WeatherInterface) jaxWsProxyFactoryBean.create();//調(diào)用方法String message=weatherInterface.queryWeather("河南");System.out.println(message);}}

CXF+Spring整合發(fā)布SOAP模式的服務(wù)

服務(wù)端的實(shí)現(xiàn)

1.創(chuàng)建WEB項(xiàng)目,導(dǎo)入jar包 1 2.創(chuàng)建SEI接口 @WebService @BindingType(SOAPBinding.SOAP12HTTP_BINDING) public interface WeatherInterface {public String queryWeather(String cityName); } 3.創(chuàng)建SEI實(shí)現(xiàn)類 public class WeatherInterfaceImpl implements WeatherInterface {public String queryWeather(String cityName) {if("河南".equals(cityName)) {return "熱爆炸";}else {return "冰雹";}} } 4.配置spring配置文件,applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsdhttp://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"><!--jaxws:server發(fā)布SOAP協(xié)議的服務(wù) ,對(duì)JaxWsServerFactoryBean類封裝--> <!--serviceClass屬性是服務(wù)接口,address代表地址,因?yàn)槲覀兪莣eb服務(wù),不需要輸入ip。serviceBean是服務(wù)實(shí)現(xiàn)類--> <jaxws:server serviceClass="com.cad.cxf.WeatherInterface" address="/weather"><jaxws:serviceBean><ref bean="weatherInterfaceImpl"/></jaxws:serviceBean> </jaxws:server> <bean name="weatherInterfaceImpl" class="com.cad.cxf.WeatherInterfaceImpl"></bean> </beans> 5.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>CXFSpringDemo</display-name>//配置Tomcat啟動(dòng)時(shí)加載Spring配置文件 <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>//配置CXF提供的Servlet<servlet><servlet-name>CXF</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class></servlet><servlet-mapping><servlet-name>CXF</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list> </web-app> 6.部署到Tomcat下,發(fā)布服務(wù),并訪問 http://localhost:8080/CXFSpringDemo/ws/weather?wsdl

客戶端的實(shí)現(xiàn)

1.創(chuàng)建項(xiàng)目,導(dǎo)入jar包,生成客戶端 wsdl2java -p com.cad.cxf -d . http://localhost:8080/CXFSpringDemo/ws/weather?wsdl

2.配置Spring文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsdhttp://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"><!-- <jaxws:client實(shí)現(xiàn)客戶端 ,對(duì)JaxWsProxyFactoryBean類封裝--> <!-- address是服務(wù)地址,servicelass是服務(wù)接口,返回服務(wù)實(shí)現(xiàn)類--> <jaxws:client id="weatherClient" address="http://localhost:8080/CXFSpringDemo/ws/weather" serviceClass="com.cad.cxf.WeatherInterface"/> </beans> 3.通過Spring容器獲取服務(wù)實(shí)現(xiàn)類,調(diào)用方法 public class WeatherClient {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");WeatherInterface weatherInterface = (WeatherInterface) context.getBean("weatherClient");String message=weatherInterface.queryWeather("河南");System.out.println(message);}}

CXF發(fā)布REST模式的服務(wù)

REST即表述性狀態(tài)傳遞(英文:Representational State Transfer,簡(jiǎn)稱REST),是一種軟件架構(gòu)風(fēng)格。

因?yàn)镽EST模式的Web服務(wù)與復(fù)雜的SOAP和XML-RPC對(duì)比來講明顯的更加簡(jiǎn)潔,越來越多的web服務(wù)開始采用REST風(fēng)格設(shè)計(jì)和實(shí)現(xiàn)rest服務(wù)采用HTTP 做傳輸協(xié)議,REST 對(duì)于HTTP 的利用實(shí)現(xiàn)精確的資源定位。

例如: 非rest方式:http://ip:port/queryUser.action?userType=student&id=001 Rest方式:http://ip:port/user/student/query/001 1.創(chuàng)建一個(gè)項(xiàng)目,導(dǎo)入CXF jar包 1 2.創(chuàng)建一個(gè)實(shí)體類 Student @XmlRootElement(name="student")可以實(shí)現(xiàn)XML和對(duì)象之間的轉(zhuǎn)換,name屬性指定根元素@XmlRootElement(name="student") public class Student {private int id;private String name;private Date birthday;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}} 3.創(chuàng)建SEI接口 @WebService //@Path("/student")就是指定訪問該接口的路徑 @Path("/Student") public interface StudentInterface {//指定請(qǐng)求方式,如果服務(wù)端發(fā)布的時(shí)候指定的是GET(POST),那么客戶端訪問時(shí)必須使用GET(POST@GET//指定服務(wù)數(shù)據(jù)類型,可以是XML,json等數(shù)據(jù)類型@Produces(MediaType.APPLICATION_XML)//@Path("/query/{id}")指定該方法的路徑,“{id}”指參數(shù),多個(gè)參數(shù),以“/”隔開,放到“{}”中@Path("/query/{id}")public Student queryStudent(@PathParam("id")int id);@GET@Produces(MediaType.APPLICATION_XML)@Path("/queryList/{name}")public List<Student> queryList(@PathParam("name")String name); } 4.創(chuàng)建SEI實(shí)現(xiàn)類 public class StudentInterfaceImpl implements StudentInterface {@Overridepublic Student queryStudent(int id) {Student s=new Student();s.setId(666);s.setName("張三");s.setBirthday(new Date());return s;}@Overridepublic List<Student> queryList(String name) {Student s=new Student();s.setId(666);s.setName("張三");s.setBirthday(new Date());Student s2=new Student();s2.setId(888);s2.setName("李四");s2.setBirthday(new Date());List<Student> l=new ArrayList<Student>();l.add(s);l.add(s2);return l;}} 5.發(fā)布服務(wù) public class StudentServer {public static void main(String[] args) {JAXRSServerFactoryBean jaxrsServerFactoryBean=new JAXRSServerFactoryBean();//設(shè)置服務(wù)實(shí)現(xiàn)類jaxrsServerFactoryBean.setServiceBean(new StudentInterfaceImpl());//設(shè)置資源類,如果有多個(gè)資源類,可以以“,”隔開,例如Student.class StudentInterface.class都是資源類,但是StudentInterfaceImpl里面已經(jīng)包含了Student.class StudentInterface.class,所以不用重復(fù)指定jaxrsServerFactoryBean.setResourceClasses(StudentInterfaceImpl.class); //設(shè)置服務(wù)地址jaxrsServerFactoryBean.setAddress("http://127.0.0.1:12345/Class");//發(fā)布服務(wù)jaxrsServerFactoryBean.create();}} 6.測(cè)試服務(wù) 訪問query方法 http://127.0.0.1:12345/Class/Student/query/001

訪問queryList方法 http://127.0.0.1:12345/Class/Student/queryList/xxx

如果服務(wù)端發(fā)布時(shí)指定請(qǐng)求方式是GET(POST),客戶端必須使用GET(POST)訪問服務(wù)端,否則會(huì)報(bào)異常。
如果在同一方法上同時(shí)指定XML和JSON媒體類型,在GET請(qǐng)求下,默認(rèn)返回XML,在POST請(qǐng)求下,默認(rèn)返回JSON

CXF+Spring整合發(fā)布REST模式的服務(wù)

1.創(chuàng)建web項(xiàng)目,引入jar包1 2.創(chuàng)建一個(gè)實(shí)體類 Student @XmlRootElement(name="student")可以實(shí)現(xiàn)XML和對(duì)象之間的轉(zhuǎn)換,name屬性指定根元素@XmlRootElement(name="student") public class Student {private int id;private String name;private Date birthday;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}} 3.創(chuàng)建SEI接口 @WebService //@Path("/student")就是指定訪問該接口的路徑 @Path("/Student") public interface StudentInterface {//指定請(qǐng)求方式,如果服務(wù)端發(fā)布的時(shí)候指定的是GET(POST),那么客戶端訪問時(shí)必須使用GET(POST@GET//指定服務(wù)數(shù)據(jù)類型,可以是XML,json等數(shù)據(jù)類型@Produces(MediaType.APPLICATION_XML)//@Path("/query/{id}")指定該方法的路徑,“{id}”指參數(shù),多個(gè)參數(shù),以“/”隔開,放到“{}”中@Path("/query/{id}")public Student queryStudent(@PathParam("id")int id);@GET@Produces(MediaType.APPLICATION_XML)@Path("/queryList/{name}")public List<Student> queryList(@PathParam("name")String name); } 4.創(chuàng)建SEI實(shí)現(xiàn)類 public class StudentInterfaceImpl implements StudentInterface {@Overridepublic Student queryStudent(int id) {Student s=new Student();s.setId(666);s.setName("張三");s.setBirthday(new Date());return s;}@Overridepublic List<Student> queryList(String name) {Student s=new Student();s.setId(666);s.setName("張三");s.setBirthday(new Date());Student s2=new Student();s2.setId(888);s2.setName("李四");s2.setBirthday(new Date());List<Student> l=new ArrayList<Student>();l.add(s);l.add(s2);return l;}} 第五步:配置Spring配置文件,applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsdhttp://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"><!-- <jaxrs:server發(fā)布REST的服務(wù) ,對(duì)JAXRSServerFactoryBean類封裝--> <jaxrs:server address="/user"><jaxrs:serviceBeans><ref bean="studentInterface"/></jaxrs:serviceBeans></jaxrs:server><!-- 配置服務(wù)實(shí)現(xiàn)類 --><bean name="studentInterface" class="com.cad.rest.StudentInterfaceImpl"/> </beans> 6.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>ws_2_cxf_spring_server</display-name><!-- 設(shè)置spring的環(huán)境 --><context-param><!--contextConfigLocation是不能修改的 --><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置CXF的Servlet --><servlet><servlet-name>CXF</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class></servlet><servlet-mapping><servlet-name>CXF</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list> </web-app> 7.部署到Tomcat中,發(fā)布服務(wù),測(cè)試一下 http://127.0.0.1:8080/CXFRestDemo/ws/user/Student/query/100

綜合案例:手機(jī)歸屬地查詢

1.創(chuàng)建web項(xiàng)目,導(dǎo)入 CXF jar包 1 2.生成公網(wǎng)提供的手機(jī)歸屬地查詢的客戶端 wsdl2java -p com.cad.mobile -d . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

3.編寫我們自己的SEI接口 @WebService public interface MobileInterface {public String queryMobile(String phoneNum); } 4.編寫我們的SEI實(shí)現(xiàn)類 ,里面調(diào)用公網(wǎng)客戶端的查詢方法,我們?cè)?span id="ozvdkddzhkzd" class="token class-name">Spring配置客戶端,然后注入即可 public class MobileInterfaceImpl implements MobileInterface {//公網(wǎng)客戶端,提供set方法 以便注入private MobileCodeWSSoap mobileClient;//調(diào)用公網(wǎng)的查詢方法public String queryMobile(String phoneNum) {return mobileClient.getMobileCodeInfo(phoneNum, "");}public MobileCodeWSSoap getMobileClient() {return mobileClient;}public void setMobileClient(MobileCodeWSSoap mobileClient) {this.mobileClient = mobileClient;}} 5.配置Spring 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsdhttp://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"><!-- 配置公網(wǎng)客戶端 --><jaxws:client id="mobileClient" address="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx" serviceClass="com.cad.mobile.MobileCodeWSSoap"/> <!-- <jaxws:server發(fā)布我們的服務(wù)--> <jaxws:server address="/mobile" serviceClass="com.cad.server.MobileInterface"><jaxws:serviceBean><ref bean="mobileServer"/></jaxws:serviceBean></jaxws:server> <!-- 配置我們的服務(wù)實(shí)現(xiàn)類 --><bean name="mobileServer" class="com.cad.server.MobileInterfaceImpl"><property name="mobileClient" ref="mobileClient"/></bean> </beans> 6.創(chuàng)建查詢頁面 <body><form action="MobileServlet" method="post">手機(jī)號(hào)歸屬地查詢:<input type="text" name="phoneNum"><input type="submit" value="查詢"><br>查詢結(jié)果:${result}</form></body> 7.創(chuàng)建處理的Servlet@WebServlet("/MobileServlet") public class MobileServlet extends HttpServlet {private MobileInterface mobileServer;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取頁面的電話號(hào)String phoneNum = request.getParameter("phoneNum");if(null != phoneNum && !"".equals(phoneNum)){//獲取Spring容器ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());//獲取我們的服務(wù)實(shí)現(xiàn)類mobileServer = (MobileInterface) context.getBean("mobileServer");//調(diào)用查詢方法String result = mobileServer.queryMobile(phoneNum);request.setAttribute("result", result);}//請(qǐng)求轉(zhuǎn)發(fā) request.getRequestDispatcher("/index.jsp").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}} 8.配置web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>MobileDemo</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><context-param><!--contextConfigLocation是不能修改的 --><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置CXF的Servlet --><servlet><servlet-name>CXF</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class></servlet><servlet-mapping><servlet-name>CXF</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping></web-app> 9.部署Tomcat,訪問測(cè)試

總結(jié)

以上是生活随笔為你收集整理的WebService技术详解CXF的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久精品99国产精品亚洲最刺激 | 日韩精品综合在线 | 右手影院亚洲欧美 | 91视频免费国产 | 国产精品一区二区在线播放 | 日韩在线观看三区 | 日本99久久| 日本性xxx| 国产小视频免费观看 | 一区二区中文字幕在线观看 | 欧洲av在线 | 日韩美在线观看 | 97视频人人澡人人爽 | 天天躁天天躁天天躁婷 | 久久久国产精品人人片99精片欧美一 | 亚洲国产一二三 | 国产自在线观看 | 十八岁免进欧美 | 99精品一区 | 欧美日韩中文另类 | 亚洲视频一级 | 国产精品中文字幕av | 激情影音 | 国产分类视频 | 日韩午夜高清 | 九九九九九九精品任你躁 | 欧美在线观看视频免费 | 黄色网址国产 | 最新的av网站 | 国产精品久久久久久久久久久久午夜片 | 五月婷婷av在线 | 欧美日韩中文在线观看 | 婷婷成人亚洲综合国产xv88 | 国产成人精品不卡 | 人人干人人干人人干 | 成人免费一区二区三区在线观看 | 最新av电影网址 | 欧美久久久久久久久久久久久 | 精品一区精品二区高清 | 黄色成人91 | 丁香婷五月 | 国产字幕在线观看 | 亚洲视频网站在线观看 | 国产伦精品一区二区三区在线 | 日韩欧美在线影院 | 91亚洲精品乱码久久久久久蜜桃 | av3级在线| 香蕉日日 | 91成人破解版 | 久久国产美女 | 欧美日韩在线播放一区 | 一区精品在线 | 婷婷伊人综合亚洲综合网 | 免费av网址大全 | 精品久久久亚洲 | 亚洲乱亚洲乱亚洲 | 91成人精品一区在线播放69 | 丝袜美腿亚洲综合 | 国产亚洲精品久久久久久网站 | 2020天天干夜夜爽 | 免费看黄色小说的网站 | 中文永久免费观看 | 97视频免费看 | 婷婷久操 | 狠狠黄 | 亚洲一级片免费观看 | 精品国产一二区 | 手机av在线网站 | 99热在线国产精品 | 麻豆视频大全 | 色com| 久久久噜噜噜久久久 | 国产精久久久久久妇女av | 国产高清视频免费 | av.com在线 | 日韩欧美成人网 | 国产在线精品一区 | 91成人免费观看视频 | 日韩成人一级大片 | 97视频在线观看免费 | 久久国产欧美日韩精品 | 亚洲综合色视频 | 久久精品电影 | 日本黄色免费在线观看 | 国产精品久久久久aaaa九色 | 精品国产乱码久久 | 成人av在线影视 | 日韩欧美高清视频在线观看 | 日本三级全黄少妇三2023 | av黄网站| 国产三级久久久 | 黄色三级免费网址 | 九九九九九精品 | 午夜视频欧美 | 狠狠色狠狠色合久久伊人 | 久久色网站 | 国产精品日韩在线播放 | 91伊人久久大香线蕉蜜芽人口 | 久久久久久中文字幕 | 丁香六月中文字幕 | 波多野结衣在线播放视频 | 国产一级精品绿帽视频 | 一区二区三区电影在线播 | 欧美日韩免费观看一区=区三区 | 亚洲精品国产片 | 久久伊99综合婷婷久久伊 | 999视频在线播放 | 国产香蕉97碰碰久久人人 | 成人在线播放免费观看 | 五月婷av| 中文字幕韩在线第一页 | 久久久免费少妇 | 一区二区 精品 | 日韩在线免费电影 | 欧美午夜精品久久久久久浪潮 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 久草在线视频中文 | 麻豆视频成人 | 美女搞黄国产视频网站 | 久草在线视频资源 | av在线h | 日韩av电影中文字幕 | 97超碰总站 | 精品久久久久一区二区国产 | 日韩在线免费高清视频 | 国产亚洲欧美一区 | 97人人模人人爽人人少妇 | 久久爱www. | 亚洲成熟女人毛片在线 | 久久精品精品电影网 | 欧美 日韩 成人 | 亚洲国产精品人久久电影 | 日本中文字幕视频 | 久草视频手机在线 | 九色精品免费永久在线 | 黄色大全在线观看 | 久久人视频 | 国产一线在线 | 欧美日韩xx | 2020天天干天天操 | 日韩一级成人av | 久久久久久免费视频 | 国产粉嫩在线观看 | 国产在线观看你懂得 | 园产精品久久久久久久7电影 | 91九色老 | 91亚洲精品久久久中文字幕 | a色视频 | 国产精品免费不卡 | 国产精品人人做人人爽人人添 | 久久人人做 | 日本不卡视频 | 成年人在线免费看视频 | 怡红院av| 亚洲精品成人免费 | 网站免费黄色 | 久久兔费看a级 | 在线观看黄色免费视频 | 国产视频久久久 | 97香蕉久久国产在线观看 | 免费在线色| 亚洲精品美女久久久久 | 久久综合婷婷国产二区高清 | 日韩国产精品毛片 | 永久免费视频国产 | 成人在线视频一区 | 一区二区三区电影 | 亚洲精品国产综合99久久夜夜嗨 | 国产精品久久久久久久久久妇女 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 午夜成人影视 | 午夜精品一区二区三区在线观看 | 久久人人插 | 亚洲午夜久久久久 | 九九欧美 | 欧美一区免费在线观看 | 国产一区欧美日韩 | 久草视频中文在线 | 黄色三级在线观看 | 午夜在线观看影院 | 国产黄色大片免费看 | 在线观看岛国 | 天堂久久电影网 | 91亚洲精品久久久蜜桃网站 | 成人在线视频你懂的 | 天天操天天射天天添 | 国产视频欧美视频 | 中文字幕免费高清在线观看 | 亚洲 欧美日韩 国产 中文 | 伊人久久电影网 | 在线观看日韩一区 | 国产一级特黄毛片在线毛片 | 美女视频免费精品 | 久久女教师 | 色婷婷福利 | 麻豆国产视频下载 | 天堂网一区二区 | 久久一区二区免费视频 | 日韩久久精品一区二区 | 欧美成人基地 | 久久精品爱爱视频 | 操天天操| 久久精品视频中文字幕 | 三级视频日韩 | 青青河边草免费观看完整版高清 | 久久国产电影院 | 成人午夜性影院 | 国产精品亚洲成人 | a视频在线观看 | 国产亚洲精品成人av久久影院 | 日韩欧美视频在线播放 | 一区二区三区在线播放 | 国产在线理论片 | 欧美色图30p | 国产成人91 | 天堂久久电影网 | 精品国产伦一区二区三区 | www.亚洲黄色 | 亚洲国产精品推荐 | av免费看av | 黄色午夜网站 | 久久草草热国产精品直播 | 久久精品牌麻豆国产大山 | 日韩在线观看视频网站 | 日韩中文字幕在线不卡 | 98超碰在线 | 天天爽夜夜爽精品视频婷婷 | 亚洲精品无 | aaa亚洲精品一二三区 | 欧美日韩国产精品久久 | 精品视频| 国产自在线观看 | 欧美日韩综合在线 | 在线观看日韩中文字幕 | 国产真实精品久久二三区 | 91视频久久久 | 久久精品99久久 | 97涩涩视频 | 丁香激情网 | 中文字幕色网站 | 黄色大片免费播放 | 正在播放国产一区二区 | 国产免费亚洲 | 精品国产三级 | 国产精品久久久久av福利动漫 | 91网免费观看 | 国产色久| 久免费视频 | 91久久黄色| 亚洲欧美成人综合 | 天天插天天操天天干 | 97麻豆视频| 亚洲精品国产麻豆 | 91福利影院在线观看 | 日韩视频免费播放 | 天天曰天天曰 | 免费在线观看亚洲视频 | 亚洲国产精品人久久电影 | 日本特黄一级片 | 看v片 | 十八岁以下禁止观看的1000个网站 | 天天干天天操av | 成人av免费在线播放 | 久草精品电影 | 日韩在线网址 | 美女视频国产 | 久久夜夜操 | 久久久国产精品电影 | 天天做夜夜做 | 四虎最新入口 | www.久久久.cum | 日本中文字幕网站 | 一区二区三区在线视频111 | 91精品办公室少妇高潮对白 | 热久久精品在线 | 一级黄色片在线 | 久久成人综合视频 | 99精品免费网 | 久久国产99| 欧美日韩免费在线观看视频 | 人人舔人人 | 伊人色综合久久天天网 | 成 人 黄 色 免费播放 | 一区二区伦理 | 成人综合婷婷国产精品久久免费 | 色婷婷狠狠五月综合天色拍 | 国产小视频福利在线 | 99热精品久久 | 日韩欧美在线观看一区二区 | 久久日本视频 | 日韩在线观看影院 | 久久8精品 | av大全在线观看 | 久久一二区 | 色综合久久久久综合 | 91高清不卡 | 在线观看中文字幕av | 国产精品黑丝在线观看 | 欧美国产精品久久久久久免费 | 欧美a视频在线观看 | 婷婷午夜激情 | 欧美性生活一级片 | 亚洲女同ⅹxx女同tv | 国产福利91精品 | 91成人在线视频 | 欧美日产一区 | 91麻豆精品一区二区三区 | 丁香花在线视频观看免费 | 免费a级黄色毛片 | 91黄色在线视频 | 国产拍在线 | 国产区免费 | 91人人在线 | 国产亚洲成人网 | 99精品国产一区二区三区不卡 | 亚洲免费黄色 | 91成人亚洲| 99色免费视频 | 欧美一级欧美一级 | 伊人婷婷综合 | 免费在线电影网址大全 | 国产一区二区精品在线 | 国产精品日韩久久久久 | 成人app在线播放 | 国产一区网 | 免费视频成人 | 日韩资源视频 | 88av视频| 精品一区 在线 | 国产麻豆精品一区 | 色综合五月 | 中文字幕在线一区二区三区 | 91在线日韩 | 久久精品aaa | 国产免费一区二区三区最新 | 日本大尺码专区mv | 亚洲电影图片小说 | 999国产精品视频 | 精品久久久久久久久久久久久久久久久久 | 91在线资源 | 五月天色站| 国产裸体永久免费视频网站 | 天天插天天狠天天透 | 在线99视频| 麻豆免费视频观看 | 国产精品毛片久久久久久久久久99999999 | 波多野结衣一区二区 | 国产精品久久久久久五月尺 | 精品国产乱子伦一区二区 | 在线视频a| 中文十次啦 | 精品国产一区二区三区久久久蜜月 | 国内精品亚洲 | www操操操| 六月丁香婷 | 午夜精品久久久久久久99热影院 | 日韩二区在线观看 | 国产视频一区二区三区在线 | 超碰在线人 | 亚洲aⅴ免费在线观看 | 国产一区欧美日韩 | 激情网五月| 一区二区三区四区免费视频 | 亚洲人人av | 欧日韩在线视频 | 婷婷视频导航 | 国产成人黄色网址 | 中文字幕国语官网在线视频 | 日韩av免费一区 | 国产一区二区三区午夜 | 久久久国产精品电影 | 69亚洲视频 | 在线播放精品一区二区三区 | 一二三区av| 九色在线视频 | 色天天 | 91视频免费国产 | 国产成人精品久久久 | 天天天天天天干 | 久久婷婷色 | 99久久综合精品五月天 | 天天操福利视频 | 欧美精品亚洲精品日韩精品 | 五月婷久久 | 中文字幕欧美日韩va免费视频 | 高清中文字幕 | 黄p网站在线观看 | 91免费网 | 毛片网在线观看 | 五月天高清欧美mv | 成 人 黄 色 视频播放1 | 国产va饥渴难耐女保洁员在线观看 | 99精品国产免费久久久久久下载 | 日韩一级理论片 | 国产精品久久久久久久婷婷 | 亚洲国产精品成人女人久久 | 国产大陆亚洲精品国产 | 日韩av网址在线 | 亚洲黄在线观看 | 亚洲aⅴ乱码精品成人区 | 日韩色综合网 | 99视频免费观看 | 国产美女精品在线 | 午夜视频在线观看一区二区三区 | 色先锋av资源中文字幕 | 久草.com| 黄色资源网站 | 午夜国产一区二区三区四区 | 久久久久久久亚洲精品 | 天天操天天舔天天干 | www.婷婷色 | 亚洲国产精品视频 | 91福利视频免费 | 国产精品福利av | 国产高清在线观看 | 热久久99这里有精品 | 一二三久久久 | 一级欧美一级日韩 | 欧美性生活小视频 | 国产九九九精品视频 | 国产成人在线观看 | 色免费在线 | 久久久99久久 | 91最新国产 | 一本色道久久精品 | 亚洲艳情 | 久久综合色8888 | 欧美成人基地 | 欧美91成人网 | 在线观看日韩精品视频 | 久在线观看视频 | av在线最新| 一级黄色片在线播放 | 久久草在线视频国产 | 日韩欧美高清在线 | 国产精品一区免费观看 | 久久国产精品色av免费看 | 丰满少妇高潮在线观看 | 久久精品久久久久电影 | 在线播放你懂 | 久久福利剧场 | 国产在线一线 | 人人添人人澡 | 一区二区三区在线观看免费 | 成人av高清在线观看 | 国产国语在线 | 97精品国产97久久久久久免费 | 国内精品在线观看视频 | 超碰在线个人 | 成人三级av| 精久久久久 | 亚洲欧洲精品一区二区 | 91超在线| 国产午夜精品免费一区二区三区视频 | 亚洲精品在线免费观看视频 | 深爱激情婷婷网 | 免费看片黄色 | 国产成人av电影在线观看 | 麻花传媒mv免费观看 | 成人久久免费视频 | 日日干美女 | 日韩色在线观看 | 在线观看国产一区 | 又爽又黄又刺激的视频 | 婷婷av资源 | 亚洲精品麻豆 | 日日爱999| 日韩www在线 | 婷婷色狠狠 | 亚洲视频免费在线观看 | 91网站观看| 人人澡人| 天天色天天射天天综合网 | 久久99精品国产 | 一区二区三区播放 | 四虎在线观看 | 五月综合色婷婷 | 亚洲情感电影大片 | 日韩精品一区二区在线观看 | 欧美久久久久久久久久久久久 | 色婷婷在线播放 | 日韩在线观看你懂的 | 在线之家免费在线观看电影 | 一级黄色av | 九九综合在线 | 91视频免费看片 | 又色又爽又黄高潮的免费视频 | 色av色av色av| 久久国产精品免费视频 | 91久久奴性调教 | 97激情影院 | 国产99久久久欧美黑人 | 91精品视频免费观看 | 久久久成人精品 | 狠狠狠色丁香综合久久天下网 | 五月婷婷综合激情网 | 天天射网站 | 久久视影 | 免费色av| 久久久久综合网 | 中文字幕第一页av | 欧美另类xxx | 中文在线字幕免 | 国产精品24小时在线观看 | 亚洲视频大全 | 免费在线成人 | 九九在线视频免费观看 | 91免费看片黄 | 欧美色图30p | 久久高视频 | 国产精品99久久99久久久二8 | 啪啪午夜免费 | 成人在线播放网站 | 久久久久久免费视频 | 日韩在线观看网站 | 狠狠操欧美 | 欧美色图东方 | 久久99精品热在线观看 | 欧美一区二区三区四区夜夜大片 | 亚洲精品综合一区二区 | 国产精品久久久久久妇 | 久久久高清视频 | 在线观看免费av网 | 精品一区二区在线免费观看 | 亚洲男模gay裸体gay | 黄色av高清 | 九色91福利 | 激情五月婷婷综合 | 麻豆系列在线观看 | 国产精品第10页 | 在线天堂亚洲 | 91视频一8mav| 国产精品91一区 | 久久免费看av | 久久久片 | 亚洲欧美日韩国产一区二区 | 色丁香综合 | 精品日韩中文字幕 | 国产精品 日韩 欧美 | 三级av黄色 | 91精品导航| 97天天综合网 | 人人干人人干人人干 | 欧美成年网站 | 中文欧美字幕免费 | 免费黄色av电影 | 激情 婷婷 | 在线观看精品国产 | 99久久久国产精品 | 一区二区精品视频 | 亚洲日本va午夜在线电影 | 欧美另类网站 | 一区二区三区免费 | 在线观看网站你懂的 | 一区二区高清在线 | 91传媒在线看 | 国产精品99久久久久久小说 | 在线观看自拍 | 久久精品久久国产 | 综合网久久 | 亚洲视频axxx| 99久久精品午夜一区二区小说 | 97免费在线观看视频 | 91精品国产一区二区三区 | 97精品视频在线 | 亚洲va欧美 | 日韩色中色 | 久久精品99北条麻妃 | 色综合久久五月天 | 不卡精品 | 天天天综合 | 激情久久伊人 | 久久伊99综合婷婷久久伊 | 字幕网资源站中文字幕 | 久久亚洲区 | 中文字幕日韩伦理 | 黄免费在线观看 | 特级a老妇做爰全过程 | 成人在线超碰 | 久久999久久 | 欧美日韩一区二区三区不卡 | 亚洲日本精品视频 | 91自拍视频在线观看 | 久久99精品国产一区二区三区 | 超碰在线公开免费 | 免费看一级黄色大全 | 黄色成人91 | 97精品久久 | 91九色在线观看 | 天天插狠狠干 | 精品中文字幕在线观看 | 国产精品久久久久亚洲影视 | 日韩字幕在线观看 | 久久精选视频 | 成人国产一区二区 | 国产高清在线a视频大全 | 视频 国产区 | 国产高清视频免费最新在线 | 一二三区在线 | 欧美日韩综合在线观看 | 夜夜高潮夜夜爽国产伦精品 | 日韩资源在线观看 | 久久国产福利 | 欧美午夜久久 | 九九综合久久 | 成人精品视频久久久久 | 香蕉久久久久久久 | 亚洲精品日韩一区二区电影 | 欧美日韩伦理在线 | 国产日韩视频在线播放 | av中文字幕亚洲 | 色就是色综合 | 91成人精品在线 | 69欧美视频 | www四虎影院 | 日本黄色片一区二区 | 91污视频在线观看 | 国产女人18毛片水真多18精品 | 国产高清在线看 | av电影不卡 | 国产乱码精品一区二区蜜臀 | 97成人精品 | 丝袜美女在线观看 | 国产视频中文字幕 | 日韩精品久久久久久 | 91黄色视屏 | 在线观看日韩中文字幕 | 国产麻豆视频在线观看 | 精品国产亚洲一区二区麻豆 | 在线看片一区 | 四虎影视成人永久免费观看视频 | 日韩欧美亚洲 | 97超碰香蕉 | 亚洲精选视频在线 | 亚洲欧美国产精品va在线观看 | 国产精品中文字幕在线 | 成人免费视频免费观看 | 亚洲成人一区 | 超碰97av在线| 亚洲爱爱视频 | 又黄又爽又无遮挡免费的网站 | 国产免费视频一区二区裸体 | 在线视频你懂 | 91av手机在线观看 | 国产精品久久久久久久久久直播 | 亚洲三级性片 | 中文字幕有码在线播放 | 国产美女免费看 | 久久精品视频观看 | 粉嫩av一区二区三区免费 | 日韩网站在线 | 米奇影视7777 | 免费看国产一级片 | 视频高清| 99久国产 | 91精品国产一区二区在线观看 | 91女人18片女毛片60分钟 | 日韩mv欧美mv国产精品 | 免费污片 | 国产不卡免费视频 | 免费看的黄色网 | 天天操天天草 | 99视频在线观看一区三区 | 91精品国产福利在线观看 | 中文字幕av在线 | 婷婷六月在线 | 91成人免费在线视频 | 亚洲综合视频在线 | 婷婷丁香九月 | 国产91九色蝌蚪 | 国产一区二区日本 | 手机看片午夜 | 一级黄色大片 | 在线观看国产中文字幕 | 在线观看中文字幕一区二区 | 日韩丝袜 | 国产日韩欧美综合在线 | 婷婷六月综合亚洲 | 精品美女在线视频 | 国产亚洲欧洲 | 日韩精品一区二区三区视频播放 | 中文字幕在线乱 | 国产精品久久久久久久久久新婚 | 久久伊人色综合 | 一区二区三区精品久久久 | 色综合久久久久综合体桃花网 | 极品久久久久 | 国产一级视频免费看 | 免费看成人a | 国产流白浆高潮在线观看 | 天天爽天天摸 | 久久久鲁 | 日韩久久精品一区二区三区下载 | 日韩欧美在线一区二区 | 97超碰国产精品 | 色a资源在线 | 日韩乱色精品一区二区 | 天堂av免费观看 | 国产美腿白丝袜足在线av | 精品人人爽 | .精品久久久麻豆国产精品 亚洲va欧美 | 91麻豆精品国产91久久久更新时间 | 日韩精品首页 | 午夜美女网站 | 日本一区二区高清不卡 | 伊人电影在线观看 | 久久久天天操 | 日日夜夜免费精品 | 91精品久久久久久久91蜜桃 | www.久久99 | 久在线| 国产999精品视频 | 免费看毛片网站 | 这里只有精品视频在线观看 | 天天操天天操天天操天天 | 91成人精品观看 | 丁香综合五月 | 日日麻批40分钟视频免费观看 | 97综合视频 | 蜜桃视频日韩 | 日韩欧美一区二区三区在线观看 | 伊人天天干 | 97视频人人| 福利电影一区二区 | 九九热视频在线播放 | 色噜噜日韩精品欧美一区二区 | 亚洲精品免费在线视频 | 日韩在线小视频 | 国产福利91精品张津瑜 | 麻豆视频国产在线观看 | 韩国一区二区av | 在线观看第一页 | 久久五月婷婷丁香 | 亚洲视频www | 综合激情婷婷 | 国产网站av | 操操操人人人 | 91资源在线视频 | 亚洲精品国产综合99久久夜夜嗨 | 91av视频观看 | 五月婷婷激情综合 | 国产高清视频免费在线观看 | 国产h在线观看 | 黄色三级免费片 | 国产一区二区精品久久91 | 插插插色综合 | 在线看的av网站 | 精品自拍sae8—视频 | 久久精品黄 | 亚洲另类久久 | 毛片网站观看 | 久草网站在线观看 | 亚洲成人av在线播放 | 日日碰狠狠添天天爽超碰97久久 | 欧美一级淫片videoshd | www.狠狠操.com | 91传媒在线观看 | 免费在线一区二区 | 黄色精品国产 | 国产香蕉av | 色丁香色婷婷 | 少妇自拍av | 91精品黄色| 亚洲成人精品av | 在线观看v片| 国产视频导航 | 视频一区二区国产 | 91在线视频观看免费 | 射久久 | 亚洲作爱视频 | 欧美不卡视频在线 | 这里只有精品视频在线观看 | 亚洲精品456在线播放乱码 | 97国产一区二区 | 亚洲免费在线观看视频 | 精品中文字幕在线 | 国产精品久久久久久久久久久久 | 中文字幕在线成人 | 久久字幕精品一区 | 人人插人人看 | 日本视频不卡 | 91精品国产99久久久久久久 | 在线天堂日本 | 综合成人在线 | 久久免费电影 | 天天操天天色天天 | 中文字幕一区在线观看视频 | 午夜a区 | 九九九免费视频 | 久草在线综合 | bbbbb女女女女女bbbbb国产 | 欧美精品乱码久久久久久按摩 | 国产区在线 | 国产手机视频精品 | 国产精品一区二区久久国产 | 欧美特一级| 一级黄色大片在线观看 | 黄色免费在线看 | 国产精品丝袜 | 五月天狠狠操 | 在线草| 国产91在线播放 | 国内精品久久久久久久久久清纯 | 天天干夜夜夜 | 久久在线免费 | 久草电影在线观看 | 国产麻豆剧果冻传媒视频播放量 | 精品久久国产精品 | 91午夜精品 | av千婊在线免费观看 | 成人久久18免费 | 久久久这里有精品 | 日本公妇在线观看 | 亚洲午夜电影网 | 久久性生活片 | 久久五月婷婷综合 | 性色av香蕉一区二区 | 成人h视频 | 视频一区二区三区视频 | 久久亚洲专区 | 成人免费在线电影 | 国内小视频在线观看 | 69国产盗摄一区二区三区五区 | 国产美女免费 | 国产美女视频一区 | 中文字幕一区二区三区四区 | 一区在线观看 | 中文字幕日韩国产 | 亚州性色 | 国产中文字幕第一页 | 欧美日本中文字幕 | 中文在线√天堂 | 91豆麻精品91久久久久久 | 黄色大全免费观看 | 国产日韩欧美视频在线观看 | 欧美小视频在线 | 日韩久久在线 | 一区二区三区动漫 | 日本中文字幕在线观看 | 麻豆视频一区 | 中文字幕永久免费 | 婷婷色在线视频 | 婷婷色网址 | 久久久亚洲国产精品麻豆综合天堂 | 天天撸夜夜操 | 精品亚洲一区二区三区 | 亚洲精品免费观看视频 | 91在线91| 欧美精品乱码久久久久久按摩 | 在线国产专区 | 丁香婷婷色月天 | 九七视频在线观看 | 夜色.com | 婷婷视频| 婷婷久久一区二区三区 | 国产一线天在线观看 | 五月天激情电影 | 99热99re6国产在线播放 | 亚洲欧美偷拍另类 | 99免在线观看免费视频高清 | 一区二区三区久久精品 | 超级碰碰免费视频 | av在线免费播放网站 | 成人精品在线 | 日韩一区二区三免费高清在线观看 | 成年人视频在线免费播放 | 亚洲春色成人 | 国产亚洲无 | 亚洲国产精品va在线看黑人 | 色婷婷狠狠操 | 婷婷在线播放 | 久草在线在线精品观看 | 日韩丝袜在线观看 | 天天曰天天爽 | 久久精品国产免费看久久精品 | 福利av在线 | 国产直播av | 一区二区三区高清在线观看 | 国产 欧美 日产久久 | 五月婷婷在线综合 | 伊人五月天 | 中文在线天堂资源 | 国产精品一级在线 | 99视频在线观看免费 | 97精品视频在线播放 | 成人免费一区二区三区在线观看 | 99精品国产一区二区三区不卡 | 婷婷综合av| 日韩电影中文,亚洲精品乱码 | 婷婷国产视频 | av电影在线免费观看 | 午夜影院在线观看18 | www.91av在线| 在线不卡的av | 99这里只有精品视频 | 日韩激情一二三区 | 国产精品久久久av久久久 | 日日摸日日 | 日韩精品极品视频 | 操操操人人人 | 韩国一区二区三区在线观看 | 国产在线观看你懂的 | 欧美国产大片 | 日本黄色大片免费看 | 久久精品国亚洲 | 久久成年人网站 | 国产一区在线播放 | 99热在线精品观看 | 久久99精品国产99久久6尤 | 最近免费中文字幕mv在线视频3 | 激情五月开心 | 日韩电影一区二区三区 | 五月天久久激情 | 美女国内精品自产拍在线播放 | 免费日韩视频 | 国产在线一区二区三区播放 | 久久观看最新视频 | 婷婷夜夜 | 国产精品自产拍在线观看中文 | 成人丝袜| 国产一级性生活视频 | av免费在线观看1 | 国产一区久久 | 91热视频在线观看 | 精品国产精品一区二区夜夜嗨 | 欧美一二区在线 | 国产精品久久久久久模特 | 就要干b | 中文字幕第一页在线vr | 黄色的网站免费看 | 狠狠干中文字幕 | 婷婷六月丁 | 精品产品国产在线不卡 | 欧美日韩国内在线 | 久久超碰免费 | 在线欧美最极品的av | 日韩av男人的天堂 | 国产麻豆电影在线观看 | 日韩av电影中文字幕 | 超碰成人免费电影 | 日韩二区在线 | 亚洲资源在线网 | 免费看的国产视频网站 | 国产精品一区电影 | 99精品久久久久久久久久综合 | 欧美日韩亚洲精品在线 | 黄色三级在线看 | 久艹视频在线免费观看 | 国产区精品 | 免费在线观看国产黄 | 操老逼免费视频 | 天天色综合久久 | 欧洲不卡av | 精品久久久久久亚洲综合网站 | 成人蜜桃 | 亚洲欧洲国产精品 | 国产精品一区二区久久 | 日韩精品一区二区三区电影 | 人人讲| 欧美性大战| 99久久久国产精品免费观看 | 在线国产中文字幕 | 国产久视频 | 男女拍拍免费视频 | 日韩在线观看第一页 | 天天爱天天射 | 日韩精品专区 | 五月激情综合婷婷 | 91超碰在线播放 | 久久国内精品99久久6app | 亚州国产精品视频 | 欧美另类视频 | 人成免费网站 | 免费美女av | 999久久久久久 | 免费又黄又爽视频 | 日黄网站 | 国产a级片免费观看 | 精品主播网红福利资源观看 | 91麻豆精品国产 | 国产美女久久 | 婷婷四房综合激情五月 | 久久毛片网站 | 色网站黄 | 99久久日韩精品免费热麻豆美女 | 日韩激情视频在线观看 | 中文字幕视频免费观看 | 亚洲国产精品传媒在线观看 | 亚洲一区二区三区在线看 | 亚洲三级视频 | 久久综合色8888 | 超碰免费在线公开 | 在线av资源 | 欧美一级网站 | 九色91在线视频 | 在线观看中文字幕dvd播放 | 日日干干| 久草在线免费电影 |