Welcome everyone

RMI & Web Service

java 汪明鑫 664浏览 0评论

RMI

RMI(remote method invocation)  , 可以认为是RPC的java版本
RMI使用的是JRMP(Java Remote Messageing Protocol), JRMP是专门为java定制的通信协议,所以踏实纯java的分布式解决方案

来一个简单的demo

 

定义一个接口

public interface ISayHello extends Remote {       //一定要继承Remote
    public String sayHello(String name) throws RemoteException;
 
}

实现这个接口

public class SayHelloImpl extends UnicastRemoteObject implements ISayHello{   //继承UnicastRemoteObject
 
    public SayHelloImpl() throws RemoteException {
 
    }
 
    public String sayHello(String name) throws RemoteException {
        return "hello " + name;
    }
}

把这个接口发布

public class HelloServer {
 
    public static void main(String[] args){
        try {
            ISayHello hello =new SayHelloImpl();
            LocateRegistry.createRegistry(8888);       //注册服务
 
            Naming.bind("rmi://localhost:8888/sayHello",hello);
 
            System.out.println("server start ...");
 
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            e.printStackTrace();
        }
    }
}

客户端调用

public class HelloClient {
    public static void main(String[] args){
        try {
            ISayHello hello =(ISayHello)Naming.lookup("rmi://localhost:8888/sayHello");   //代理对象
            System.out.println(hello);
            System.out.println(hello.sayHello(" xinye"));
 
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }  catch (NotBoundException e) {
            e.printStackTrace();
        }
    }
 
}

 

webService

 

协议层:tcp/ip
应用层: http协议
SOAP: http+xml
什么是webservice
webservice也可以叫xml web service webservice, 轻量级的独立的通讯技术
1. 基于web的服务:服务端提供的服务接口让客户端访问
2. 跨平台、跨语言的整合方案
为什么要使用webservice
跨语言调用的解决方案
什么时候要去使用webservice
电商平台,订单的物流状态。
 .net实现的webservice服务接口
webservice中的一些概念
WSDL(web service definition language  webservice 定义语言)
webservice服务需要通过wsdl文件来说明自己有什么服务可以对外调用。并且有哪些方法、方法里面有哪些参数
wsdl基于XML(可扩展标记语言)去定义的
1.  对应一个.wsdl的文件类型
2.  定义了webservice的服务器端和客户端应用进行交互的传递数据和响应数据格式和方式
3.  一个webservice对应唯一一个wsdl文档
SOAP(simple object access protocal简单对象访问协议)
http+xml
webservice通过http协议发送和接收请求时, 发送的内容(请求报文)和接收的内容(响应报文)都是采用xml格式进行封装
这些特定的HTTP消息头和XML内容格式就是SOAP协议
1. 一种简单、基于HTTP和XML的协议
2. soap消息:请求和响应消息
3. http+xml报文
SEI(webservice endpoint interface webservice的终端接口)
webservice服务端用来处理请求的接口,也就是发布出去的接口。

一个简单的demo

定义接口

@WebService        //SE和SEI的实现类
public interface ISayHello {
 
    @WebMethod     //SEI中的方法
    public String sayHello(String name);
 
}

实现接口

@WebService
public class SayHelloImpl implements ISayHello {
    @Override
    public String sayHello(String name) {
        return "hello"+name;
    }
}

发布服务

public class BootStrap {
 
    public static  void main(String []args){
 
        Endpoint.publish("http://localhost:8889/hello",new SayHelloImpl());
 
        System.out.println("publish success ...");
    }
 
}

访问http://localhost:8889/hello?wsdl

服务说明文档

 

创建一个新的工程作为客户端

在当前工程文件路径打开命令终端

在此文件夹窗口内空白区域右键单击(需要同时按住Shift),从菜单中选择"在此处打开命令行窗口";

用jdk提供的命令wsimport  生成客户端代码

删除不需要的文件

最后客户端文件剩下这些

 

客户端调用服务

public class ClientMian {
    public static void main(String[] args){
        SayHelloImplService service =new SayHelloImplService();
        SayHelloImpl hello=service.getSayHelloImplPort();
        System.out.println(hello.sayHello(" xinyeshuaiqi"));
    }
}

 

转载请注明:汪明鑫的个人博客 » RMI & Web Service

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz