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文件下次再写


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

posted @ 2020-06-28 23:48  zhiless  阅读(201)  评论(4编辑  收藏  举报