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的引擎的步骤:
public class MyMath {
public int squared(int x) {
int result = x * x;
System.out.println("the squared of " + x + " is" + result);
return result;
}
}
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();
}
}
}