`

WebService原理简述

阅读更多
Web Service 是一种可以接收从internet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在WEB上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

Web Service四大组成部分:
1、XML 扩展型可标记语言,其是WebService表示数据的基本格式,是Web Service标准的基础及核心。

2、SOAP 简单对象访问协议,是一种基于XML的轻量级消息交换协议。利用SOAP可以在两个或多个对等实体之间进行信息交换,并可以使这些实体在分散的分布式应用程序中相互通信。

3、WSDL Web Service描述语言,其是一种XML格式,用于描述网络服务及其访问信息。WSDL用于定义Web服务的元数据语言,描述服务提供方和请求方之间如何进行通信。大多数情况下由软件自动生成和使用。

4、UDDI 通用描述、发现与集成服务,UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。

1.WSDL: Web服务定义语言(Web Service Definition Language),用来定义服务接口。实际上,它能描述服务的两个不同方面:服务的签名(名字和参数),以及服务的绑定和部署细节(协议和位置)。
2.SOAP:简单对象访问协议(Simple Object Access Protocol),是定义Webservice的协议。HTTP是一个网络数据交互的底层协议,而SOAP是Web Service数据交换的专用协议。
3.UDDI:通用描述、发现与集成服务(Universal Description, Discovery and Integration),UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。
SOAP是协议,就像HTTP协议一样,一般框架都已经集成;
UDDI扮演者补充的角色,非必须,而且通常在实践中也不用。
WSDL是开发人员打交道最多的东西,也算是Webservice的核心了。


Web Service原理模型




Web Service服务:简单的说,Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的。


Web Service的体系结构是基于:Web服务提供者、Web服务请求者、Web服务中介者三个角色和发布、发现、绑定三个动作构建的。

Web服务提供者:是Web服务的拥有者,它耐心等待为其他服务和用户提供自己已有的功能;

Web服务请求者:是Web服务的使用者,它利用SOAP消息向Web服务提供者发送请求以获得服务;

Web服务中介者:是把一个Web服务请求者与合适的Web服务提供者联系在一起,它充当管理者的角色,一般是UDDI。

发布 : 是为了让用户或其他服务知道某个Web服务的存在和相关信息;

查找 : 是为了找到合适的Web服务服务;

绑定 : 是在提供者与请求者之间建立某种联系。


实现一个完整的Web服务包括以下步骤:

◆ Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)

◆ Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)

◆ Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)

◆ 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)

◆ Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)

webservice 的调用有3种方式

1). httpget
2). httppost
3). httpsoap

soap 的优点是 可以传递结构化的 数据,而前两种不行。
soap 最终也是使用 HTTP 传送 XML。


在Webservice中的安全主要分为以下三个方面。

传输      SSL/HTTPS 对连接加密,而不是传输数据

消息      数据加密(XML Encryption)   数字签名(XML-DSIG)

底层架构  利用应用服务安全机制

传输时的安全是最容易被加入到你的Webservice应用中的,利用现有的SSL 和HTTPS协议,就可以很容易的获得连接过程中的安全。

然而这种安全实现方法有两个弱点。一是它只能保证数据传输的安全,而不是数据本身的安全,数据一旦到达某地,那么就可以被任何人所查看。而在Webservice中,一份数据可能到达多个地方,而这份数据却不该被所有的接受者所查看。二是它提供的是要么全有要么全无的保护,你不能选择哪部分数据要被保护,而这种可选择性也是在Webservice中所常要用到的。

第二层的保护是对于消息本身的保护。你可以使用已有的XML安全扩展标准,实现数字签名的功能,从而保证你的消息是来自特定方并没有被修改过。XML文件的加密技术从更大程度上加强了Webservice的安全,它能够定制数据传输到后,能否被接受者所查看,进一步完善了传输后的安全,业界也在不断的制定Webservice的安全标准,比如SAML 和 WS-Security。

最后一层保护就是依靠底层架构的安全,这更多的来自于操作系统和某些中间件的保护。比如在J2EE中,主持Webservice的应用服务器。目前很多的J2EE应用服务器都支持Java Authentication and Authorization Service (JAAS),这是最近被加入到J2SE 1.4当中的。利用主持Webservice的服务器,实现一些安全机制这是很自然的做法。另一种利用底层架构的安全方法就是,做一个独立的负责安全的服务器,Webservice的使用者和创建者都需要与之取得安全信任。


Soap消息格式
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
 
<soap:Header>
  <m:Trans xmlns:m="http://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
 
 
<soap:Body>
  <m:GetPrice xmlns:m="http://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>
</soap:Envelope>


cxf简单案例:
package com.hsy.server;  
  
import java.util.List;  
  
import javax.jws.WebParam;  
import javax.jws.WebService;  
  
import com.hsy.pojo.User;  
  
@WebService  
public interface HelloWorld {  
    String sayHi(@WebParam(name="text")String text);  
    String sayHiToUser(User user);  
    String[] SayHiToUserList(List<User> userList);  
}  



package com.hsy.server;  
  
import java.util.LinkedHashMap;  
import java.util.List;  
import java.util.Map;  
  
import javax.jws.WebParam;  
import javax.jws.WebService;  
  
import com.hsy.pojo.User;  
  
@WebService(endpointInterface="com.hsy.server.HelloWorld",serviceName="HelloWorld")  
public class HelloWorldImpl implements HelloWorld {  
    Map<Integer, User> users = new LinkedHashMap<Integer, User>();  
  
    public String sayHi(@WebParam(name = "text") String text) {  
        return "Hello,"+text;  
    }  
  
    public String sayHiToUser(User user) {  
        users.put(users.size()+1, user);  
        return "Hello,"+user.getName();  
    }  
  
    public String[] SayHiToUserList(List<User> userList) {  
        String[] result = new String[userList.size()];  
        int i = 0;  
        for(User u:userList){  
            result[i] = "Hello " + u.getName();  
            i++;  
        }  
        return result;  
    }  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
  
    }  
  
}  



package com.hsy.server;  
  
import javax.xml.ws.Endpoint;  
  
public class webServiceApp {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
         System.out.println("web service start");  
         HelloWorldImpl implementor = new HelloWorldImpl();  
         String address = "http://localhost:8080/helloWorld";  
         Endpoint.publish(address, implementor);  
         System.out.println("web service started");  
    }  
  
}  



package com.hsy.client;  
  
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  
import com.hsy.pojo.User;  
import com.hsy.server.HelloWorld;  
  
public class HelloWorldClient {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        //首先右键run as 运行com.hsy.server.webServiceApp类,然后再运行这段客户端代码  
        JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();  
        jwpfb.setServiceClass(HelloWorld.class);  
        jwpfb.setAddress("http://localhost:8080/helloWorld");  
        HelloWorld hw = (HelloWorld) jwpfb.create();  
        User user = new User();  
        user.setName("name");  
        user.setDescription("toName");  
        System.out.println(hw.sayHiToUser(user));  
          
    }  
  
}  




  • 大小: 14.6 KB
分享到:
评论

相关推荐

    通过webservice与android实现通信(C#与android)

    通过上述步骤,我们不仅搭建了一个基本的WebService服务端,还讨论了如何配置本地IIS使其对外提供稳定的服务,最后简述了Android客户端如何调用WebService。这种通信模式在实际开发中非常有用,尤其是在需要跨平台...

    Axis开发Webservice的简单步骤

    在IT行业中,Web服务是一种基于互联网的标准协议,用于应用程序之间的数据...随着技术的发展,诸如RESTful API、gRPC等新方式不断涌现,但了解基础的Web服务原理和Axis工具的使用,对于理解现代API架构仍然非常有价值。

    c#高级程序员面试题(附部分参考答案).pdf,这是一份不错的文件

    七、WebService使用的协议及简述工作流程 * WebService使用SOAP协议封装后的消息 * 工作流程包括:加入Web应用、客户端调用WebService、服务端执行方法、返回结果 本文档总结了C#高级程序员面试题相关的知识点,...

    2022最新java面试题..对java面向对象得理解;面向对象得程序设计很接近于我们人类自然得思维,相对于面向过程得程序设计

    Struts工作原理简述: Struts框架的工作流程主要包括: 1. 初始化阶段:读取struts-config.xml、web.xml等配置文件。 2. 用户发起HTTP请求,通常以.do结尾。 3. 请求到达Servlet容器,如Tomcat,根据配置转发到...

    ASP.NET AJAX深入浅出

    ### AJAX简述 文章首先回顾了传统Web应用的工作方式,即用户请求一个页面,服务器响应整个页面,这种模式导致了较长的等待时间和较大的数据传输量。相比之下,AJAX(Asynchronous JavaScript and XML)应用则实现了...

    嵌入式Linux程序设计案例与实验教程-实例代码

    2.3.3 生产者-消费者模型简述22 2.3.4 缓冲区操作概述22 2.3.5 几个线程API23 实验2.3 Linux多线程使用实例——生产者-消费者协议24 2.4 进程创建以及进程间通信25 2.4.1 进程概述25 2.4.2 进程的相关...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第三部分

    2.3.3 生产者-消费者模型简述22 2.3.4 缓冲区操作概述22 2.3.5 几个线程API23 实验2.3 Linux多线程使用实例——生产者-消费者协议24 2.4 进程创建以及进程间通信25 2.4.1 进程概述25 2.4.2 进程的相关函数25 ...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第二部分

    2.3.3 生产者-消费者模型简述22 2.3.4 缓冲区操作概述22 2.3.5 几个线程API23 实验2.3 Linux多线程使用实例——生产者-消费者协议24 2.4 进程创建以及进程间通信25 2.4.1 进程概述25 2.4.2 进程的相关函数25 ...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第一部分

    2.3.3 生产者-消费者模型简述22 2.3.4 缓冲区操作概述22 2.3.5 几个线程API23 实验2.3 Linux多线程使用实例——生产者-消费者协议24 2.4 进程创建以及进程间通信25 2.4.1 进程概述25 2.4.2 进程的相关函数25 ...

    BlazeDS开发者指南

    - **WebService组件特定功能**:特别强调WebService组件的一些特殊功能。 - **异步调用处理**:介绍如何处理对服务的异步调用。 #### 八、Remoting服务 - **RemoteObject组件**:介绍RemoteObject组件及其用途。 -...

    ASP.NET AJAX概述

    - **ASP.NET 2.0 AJAX Extensions**:提供了序列化与反序列化的支持,允许客户端访问WebService方法,并且包含了ScriptManager、UpdatePanel等关键控件。 ##### 3.2 关键控件介绍 - **ScriptManager**:管理页面上...

    java面试必会200题.docx

    25. **请简述一下Ajax的原理及实现步骤** - Ajax(Asynchronous JavaScript and XML)是一种无需重新加载整个网页即可与服务器交换数据并更新部分网页的技术。 - 实现步骤: 1. 创建XMLHttpRequest对象。 2. 发送...

    最新Java面试宝典pdf版

    54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到...

    Java面试宝典-经典

    54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到...

    java面试题大全(2012版)

    54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到...

    Java面试宝典2012版

    54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到...

    java面试宝典2012

    54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 38 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 40 56、子线程循环10次,接着主线程循环100,接着又回到...

    net学习笔记及其他代码应用

    1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,...

Global site tag (gtag.js) - Google Analytics