基于RMI技术的远程词典应用.docx

上传人:wj 文档编号:1863175 上传时间:2023-05-01 格式:DOCX 页数:6 大小:34.25KB
下载 相关 举报
基于RMI技术的远程词典应用.docx_第1页
第1页 / 共6页
基于RMI技术的远程词典应用.docx_第2页
第2页 / 共6页
基于RMI技术的远程词典应用.docx_第3页
第3页 / 共6页
基于RMI技术的远程词典应用.docx_第4页
第4页 / 共6页
基于RMI技术的远程词典应用.docx_第5页
第5页 / 共6页
基于RMI技术的远程词典应用.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于RMI技术的远程词典应用.docx

《基于RMI技术的远程词典应用.docx》由会员分享,可在线阅读,更多相关《基于RMI技术的远程词典应用.docx(6页珍藏版)》请在冰点文库上搜索。

基于RMI技术的远程词典应用.docx

基于RMI技术的远程词典应用

1.情景描述

假设有一台应用服务器以RMI的方式向客户端提供英汉互译词典的服务,请尝试完成服务器端程序的编码和一个客户端应用,并分别部署到两台计算机上进行测试。

2.RMI简介

RMI(指远程方法调用)是RemoteMethodInvocation的简称,是一种远程方法调用机制,其过程对于最终用户是透明的。

RMI包含两种组件:

RMI服务器和RMI客户。

RMI有三层架构:

Stub/Skeleton层、远程引用层和传输层。

开发RMI需要以下步骤:

1)根据应用的需要定义远程接口;

2)定义和实现服务器类,其中要实现远程接口中声明的远程方法;

3)定义与实现客户类;

4)完成上述类文件的编程之后,编译源文件生成相应的类文件;5)生成Stub和Skeleton;

6)创建安全策略;

7)启动RMI远程注册表;

8)启动服务器;

9)启动客户,完成应用。

3.基于RMI技术的远程词典应用的实现

在实现基于RMI技术的远程词典应用的过程中,主要实现了三部分:

定义的远程接口,实现远程接口以及服务器端应用服务实现,应用客户端的图形实现。

(1)远程接口的实现

在远程接口的类中,声明了一个返回字符串的translator方法。

实现的代码如下:

packagetranslatorInterface;

importjava.rmi.Remote;

importjava.rmi.RemoteException;

/**

*@author苑仁群

*@since2012.6.4

*/

publicinterfaceTranslatorInextendsRemote{

/**

*

*@paramword输入待查询的单词

*@return返回所查单词的结果

*@throwsRemoteException

*/

publicStringtranslator(Stringword)throwsRemoteException;

}

(2)应用服务端实现

在应用服务端实现了定义的远程接口,并且进行了服务端端口的注册,以及通信路径的

注册。

实现定义的远程接口的代码如下:

packageserver;

importjava.rmi.RemoteException;

importjava.rmi.server.UnicastRemoteObject;importjava.util.HashMap;

importjava.util.Map;

importtranslatorInterface.TranslatorIn;

/**

*

*@author苑仁群

*@since2012.6.4

*/

publicclassTranslatorImextendsUnicastRemoteObjectimplementsTranslatorIn{

privatestaticfinallongserialVersionUID=1L;

privateMapdic=newHashMap();

protectedTranslatorIm()throwsRemoteException{super();

dic.put("distribution","n.分布;分配");dic.put("system","n.系统;方法;制度,体制");

}

@Override

publicStringtranslator(Stringword){

Stringresult=null;result=dic.get(word);if(result==null||result.equals(""))

result="抱歉,您查找的单词不存在";returnresult;

}

}

进行服务端口注册以及通信路径注册的代码如下:

packageserver;

import.MalformedURLException;importjava.rmi.AlreadyBoundException;importjava.rmi.Naming;

importjava.rmi.RemoteException;importjava.rmi.registry.LocateRegistry;importtranslatorInterface.TranslatorIn;

/**

*

*@author苑仁群

*

*/

publicclassServer{

public static void main(String arg[]) throws MalformedURLException,AlreadyBoundException{

try{

TranslatorIndicServer=newTranslatorIm();LocateRegistry.createRegistry(10002);//注册通信端口Naming.bind("rmi:

//127.0.0.1:

10002/dicServer",dicServer);//注册通信路径

}catch(RemoteExceptione){e.printStackTrace();

}

}

}

(3)客户端应用的实现

客户端实现的代码中,其核心方法主要为查找通信路径的Naming.lookup()方法,其代码如下:

packageclient;

importjava.awt.BorderLayout;

importjava.awt.EventQueue;

importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.rmi.Naming;

importjavax.swing.BoxLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextField;importjavax.swing.JTextArea;importjavax.swing.JLabel;

importtranslatorInterface.TranslatorIn;

/**

*

*@author苑仁群

*@since2012.6.4

*/

publicclassDicClient{

privateJFrameframe;privateJTextFieldword;

privateTranslatorIntranslatorIntf;privateJTextAreafindResult;privateJPanelpanel_1;

privateJLabellblNewLabel;privateJLabellblNewLabel_1;

publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){

publicvoidrun(){try{

DicClientdicClient=newDicClient();dicClient.frame.setVisible(true);

}catch(Exceptione){e.printStackTrace();

}

}

});

}

publicDicClient(){initialize();try{

translatorIntf=(TranslatorIn)Naming.lookup("rmi:

//127.0.0.1:

10002/dicServer");

}catch(Exceptione){

findResult.setText("暂时无法连接到服务器,服务器可能没有运行!

");

}

}

/**

*窗口的初始化

*/

privatevoidinitialize(){

frame=newJFrame();

frame.setTitle("欢迎使用词典客户端^_^");frame.setBounds(100,100,300,300);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanelpanel=newJPanel();frame.getContentPane().add(panel,BorderLayout.NORTH);panel.setLayout(newBoxLayout(panel,BoxLayout.X_AXIS));lblNewLabel_1=newJLabel("请输入单词:

");panel.add(lblNewLabel_1);

word=newJTextField();panel.add(word);word.setColumns(8);

JButtonbtnTrans=newJButton("查询");btnTrans.addMouseListener(newMouseAdapter(){

@Override

publicvoidmouseClicked(MouseEventarg0){Stringkeywords=word.getText();

try{

if(keywords.trim().isEmpty()||keywords.trim().equals("")

||keywords.trim()==null)findResult.setText("输入的单词不能为空");

else{

Stringmeaning=translatorIntf.translator(keywords);findResult.setText(meaning);

}

}catch(Exceptione){translatorIntf=null;

findResult.setText("暂时无法连接到服务器,服务器可能没有运行!

");

}

}

});

panel.add(btnTrans);panel_1=newJPanel();

frame.getContentPane().add(panel_1,BorderLayout.CENTER);panel_1.setLayout(newBorderLayout(0,0));

lblNewLabel=newJLabel("查询结果:

");panel_1.add(lblNewLabel,BorderLayout.NORTH);findResult=newJTextArea();findResult.setEditable(false);panel_1.add(findResult,BorderLayout.CENTER);

}

}

4.运行界面

1.没有启动服务端时,客户端的运行界面如下:

2.启动服务器后,客户端的运行界面如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2