hprose for java 教程_Hprose for Java 快速入门

使用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客户端(四)

视频教程(无语音):

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的问题是关于 Hprose for Java 服务器的吗?那么,让我来为你解答。Hprose是一种跨语言的RPC协议,提供了多种语言的实现方式,包括Java、PHP、Python、JavaScript等。在Java中,我们可以使用Hprose for Java来实现服务器端的开发。 要使用Hprose for Java,首先需要在项目中引入相应的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.github.hsiafan</groupId> <artifactId>hprose-java</artifactId> <version>3.0.8</version> </dependency> ``` 在使用Hprose for Java时,需要定义一个接口,并在接口上添加@HproseService注解,表示这是一个Hprose服务。接着,我们可以在接口中定义需要暴露给客户端调用的方法,方法的参数和返回值可以是任意类型。例如: ``` @HproseService public interface MyService { String sayHello(String name); } ``` 在实现类中,我们需要实现接口中定义的方法,并启动Hprose服务器,将实现类注册为服务提供者。例如: ``` public class MyServiceImpl implements MyService { @Override public String sayHello(String name) { return "Hello, " + name + "!"; } public static void main(String[] args) throws IOException { MyService service = new MyServiceImpl(); HproseTcpServer server = new HproseTcpServer("tcp://0.0.0.0:8080"); server.add(service, MyService.class); server.start(); } } ``` 以上代码创建了一个TCP协议的Hprose服务器,监听8080端口,将MyServiceImpl实例注册为服务提供者,并暴露了一个名为sayHello的方法。 客户端可以使用Hprose for Java提供的客户端类来调用服务端的方法。例如: ``` public class MyClient { public static void main(String[] args) throws IOException { HproseTcpClient client = new HproseTcpClient("tcp://localhost:8080"); MyService service = client.useService(MyService.class); String result = service.sayHello("world"); System.out.println(result); } } ``` 以上代码创建了一个TCP协议的Hprose客户端,连接到本地的8080端口,并调用了服务端的sayHello方法。 这就是Hprose for Java服务器端的基本使用方法。希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值