学习使用Hessian协议远程调用
学习背景:
用到hessian是一年前的一个项目,需求需要有个客户端和服务器端,客户端是安装于客户机器上,然而,客户端还得调用服
务器端的方法,第一次念头是使用Ajax跨域调用。
可惜,原来使用ajax不跨域调用方法传参参数长度有限制(大约估计3000多就最大值了),查官网,Google都没结果,果断放弃。
又想到webService调用,但是Google很多人推荐使用Hessian,稳定、效率快,通过前面的2篇文章,已经对hessian有了初步的了解,
下面开始实现demo
开始建立Demo_1
1. 在服务端和客户端都导入jar包,我使用的是hessian-4.0.37.jar。
注意:在看别人的学习笔记的时候,很多人都说jar版本不同引起的问题很多,比如:方法没找着等、自己注意这个jar问题
2. 在服务端搭建
2.1 首先你得建立一个接口,IHessianService.java
public interface IHessianService{
public String hello(User user);
}
2.2 实现刚刚建立接口的实现类 HessianServiceImpl.java
public class HessianServiceImpl implements IHessianService{
public String hello(User user) {
/** 业务逻辑处理 */
}
}
2.3 User实体表
public classUser implements java.io.Serializable {
//<span style="font-size:14px;BACKGROUND-COLOR: #f0f0f0">如果在远程调用时,用到了自定义的实体,必须序列化</span>
private static final long serialVersionUID = 1L; //<span style="font-size:14px;">必须加上</span>
private String id ;
/** default constructor */
public User () { //<span style="font-size:14px;">空的构造器也必须加上</span>
}
// Property accessors
public String getId() {
returnthis.id;
}
public void setId(String id) {
this.id = id;
}
}
2.4 上面都把调用后的程序接口和实现类都写完,那么下面该配置web.xml文件.在原有的Web.xml文件中添加下面代码
<!-- 使用Hessian远程访问:配置拦截 -->
<servlet>
<servlet-name>synchLocalhost</servlet-name> //自定义名称
<servlet-class>com.caucho.hessian.server.HessianServlet </servlet-class> //这个是调用jar里面的Hessian拦截器,不需要更改
<init-param>
<param-name>home-class</param-name> //这个是Hessian拦截器后跳转的实现类标识符,不需要更改
<param-value>com.estone.www.aqjgws.synchronism.hessian.impl. HessianServiceImpl</param-value> //自定义Hessian的实现类的全路径
</init-param>
<init-param>
<param-name>home-api</param-name> //这个是Hessian拦截器后跳转的接口标识符,不需要更改
<param-value>com.estone.www.aqjgws.synchronism.hessian. IHessianService</param-value>//自定义Hessian的接口类的全路径
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
//servlet-name:与前面的一致
// url-pattern :访问入口名 客户端通过访问入口进入服务器中Hessian拦截器,拦截后跳转到自定义的实现类中方法处理
<servlet-name>synchLocalhost</servlet-name>
<url-pattern>/synchLocalhost</url-pattern>
</servlet-mapping>
到这,服务端相关配置就完成了。
3. 客户端配置
3.1 拷贝服务端的接口类和自定义使用的实体类(User.java)
注意:实体类的路径必须得和服务器中的路径一样,不然,会报实体找不着错误
3.2
/** ----------使用Hessian调取网络服务器中接口 --------- */
HessianProxyFactory factory = new HessianProxyFactory() ; //<span style="font-size:14px;">创建<span style="font-family:Calibri;">Hessian</span>代理对象</span>
<span style="font-size:12px;"> //服务器地址,<span style="BACKGROUND-COLOR: #f0f0f0"><span style="color:black;">aqjgws</span><span style="color:black;">是我测试的服务器项目名</span></span></span><p><span style="font-size:12px;"><span style="color:black;"> //synchLocalhost</span><span style="font-family:Calibri;"> </span><span style="color:black;">是服务器</span><span style="color:black;">Web.xml</span><span style="color:black;">文件中配置的</span><span style="color:black;">uerl</span><span style="color:black;">访问入口</span></span></p><p><span style="font-size:12px;"><span style="color:black;"> //通过创建了</span><span style="color:black;">Hessian</span><span style="color:black;">接口对象就可以使用接口对象调用该接口中的方法</span></span></p>
IHessianService synchronism = (IHessianService) factory.create (IHessianService.class, “http://192.168.0.99:8092/aqjgws/synchLocalhost”);
<span style="font-size:14px;"> </span>
String name = synchronism.hello(new User(“123456”));
到这里,Demo_1就完成了。
Demo_1有几个问题:
1. 没有和Spring配置上,也就是说不能使用Spring管理的Hibernate等对象操作
2. 只能跳转到一个Hessian的接口类中。
注意:
1. 在Hessian远程调用方法中,客户端中的接口类必须和服务器中的接口类一样,方法名称也一样
2. 在接口类中,不要写重构的方法,Hessian不能识别重构的方法。
3. 方法参数中,如果有自定义实体对象entity,则有以下几注意点:
a entity的package名必须同服务器上的package,否则会在服务端上报找不到此类
b entity必须是可序列化的,如果是组合对象,则可序列化应该可递归下去,除非不需要组合
4. 方法返回值中,如果有自定义对象,同2,如果是集合对象,则为List(lists and arrays) & map(maps and dictionaries)
5. Hessian 不支持文件传输,如需要文件传输,则传递数据流实现(下一文档说明)
相关推荐
spring aop hessian 基础demo 部署即可运行
hessian-demo工程示例,已集成内置jetty插件,可以直接运行。 spring4,hessian4.0.7
想学习Hessian的同志们,这个是一个简单的demo。比较简单,不过能够加深对Hessian的理解
hessian demo 包括服务端和客户端,绝对能用,包括了jar包
hessian demo 例子 教程 看我blog http://blog.csdn.net/zfrong/archive/2009/12/29/5099222.aspx http://blog.csdn.net/zfrong/archive/2009/12/27/5083943.aspx
Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用...
hessian 服务器 客户端 demo
dubbo-hessian协议http请求demo
hessian简单demo,server发布服务+client调用服务,包含源码和hessian的jar包
基于matlab使用 hessian 特征值增强 2D3D 图像中的血管脊状结构
NULL 博文链接:https://panpan-xin.iteye.com/blog/1012389
demo中实现了hessian的通讯,支持安卓的hessian的jar,实际项目中已经使用。
hessian php与java通讯demo源码
hessian资料3hessian资料3hessian资料3hessian资料3hessian资料3
android端使用hessian跟web服务器通讯,导入即可运行,有问题请在博客留言。http://blog.csdn.net/tan313/article/details/49536891
Hessian是一个关于二进制webService协议,用与保密核心代码。 需要伯乐来识别。
整合 Dubbo + SpringMvc 4.3.1 的服务器maven工程样例,使用注解方式定义服务及IOC装配,采用Hessian协议传输 三个工程,在 cnetAdmin 和 cnetBlu 中,要引用 cnetCommon 工程。
Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis 包含Hessian配置说明、服务器Server Demo、客户端Client Demo.
Hessian Binary Web Service Protocol远程接口调用入门Demo例子!
使用hessian进行web与android的通讯,相关jar包都有,导入运行即可。有问题博客留言。http://blog.csdn.net/tan313/article/details/49536891