WebService是基于網(wǎng)絡的、分布式的模塊化組件,它執(zhí)行特定的任務,遵守具體的技術(shù)規(guī)范,能夠與其它兼容的組件進行相互操作。
WebService是一種部署在網(wǎng)絡上的對象或者組件。
二、SOASOA(Service-Oriented Architecture)面向服務的體系結(jié)構(gòu)
SOA是一個組件模型,它將應用程序的不同功能單元(服務),通過這些服務之間定義良好的接口和契約聯(lián)系起來。
SOA與Web Service的區(qū)別與聯(lián)系
Soa服務和Web Service之間的區(qū)別在于設計
SOA并沒有確切的定義服務具體如何交互,而僅僅定義服務如何相互理解以及如何交互
其中的區(qū)別也就是如何執(zhí)行流程的戰(zhàn)略與如何執(zhí)行流程的戰(zhàn)術(shù)之間的區(qū)別
Web Service在需要交互的服務之間如何傳遞消息有具體的指導原則。
Web Service也是實現(xiàn)SOA具體方式之一。
SOA的特征:
SOA的優(yōu)勢:
SOA的不足:
WSDL(Web Service decription Language)-web服務描述語言
Web 服務描述語言規(guī)范定義了一個xml詞匯表,該詞匯表依照請求和響應消息,在服務請求都和服務提供都之間定義了一種契約。
3.1、基本結(jié)構(gòu)WSDL文檔可以分為兩部分,頂部分由抽象定義組成;
底層部分則由具體描述組成。
抽象定義
具體定義
抽象元素:
Types元素-數(shù)據(jù)類型定義的容器
Message元素-通信消息的數(shù)據(jù)結(jié)構(gòu)的抽象類型定義
PortType元素--可以描述一個Web Service可被執(zhí)行的操作以及相關(guān)消息
具體元素:
Binding元素-特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范的綁定
Service元素-相關(guān)服務訪問點的集合
四、SOAP概述SOAP(Simple Object access PRotocol),簡單對象訪問協(xié)議,是一個基于XML的用于在分布式環(huán)境下交換信息的輕量級協(xié)議
SOAP包含4個部分:
SOAP的優(yōu)點:
傳輸和語言綁定以及數(shù)據(jù)編碼的參數(shù)選擇都是由實現(xiàn)決定的
4.1、SOAP
java API for XML-based Web Service

java類
package com.pb.service;/** * 一個簡單的計算器類 * */public class Calculator { // 加法 public int add(int num1,int num2) { return num1+num2; } // 減法 public int sub(int num1,int num2) { return num1-num2; } // 乖法 public int mul(int num1,int num2) { return num1*num2; } // 除法 public int div(int num1,int num2) { return num1/num2; } // 除模 public int mod(int num1,int num2) { return num1%num2; } }WebService
package com.pb.service;@javax.jws.WebService(targetNamespace = "http://service.pb.com/", serviceName = "CalculatorService", portName = "CalculatorPort")public class CalculatorDelegate { com.pb.service.Calculator calculator = new com.pb.service.Calculator(); public int add(int num1, int num2) { return calculator.add(num1, num2); } public int sub(int num1, int num2) { return calculator.sub(num1, num2); } public int mul(int num1, int num2) { return calculator.mul(num1, num2); } public int div(int num1, int num2) { return calculator.div(num1, num2); } public int mod(int num1, int num2) { return calculator.mod(num1, num2); }}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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <servlet> <description>JAX-WS endpoint - CalculatorService</description> <display-name>CalculatorService</display-name> <servlet-name>CalculatorService</servlet-name> <servlet-class> com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CalculatorService</servlet-name> <url-pattern>/CalculatorPort</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener></web-app>

發(fā)布tomcat上
通過http://localhost:8080/PB_WebService/CalculatorPort?wsdl訪問
結(jié)果

說明成功
創(chuàng)建客戶端創(chuàng)建Java項目
創(chuàng)建Web Service Client

測試類
package com.pb.client.test;import com.pb.service.CalculatorDelegate;import com.pb.service.CalculatorService;public class WebServiceClientTest { public static void main(String[] args) { //獲取服務實例 CalculatorService service=new CalculatorService(); //獲取服務的代理類接口 CalculatorDelegate cd=service.getCalculatorPort(); //調(diào)用方法 System.out.println("和:"+cd.add(10, 3)); System.out.println("差:"+cd.sub(10, 3)); System.out.println("積:"+cd.mul(10, 3)); System.out.println("商:"+cd.div(10, 3)); System.out.println("模:"+cd.mod(10, 3)); }}七、Apache CXF

1.新建JAVA項目
2.導入jar包
3.創(chuàng)建WebService接口如:HelloWorldServcie
4.創(chuàng)建接口的實現(xiàn)類HelloWorldServiceImpl
5.
6.

接口
package com.pb.service;/** * HelloWorld接口 * */public interface HelloWorldService { /** * 說話的方法 */ public void sayHello(String name);}實現(xiàn)類
package com.pb.service.impl;import com.pb.service.HelloWorldService;/** * HelloWorldService實現(xiàn)類 * */public class HelloWorldServiceImpl implements HelloWorldService { @Override public void sayHello(String name) { System.out.println(name+" say HelloWorld!!!"); }}服務類
package com.pb.webservice;import org.apache.cxf.frontend.ServerFactoryBean;import com.pb.service.HelloWorldService;import com.pb.service.impl.HelloWorldServiceImpl;public class WebService { /** * 發(fā)布WebService */ public static void main(String[] args) { // ServerFactoryBean對象 ServerFactoryBean bean=new ServerFactoryBean(); //創(chuàng)建接口實例對象 HelloWorldService hello=new HelloWorldServiceImpl(); //設置服務類型 bean.setServiceClass(HelloWorldService.class); //設置發(fā)布地址 通過 http://localhost:8080/helloWorld?wsdl驗證訪問 bean.setAddress("http://localhost:8080/helloWorld"); //設置實體服務的類 bean.setServiceBean(hello); //發(fā)布 bean.create(); }}客戶端
package com.pb.client;import org.apache.cxf.frontend.ClientProxyFactoryBean;import com.pb.service.HelloWorldService;/** * 客戶端 */public class ClientService { public static void main(String[] args) { // 代理工廠bean ClientProxyFactoryBean bean=new ClientProxyFactoryBean(); //設置類型 bean.setServiceClass(HelloWorldService.class); //設置服務地址 bean.setAddress("http://localhost:8080/helloWorld"); //創(chuàng)建服務對象實例 HelloWorldService service=(HelloWorldService)bean.create(); //調(diào)用方法 service.sayHello("張三"); }}九、和Spring集成




客戶端

新聞熱點
疑難解答