使用Hprose制作一个简单的分布式应用程序只需要几分钟的时间,您先要创建服务器端应用程序,然后创建客户端应用程序,最后您就可以将它们运行起来了。本章将用一个简单但完整的实例来带您快速浏览使用Hprose for Java进行分布式程序开发的全过程。

创建Hprose的Hello服务器

我们以Netbeans作为开发环境为例,来介绍一下如何创建一个Hprose服务器,按照传统惯例,都是以Hello World为例来作为开始的,我们这里稍稍做一下改变,我们创建的服务器将发布一个sayHello方法,这样客户端就可以调用它来对任何事物说Hello啦。

首先启动Netbeans开发环境,打开菜单的“文件→新建项目”,选择“Java Web→Web应用程序”,然后选择下一步,将项目名称改为HelloServer,再点下一步,选择好服务器后,点完成。

下面我们该把Hprose.jar放到该项目中来了。在Netbeans创建的HelloServer目录下,新建一个lib目录,然后将Hprose.jar复制到其中。

接下来在项目中,打开HelloServer下“库”的右键菜单,点击“添加JAR/文件夹...”,选择Hprose.jar,将其添加入库中。

之后在“源包”上打开右键菜单,选“新建→Java类...”,将类名改为Hello,包名任意,也可以不填写,只要跟后面配置HproseServlet时保持一致就可以啦。

Hello类的代码如下:

public class Hello {

public String sayHello(String name) {

return "Hello " + name + "!";

}

}

好了,下面我们只要再配置一下Servlet,就可以发布这个服务啦。配置方法如下:

打开“HelloServer→配置文件→web.xml”。

打开“Servlet”选单,点击“添加Servlet元素...”按钮,设置Servlet名称为HelloServlet,Servlet类为hprose.server.HproseServlet,URL模式为/Hello。

在初始化参数部分,点“添加(A)...”按钮,设置参数名为class,参数值为Hello,这里的Hello对应我们刚才创建的Hello类。如果您在创建Hello类时包含有包名,这里也应该写包含了包名的全名。这样我们的服务器端就创建好了,是不是相当的简单啊?

好了我们来看看效果吧,打开“HelloServer”的右键菜单,选择“运行”,之后您会看到浏览器窗口被打开,不过默认页面并不是我们的Servlet页面,没关系,我们直接在浏览器中更改一下URL,改为:

http://localhost:8084/HelloServer/Hello,然后回车,如果看到如下页面内容就表示我们的服务发布成功啦。

引用

Fa1{s8"sayhello"}z

接下来我们来看一下客户端如何创建吧。

创建Hprose的Hello客户端

客户端我们以Java控制台程序为例,开发环境仍然为Netbeans。

客户端可以通过invoke方法动态调用服务,也可以通过接口方式来调用,下面我们来分别介绍这两种方式。

通过invoke方法动态调用

首先我们先来看看如何使用invoke方法来动态调用服务。

在Netbeans中, 打开菜单的“文件→新建项目”,选择“Java→Java应用程序”。然后选择下一步,将项目名称改为HelloClient,并将主类名也改为HelloClient,然后点击完成即可。

下面我们该把HproseClient.jar放到该项目中来了。在Netbeans创建的HelloClient目录下,新建一个lib目录,然后将HproseClient.jar复制到其中。

接下来在项目中,打开HelloClient下“库”的右键菜单,点击“添加JAR/文件夹...”,选择HproseClient.jar,将其添加入库中。

接下来开始编写HelloClient类的代码:

import hprose.client.HproseHttpClient;

import java.io.IOException;

public class HelloClient {

public static void main(String[] args) throws IOException {

HproseHttpClient client = new HproseHttpClient();

client.useService("http://localhost:8084/HelloServer/Hello");

String result = (String) client.invoke("sayHello", new Object[] { "Hprose" });

System.out.println(result);

}

}

最后我们来运行一下看看结果吧,如果没有操作错误的话,您应该可以看到如下的输出结果:

引用

Hello Hprose!

通过invoke方法调用服务器方法很灵活,invoke方法具有多个重载,即使是对同一个服务器方法,您也可以通过指定不同的参数来获得不同类型的结果。后面我们会在详细介绍Hprose客户端时,再对invoke方法作更详细的介绍。

但是您也会发现,通过invoke调用不是那么的直观,参数需要自己写入数组,结果也需要自己转型,那么有没有方法可以向本地调用那样来进行远程调用呢?可以,那就是通过接口方式调用。

通过接口方式调用

我们用与上面同样的方式来创建项目HelloClient2,然后打开HelloClient2.java,编辑其代码如下:

import hprose.client.HproseHttpClient;

import java.io.IOException;

interface IHello {

String sayHello(String name);

}

public class HelloClient2 {

public static void main(String[] args) throws IOException {

HproseHttpClient client = new HproseHttpClient();

client.useService("http://localhost:8084/HelloServer/Hello");

IHello hello = (IHello) client.useService(IHello.class);

String result = hello.sayHello("Hprose");

System.out.println(result);

}

}

现在代码虽然多了,但是在调用时,却方便了不少。

