web services的基本原理

来源:互联网 发布:cad建筑制图软件 编辑:程序博客网 时间:2024/05/18 01:13

web services:完全正确的写法是services这个最后面是有个s的,是复数

不同进程之间不能直接new了,jndi也是一样,如果你在main方法中直接去new InitContext是不行的,tomcat和main他们在不同的jvm里存根:这是个非常典型的代理模式,代理了远端服务的对象.分布式通信就是存根和骨架的通信.

分布式通信的原理:

目前主流的分布式技术:

CORBA,EJB,DCOM,web services,rest等
web services主要应用于异构系统的整合,慢,因为基于http传大文本,走soap协议
CORBA体系技术也可以用于异构系统,快,传二进制.但是编程复杂,属于重量级的.
web services属于一种技术体系,就如j2ee一样.

Web Services特征
a) 通过标准的soap通信,一般走http协议
b) 能跨平台调用
c) 通信格式是xml(文本),而不是二进制(EJB,CORBA)


常见几个概念:

wsdl属于一种中立的语言.
uddi可以理解成jndi,发现和整合服务,描述的东西要注册,注册之后才能找到嘛,向他找wsdl,现在一般不用了,一般只拿到wsdl就可以了.

soap:SOAP(简单对象访问协议http+xml)
axis属于一个webservices引擎,当你访问服务时,他可以生成wsdl

EAI(企业应用集成),SOA(面向服务的架构)、IDL(接口定义语言)


web services的实现方式有好多种的,如下就是一种原理:


如下也是一种:






用Axis来做web services的引擎的步骤:

一:将axis-bin-1_4.zip文件解压,将webapps/axis考贝到tomcat中的TOMCAT-HOME/webapps下 
二:
在TOMCAT-HOME/webapps/axis下创建MyMath.jws文件,内容如下:

public class MyMath {

  public int squared(int x) {

  int result = x * x;

  System.out.println("the squared of " + x + " is" + result);

  return result;

  }

启动Tomcat,访问如下http://localhost:8080/axis/MyMath.jws,如果可以正常访问Web Service部署成功!!

三:
在Eclipse中建立java项目,引入Axis中的所有的包
建立MyMathClient.java文件,编写调用web service的客户端代码: 

public class MyMathClient {

   //有了url就可以通过soap协议得到这个以wsdl格式的数据

   private static final String endPoint ="http://localhost:8080/axis/MyMath.jws?wsdl";

   

    public static void main(Stringargs[]){

        Service service = new Service();

        try {

            Call call = (Call)service.createCall();

            call.setTargetEndpointAddress(new URL(endPoint));

            Integer result=(Integer)call.invoke("squared", newObject[]{10});

            System.out.println(result);

} catch (ServiceException e) {

            e.printStackTrace();

        } catch (MalformedURLException e) {

            e.printStackTrace();

        }catch(RemoteException e){

            e.printStackTrace();

        }

    }

}