zoukankan      html  css  js  c++  java
  • WebService学习笔记

    事实证明,光学习不做笔记是没有用的。

    webservice 基本概念

    简介

    webservice 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。

    JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAXRS。

    webService三要素:soap、wsdl、uddi

    相关术语

    JAVA 中共有三种WebService规范,分别是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。

    SOAP协议

    1、 SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。
    2、 SOAP作为一个基于XML语言的协议用于有网上传输数据。
    3、 SOAP = 在HTTP的基础上+XML数据。
    4、 SOAP基于HTTP
    5、 SOAP由以下部分组成

    1. Envelope--必须,以XML根元素出现
    2. Headers --可选
    3. Body --必须,且需要包含服务器执行的方法,发送到服务器的数据

    wsdl说明书

    Web Service描述语言WSDL(SebService Definition Language)就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。

    UDDI

    UDDI是一个跨产业,跨平台的开放性架构,可以帮助Web 服务提供商在互联网上发布 Web 服务的信息。
    简单来说,UDDI 就是一个目录,只不过在这个目录中存放的是一些关于 Web 服务的信息而已。并且 UDDI 通过SOAP 进行通讯,构建于 . Net 之上。

    应用场景

    Web Service 可以适用于应用程序集成、软件重用、跨防火墙通信等需求。不同的业务要求不同。具体如下:
    1、 跨防火墙通信
    2、 应用系统集成
    3、 软件和数据重用

    优缺点

    优点

    a) 异构平台的互通性
    理论上, Web Service 最大的优势是提供了异构平台的无缝街接技术手段。由于不同的用户使用不同的硬件平台,不同的操作平台,不同的操作系统,不同的软件,不同的协议通信,这就产生了互相通信的需求。 Web Service 使任何两个应用程序,只要能读写XML,那么就能互相通信。

    b) 更广泛的软件复用(例如手机淘宝可以复用已有淘宝的业务逻辑.)软件的复用技术通过组合已有模块来搭建应用程序,能大幅度提高软件的生产效率和质量。用户只要获得了描述 Web Service 的 WSDL 文件,就可以方便地生成客户端代理,并通过代理访问 Web Service 。

    c) 成本低、可读性强、应用范围广
    Web Service 可用基于 XML 的 SOAP 来表示数据和调用请求。并且通过 HTTP 协议传输XML 格式的数据

    d) 迅捷的软件发行方式
    (每个web Service称为一个生产者.不同的生产者可以相互协同合作完成整个应用)Web Service 将彻底地改变软件的发行方式。软件供应商可以把软件分解成若Web Service 模块构成的系统,直接在 Web 上发布。

    e) 最重要的一点
    客户端与服务端可能是用不同的语言开发的,但是,通过webservice提供服务接口,客户端与服务端之前可以传递对象。

    缺点

    由于soap是基于xml传输,本身使用xml传输会传输一些无关内容从而影响效率,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap去完成简单的数据传输而携带的信息更多效率再受影响;
    Web Service作为web跨平台访问的标准技术,很多公司都限定要求使用Web Service,但如果是简单的接口可以直接使用http传输自定义数据格式,开发更快捷。

    ApacheCXF实现WebService(Jax-ws)

    创建服务端,

    新建空白Project,在空白Project中创建maven module,注意修改路径和Setting路径,最终路径如下

    导入pom文件,注意此时要求本地库中有相关文件,或者maven能够从互联网获取依赖,完整pom文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.cy</groupId>
        <artifactId>01_jaxws_server</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <name>01_jaxws_server</name>
        <dependencies>
            <!-- 要进行jaxws 服务开发 -->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <!-- 内置jetty web服务器  -->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-jetty</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <!-- 日志实现 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.12</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>6</source>
                        <target>6</target>
                        <encoding>UTF-8</encoding>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    创建接口文件 HelloService

    package com.cy.service;
    
    import javax.jws.WebService;
    
    /**
     * 对外发布服务地接口
     */
    
    @WebService
    public interface HelloService {
        /**
         * 对外发布服务的接口的方法
         */
        public String sayHello(String name);
    }
    

    创建HelloServiceImpl 实做文件

    package com.cy.service.impl;
    
    import com.cy.service.HelloService;
    
    public class HelloServiceImpl implements HelloService {
    
        public String sayHello(String name) {
            return name + " Welcome to CY company";
        }
    }
    
    

    test中创建测试类

    package com.cy;
    
    import com.cy.service.impl.HelloServiceImpl;
    import org.apache.cxf.interceptor.LoggingInInterceptor;
    import org.apache.cxf.interceptor.LoggingOutInterceptor;
    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
    
    public class Server {
        /**
         * 发布服务的工厂
         */
        public static void main(String[] args) {
    
            // 发布服务的工厂
            JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
    
            // 设置服务地址
            factory.setAddress("http://localhost:8000/ws/hello");
    
            // 设置服务类
            factory.setServiceBean(new HelloServiceImpl());
    
            // 添加日志输入输出拦截器,观察soap请求、以及soap相应内容
            factory.getInInterceptors().add(new LoggingInInterceptor());
            factory.getOutInterceptors().add(new LoggingOutInterceptor());
    
            // 发布服务
            factory.create();
    
            System.out.println("发布服务成功,端口8000......");
        }
    }
    

    直接测试就可以,浏览器中打开网址,有xml文件显示,加上?wsdl可以看见说明书,说明书从下往上读。client文件下次再写


    声明:本文大量引用课程文档的内容,本意是为了整理一份笔记,方便自己复习的同时也可以方便有需要的人查阅,如侵犯到您的权益,请告知本人,本人会立刻删除,谢谢!

  • 相关阅读:
    每个女孩都希望她的追求者是一个M/M/1排队系统
    一门考试结业后
    编程实现贝叶斯分类
    大禹治水的新闻采阅系统(草稿版)
    正则表达式之获取匹配,非获取匹配,正向预查,负向预查
    frame或者iframe的contentwindow属性
    installanywhere's LAX Properties
    查看域名下主机信息
    在Java中Vector和ArrayList的区别
    php SNMP函数时出错
  • 原文地址:https://www.cnblogs.com/zhiless/p/13205710.html
Copyright © 2011-2022 走看看