标签:
WebService是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,能够与其它兼容的组件进行相互操作。
WebService是一种部署在网络上的对象或者组件。
SOA(Service-Oriented Architecture)面向服务的体系结构
SOA是一个组件模型,它将应用程序的不同功能单元(服务),通过这些服务之间定义良好的接口和契约联系起来。
SOA与Web Service的区别与联系
Soa服务和Web Service之间的区别在于设计
SOA并没有确切的定义服务具体如何交互,而仅仅定义服务如何相互理解以及如何交互
其中的区别也就是如何执行流程的战略与如何执行流程的战术之间的区别
Web Service在需要交互的服务之间如何传递消息有具体的指导原则。
Web Service也是实现SOA具体方式之一。
SOA的特征:
SOA的优势:
SOA的不足:
WSDL(Web Service decription Language)-web服务描述语言
Web 服务描述语言规范定义了一个XML词汇表,该词汇表依照请求和响应消息,在服务请求都和服务提供都之间定义了一种契约。
WSDL文档可以分为两部分,顶部分由抽象定义组成;
底层部分则由具体描述组成。
抽象定义
具体定义
抽象元素:
Types元素-数据类型定义的容器
Message元素-通信消息的数据结构的抽象类型定义
PortType元素--可以描述一个Web Service可被执行的操作以及相关消息
具体元素:
Binding元素-特定端口类型的具体协议和数据格式规范的绑定
Service元素-相关服务访问点的集合
SOAP(Simple Object Access Protocol),简单对象访问协议,是一个基于XML的用于在分布式环境下交换信息的轻量级协议
SOAP包含4个部分:
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>
发布tomcat上
通过http://localhost:8080/PB_WebService/CalculatorPort?wsdl访问
结果
说明成功
创建Java项目
创建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(); //调用方法 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)); } }
1.新建JAVA项目
2.导入jar包
3.创建WebService接口如:HelloWorldServcie
4.创建接口的实现类HelloWorldServiceImpl
5.
6.
接口
package com.pb.service; /** * HelloWorld接口 * */ public interface HelloWorldService { /** * 说话的方法 */ public void sayHello(String name); }
实现类
package com.pb.service.impl; import com.pb.service.HelloWorldService; /** * HelloWorldService实现类 * */ 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 { /** * 发布WebService */ public static void main(String[] args) { // ServerFactoryBean对象 ServerFactoryBean bean=new ServerFactoryBean(); //创建接口实例对象 HelloWorldService hello=new HelloWorldServiceImpl(); //设置服务类型 bean.setServiceClass(HelloWorldService.class); //设置发布地址 通过 http://localhost:8080/helloWorld?wsdl验证访问 bean.setAddress("http://localhost:8080/helloWorld"); //设置实体服务的类 bean.setServiceBean(hello); //发布 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"); //创建服务对象实例 HelloWorldService service=(HelloWorldService)bean.create(); //调用方法 service.sayHello("张三"); } }
客户端
标签:
原文地址:http://www.cnblogs.com/liunanjava/p/4439026.html