zoukankan      html  css  js  c++  java
  • WebService

    一、WebService

    WebService是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,能够与其它兼容的组件进行相互操作。

    WebService是一种部署在网络上的对象或者组件。

    二、SOA

    SOA(Service-Oriented Architecture)面向服务的体系结构

    SOA是一个组件模型,它将应用程序的不同功能单元(服务),通过这些服务之间定义良好的接口和契约联系起来。

    SOA与Web Service的区别与联系

    Soa服务和Web Service之间的区别在于设计

    SOA并没有确切的定义服务具体如何交互,而仅仅定义服务如何相互理解以及如何交互

    其中的区别也就是如何执行流程的战略与如何执行流程的战术之间的区别

    Web Service在需要交互的服务之间如何传递消息有具体的指导原则。

    Web Service也是实现SOA具体方式之一。

     SOA的特征:

    • 服务的重用(Reuse)
    • 服务的互操作性(interoperability)
    • 服务是自治的(autonomous)功能实体
    • 服务之间的松耦合度(Loosly Coupled)
    • 服务是位置透明的(location transparency)

    SOA的优势:

    • 集成现有系统,不必另起炉灶
    • 服务设计松耦合,带来多方面优点
    • 统一了业务架构,可扩展性增强
    • 加快了开发速度,减少了开发成本
    • 持续改进业务过程,降低激变风险

    SOA的不足:

    • 可靠性:还没有完全 为事务的最高可靠性,不可否认性,消息一定会被传送且仅传送一次以及事务撤回做好准备。
    • 安全性:由于一个应用软件的组件容易去与属于不同域的其他组件进行对话,确保不同又要相互连接的系统之间的安全必就复杂的多。

    三、WSDL

    WSDL(Web Service decription Language)-web服务描述语言

    Web 服务描述语言规范定义了一个XML词汇表,该词汇表依照请求和响应消息,在服务请求都和服务提供都之间定义了一种契约。

    3.1、基本结构

    WSDL文档可以分为两部分,顶部分由抽象定义组成;

    底层部分则由具体描述组成。

    抽象定义

    • Types:独立于机器和语言的类型定义,
    • Message:包括函数参数(输入与输出分开)或者文档描述
    • PortTypes:引用消息部分中消息定义来描述函数签名(操作史、输入参数、输出参数)

     具体定义

    • Bindings:PortTypes部分的每一个操作在引绑定实现
    • Servies:确定每一绑定的端口地址

    抽象元素:

    Types元素-数据类型定义的容器

    Message元素-通信消息的数据结构的抽象类型定义

    PortType元素--可以描述一个Web Service可被执行的操作以及相关消息

    具体元素:

    Binding元素-特定端口类型的具体协议和数据格式规范的绑定

    Service元素-相关服务访问点的集合

    四、SOAP概述

     SOAP(Simple Object Access Protocol),简单对象访问协议,是一个基于XML的用于在分布式环境下交换信息的轻量级协议

    SOAP包含4个部分:

    • SOAP封装:封装定义了一个描述消息中的内容是什么,是谁发送 ,谁应该接受并处理它以及如何处理它们的框架。
    • SOAP编码规则:用于表示应用程序需要使用的数据库类型的实例。
    • SOAP RPC表示:表示远程过程调用和应答的协定
    • SOAP绑定:使用底层协议交换信息。

    SOAP的优点:

    • 相对于厂商无关
    • 相对于平台独立
    • 相对于操作系统独立
    • 相对于编程语言独立   

    传输和语言绑定以及数据编码的参数选择都是由实现决定的

     4.1、SOAP

    • SOAP是简易对象访问协议
    • SOAP是一种通信协议
    • SOAP是用于应用程序之间的通信
    • SOAP是一种用于发送消息的格式
    • SOAP被设计用来通过因特网进行通信
    • SOAP独立于平台
    • SOAP独立于语言
    • SOAP基于XML
    • SOAP可扩展
    • SOAP允许绕过防火墙
    • SOAP将被作为W3C标淮来发展

    五、Web Service发展历史

    Java API for XML-based Web Service

     

    六、创建WebService

    • 1.创建WebService工程
    • 2.创建服务java类
    • 3.创建WebService
    • 4.添加jax-ws支持的jar包
    • 5.发布WebService工程和发布WEB项目一样
    • 6.通过URL访问   http://localhost:8080/PB_WebService/CalculatorPort?wsdl

    创建服务端WebService

    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));
    
        }
    
    }

    七、Apache CXF

     

    八、使用CXF创建HelloWorld

    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("张三");
        }
    
    }

     九、和Spring集成

    客户端

  • 相关阅读:
    SpringMVC学习指南【笔记6】JSTL标签、函数
    SpringMVC学习指南【笔记5】EL表达式、实现免脚本JSP页面、禁用EL计算的设置
    SpringMVC学习指南【笔记4】数据绑定、表单标签库、转换器、格式化、验证器
    序列封包和序列解包
    python 字符串分割,连接方法
    Jmeter常用插件(转)
    不同的content-type,Jmeter入参不同
    性能监测(CPU)
    正则表达式
    乱码问题
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4439026.html
Copyright © 2011-2022 走看看