Hessian其实很像web service,只不过它的协议不是SOAP,而是它自己规定的binary协议。Hessian的server端提供一个servlet基类,client端获得一
个service接口(也就是stub)之后调用上面的方法,stub将方法调用marshal之后通过HTTP传到server,server借助reflection调用service方法。
实战开始,先到www.caucho.com上去下载一个Resin,在宝宝的网上也有(itbaby.jss.cn)
然后在itbaby.jss.cn上下载一个HessianCSharp的DLL文件,供C#使用
1.开始,在Resin解压后,我在WEB-INF中建立一个目录itbaby,然后按Resin的帮助在itbaby目录下写了两个类
PlusAPI和PlusService
PlusAPI的CODE如下:
package itbaby;
public interface PlusAPI
{
public String Plus2Str(int A,int B);
}
-------------------------------------------
PlusService的CODE如下:
package itbaby;
public class PlusService implements PlusAPI
{
public String Plus2Str(int A,int B)
{
int iSum = A + B;
String sSum = Integer.toString(iSum);
return sSum;
}
}
2.在WEB-INF目录下建了个web.xml文件(注意原来的Resin带的我都删除了)
内容如下:
<web-app xmlns="http://caucho.com/ns/resin">
<servlet servlet-name="plus" servlet-class="com.caucho.hessian.server.HessianServlet">
<init-param service-class="itbaby.PlusService"/>
<init-param api-class="itbaby.PlusAPI"/>
</servlet>
<servlet-mapping url-pattern="/itbabywebsvc/plus" servlet-name="plus"/>
</web-app>
3.写一个JSP的测试文件(test.jsp),看看两个类是否运行正常
<%@ page import="com.caucho.hessian.client.HessianProxyFactory" %>
<%@ page import="itbaby.PlusAPI" %>
<%
HessianProxyFactory factory = new HessianProxyFactory();
// http://localhost:8080/itbabywebsvc/plus
String url = ("http://" +
request.getServerName() + ":" + request.getServerPort() +
request.getContextPath() + "/itbabywebsvc/plus");
PlusAPI plus = (PlusAPI) factory.create(PlusAPI.class, url);
out.println("100 + 50 = " + plus.Plus2Str(100,50)+"<br>");
out.println("150 + 200 = " + plus.Plus2Str(150,200)+"<br>");
%>
运行结果输出:
100 + 50 = 150
150 + 200 = 350
表示两个类运行正常
4.开始写C#的客户端调用,启动VS.Net2003,新建一个Windows应用程序,当然你也可以使用ASP.NET,在默认的Form1上添加一个Button1的按钮.
然后添加一个引用HessianCSharp.DLL,(就是让你下载的那个DLL)
5.添加一个类文件,命名为:PlusAPI.cs,CODE如下:
using System;
namespace HsnTest
{
public interface PlusAPI
{
string Plus2Str(int A,int B);
}
}
在Button1的Click中添加如下CODE:
private void button1_Click(object sender, System.EventArgs e)
{
CHessianProxyFactory factory = new CHessianProxyFactory();
string url="http://localhost:8080/itbabywebsvc/plus";
PlusAPI test = (PlusAPI)factory.Create(typeof(PlusAPI), url);
string sValue = "5 + 10 =" + test.Plus2Str(5,10);
MessageBox.Show(sValue );
}
别忘了应用命名空间
using hessiancsharp.client;
好了,运行,看到如下结果
总结:我们可以考虑这样来使用JAVA的方法,Hessian还有 For PHP,Python,C++的类库,有兴趣的朋友可以在Caucho.com上多看看,多一句话,宝宝的网站就是用Resin,我使用Resin好多年了,小巧实用,大型的项目我也使用过,非常稳定
再一例子
1.Hello.java
package server;
public interface Hello {
String hello(String name);
}
2 HelloImpl.java
package server.impl;
import server.Hello;
public class HelloImpl implements Hello {
public String hello(String name) {
return "hello, " + name + "! Welcome to use Hessian.";
}
}
3.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>hessianService</servlet-name>
<servlet-class>
com.caucho.hessian.server.HessianServlet
</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>server.impl.HelloImpl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hessianService</servlet-name>
<url-pattern>/hessianService</url-pattern>
</servlet-mapping>
<!---另一配置方式
<servlet>
<!-- 配置Servlet名,后面根据该名完成远程服务映射 -->
<servlet-name>hessianService</servlet-name>
<!-- Hessian远程服务需要HessianServlet暴露 -->
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<!-- 使用init-param配置服务的实现类 -->
<init-param>
<param-name>home-class</param-name>
<param-value>
server.Hello
</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>server.impl.HelloImp</param-value>
</init-param>
<!-- 随应用启动而启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
......
<!-- 映射Servlet的url,该Servlet的url就是Hessian服务名 -->
<servlet-mapping>
<servlet-name>hessianService</servlet-name>
<url-pattern>/hessianService</url-pattern>
</servlet-mapping>
---->
</web-app>
4。远程调用RometoTest.java
package client;
import java.net.MalformedURLException;
import server.Hello;
import com.caucho.hessian.client.HessianProxyFactory;
public class RomoteTest {
public static void main(String[] args) {
String url = "http://localhost:8080/hessianService";
HessianProxyFactory factory = new HessianProxyFactory();
try {
Hello hello = (Hello) factory.create(Hello.class, url);
System.out.println(hello.hello("kingtoon"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
本案例主要关注的是"C#调用JAVA"的实现,即如何让C#客户端能够与Java服务器进行交互。HessianTest是一个具体的示例,它展示了如何利用Hessian协议来完成这种通信。下面将详细介绍这个过程及其相关知识点。 Hessian...
一个简单的例子学习hessian服务:服务端为Java,客户端为C#。 先要准备好C#和Java的第三方类库:http://hessian.caucho.com/ Hssiancharp.dll hessian-4.0.37.jar Hessian服务端(java) 打开eclipse...
至于"List"和"Map",它们在Hessian中也有特别的处理方式。Hessian可以序列化和反序列化List和Map类型的集合,无论是基本类型还是自定义对象的集合。在Java端,`List`和`Map`会被转换成Hessian的特定格式,而在C#端,...
描述中提到的“.Net使用Hessian调用JAVA的函数”,意味着这个压缩包可能包含了C#代码,这些代码实现了通过Hessian协议调用Java服务端的方法。这通常涉及到序列化和反序列化对象,以及处理跨语言的接口调用。 在标签...
4. **集成Hessian库**:在C#项目中,需要引入Hessian的.NET实现库,如`HessianSharp`或`Hessian.NET`,这些库提供了对Hessian协议的支持,使得C#客户端可以调用Java服务。 5. **服务调用过程**: - 客户端(C#)...
Hessian的设计目标是为了提供高效、简单的远程调用方式,使得客户端能够像调用本地方法一样调用远程服务。 **独立使用Hessian** 在不依赖任何框架的情况下,使用Hessian的步骤如下: 1. **添加依赖**:首先,...
在Java中,Hessian服务端通常由一个实现了特定接口的类构成,这个接口定义了可供客户端调用的方法。服务端通过Servlet容器(如Tomcat)部署,使用HessianServlet来处理HTTP请求。HessianServlet将接收到的二进制数据...
4. **跨语言支持**:虽然最初是为Java设计的,但Hessian也有其他语言的实现,比如Python、C++、C#等,因此可以在多种语言之间进行通信。 在【描述】中提到的博客链接,可能详细介绍了如何使用Hessian进行客户端和...
* 跨语言支持:Hessian支持多种编程语言,例如Java、Python、C#等。 * 可扩展性:Hessian具有高可扩展性,易于集成到现有的应用程序中。 五、Hessian的应用场景 Hessian可以应用于以下场景: * 远程过程调用(RPC...
总的来说,Hessian-4.0.7.jar和Hessiancsharp.dll是构建Java和C#之间高效、轻量级远程服务调用的关键组件,它们简化了跨语言通信的复杂性,提升了网络通信的性能。掌握好Hessian的使用,能为我们的分布式系统设计...
【标题】:“Spring + Hessian + Maven 整合”是一个基于Java的分布式服务开发实践,它结合了Spring框架的强大功能,Hessian的轻量级RPC(远程过程调用)协议,以及Maven作为项目构建和依赖管理工具。这个压缩包包含...
5. **跨语言支持**:尽管Hessian最初是为Java设计的,但它也有C++, C#, Python等其他语言的实现,支持跨平台通信。 ### Hessian的工作原理: Hessian服务通常由两部分组成:服务端(Server)和客户端(Client)。...
Hessian协议支持多种编程语言,如Java、C、C++、C#、.NET、Flash、PHP等,并提供相应的API支持包,便于开发者集成到各自的应用环境中。Hessian协议的特点包括:无需额外模式或接口定义的可序列化类型、自描述性、...
在C#中,开发者可以使用Hessian库来创建客户端和服务端,实现快速、轻量级的服务调用。 在移动开发中,Hessian可以用来: 1. **服务端接口暴露**:开发者可以将服务端业务逻辑封装成Hessian服务,然后在移动客户端...
Hessian是一种轻量级的RPC(远程过程调用)协议,它主要用于分布式系统中的服务调用,使得客户端能够像调用本地方法一样调用远程服务器上的服务。在IT行业中,Hessian因其简单、高效和跨语言特性而被广泛应用。本文...
Memcached的客户端库支持多种编程语言,如PHP、C#和Java。对于Java开发者,有两个常用的客户端库: 1. **java_memcached-release_2.6.3** - 依赖的JAR包:`commons-pool-1.5.6.jar`, `java_memcached-release_...