如果您曾经用过RMI或者其它的远程调用工具的话,您可能会惊讶的发现,这里的IHello接口在服务器端并没有实现,只是有相同的方法,但在客户端仍然可以直接通过接口进行调用。Hprose就是这样灵活,您甚至可以定义不同于服务器实现的客户端接口,只要参数和结果类型是相容或者可以转换的类型,就可以正常的进行调用。所以在Hprose中,您不但可以通过接口方式来调用Java服务器提供的服务,同样可以调用非Java服务器提供的服务。

上文的图文并茂版本下载:

java样章.pdf

更多主题:

Hprose for Java类型映射

Hprose for Java 服务器(一)

Hprose for Java 服务器(二)

Hprose for Java 服务器(三)

Hprose for Java客户端(一)

Hprose for Java客户端(二)

Hprose for Java客户端(三)

Hprose for Java客户端(四)

视频教程(无语音):

hprose for java 教程_Hprose for Java 快速入门相关推荐

  1. hprose for java 教程_hprose for java源码分析-4

    4.1 疑窦丛生 书接上回.上回说到, 从HproseClient.java ------------------------- (#0) invokeHandler.handle()开始,将经历一个 ...

  2. 达内java作业_【达内JAVA教程】达内Java基础题

    原标题:[达内JAVA教程]达内Java基础题 [达内JAVA教程]达内Java基础题.的小编收集了四道JAVA基础题,下面快来跟随的小编来了解一下吧! 话说很多java程序员学过一段时间后,都应该找 ...

  3. java接口有非抽象方法_[Java教程]纳尼,java可以在接口中实现非抽象方法了?

    [Java教程]纳尼,java可以在接口中实现非抽象方法了? 0 2016-09-17 18:00:20 纳尼,接口中可以定义实例方法了?! 纳尼,接口中还可以定义静态方法了?! 没错,在Java8中 ...

  4. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  5. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  6. STL教程:C++ STL快速入门

    目录 1.STL引言 2.STL是什么(STL简介) 3.STL历史 4.STL组件 5.STL基本结构 6.STL 使用方法 7.STL目录 网址:STL教程:C++ STL快速入门(非常详细) 第 ...

  7. PR软件入门教程 Adobe Premiere Pro 快速入门指南

    原文(包含图片)链接:https://www.prjianji.com/1.html 了解如何开始使用面向电影制作人.电视节目制作人.新闻记者.学生和视频制作人员的非线性编辑软件 Premiere P ...

  8. java gprs通信教程_S7-1200 GPRS通讯快速入门

    文档类型 常问问题 文档编号 82843388, 文档发布日期 2013年10月30日 评估 S7-1200 GPRS通讯快速入门 推荐文档: 西门子工程师推荐本文档! 文档 涉及产品 安全性信息 为 ...

  9. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  10. java程序经过编译后会产生byte code_学习廖雪峰的JAVA教程---异常处理(Java的异常)...

    在计算机程序运行的过程中,总是会出现各种各样的错误. 有一些错误是用户造成的,比如,希望用户输入一个int类型的年龄,但是用户的输入是abc: // 假设用户输入了abc:String s = &qu ...

最新文章

  1. indows上的android开发环境软件架构5
  2. Linux(CentOs6.4)安装Git
  3. word图片自动换行不亮_知网查重时提交pdf检测结果竟然比Word高很多!
  4. Android人脸识别Demo竖屏YUV方向调整和图片保存
  5. linux_bash_shell_cheat_sheet(自译)
  6. 时隔一年,盘点CVPR 2019影响力最大的20篇论文
  7. caffe,caffe2 and pytorch
  8. rtt面向对象oopc——4.IO设备管理之父类调用子类方法
  9. Matplotlib作业2
  10. python,进程和线程
  11. atca背板_Xilinx公司展示ATCA背板10 Gbps串行信号传输
  12. 基于OpenCv的人脸识别(Python完整代码)
  13. C语言:输出乘法口诀表
  14. Q格式-TI的dsp的IQmath学习
  15. 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
  16. nmea-0183数据处理matlab,Matlab分析NMEA0183报文源代码(含高斯6度带投影计算)
  17. 微信中html5获取手机号,微信小程序用户授权获取手机号(getPhoneNumber)
  18. context 浅析
  19. 基于深度学习的无人驾驶道路检测
  20. linux系统安装--安装文件大于4G,fat32的硬盘或者优盘无法安装--解决方案

热门文章

  1. 10月SCI/SSCI/EI刊源更新,新增1区TOP,2022年仅剩不到三个月,还在观望吗?
  2. excel-自定义函数及使用
  3. 巧用 /etc/rc.local,开机时完成一些自动任务 - GNU/Linux,Windows的終結者 - KM大宝 - 和讯博客...
  4. 监控网站与接口宕机,并推送 App 消息提醒的程序
  5. pcr计算码率的过程
  6. 2021年法国经济发展研究报告
  7. win7系统声卡驱动安装失败怎么办--win7w.com
  8. linux断开网络的命令,Linux常用网络命令总结
  9. 数据结构—哈夫曼编码
  10. 饭客网络(基础教程)