- 浏览: 345060 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (169)
- spring (20)
- java (44)
- ibatis (0)
- hibernate (6)
- struts (2)
- javascript (6)
- ajax (1)
- eclipse (4)
- 其他 (10)
- database (17)
- ibatis 分页 (7)
- xml (2)
- pl/sql (6)
- sql (4)
- apache (3)
- oracle (8)
- jdom (1)
- Open ModelSphere (1)
- 线程 (2)
- 多线程 (2)
- 查找文件 (1)
- Comparator (2)
- jxl (2)
- jquery (1)
- Flex (2)
- 非技术 (1)
- mysql (2)
- zxing (1)
- jdbc (1)
- Java内存 (1)
- editplus (1)
- log4j (1)
- sqlserver (2)
- base64 (1)
- Linux (4)
- Shell (2)
- 非技术共享 (1)
- 省市 (1)
- PowerDesigner (3)
- 观察者模式 (2)
- Servlet (1)
- 单点登录 (1)
- IO (1)
- tomcat (1)
- clob (1)
- html (1)
- jsp (2)
- JNative (1)
- WebService (2)
- Highcharts (1)
- Spring Security (1)
- ztree (1)
- Mongodb (3)
- sftp (1)
- SVN (1)
- openSUSE (1)
- Ubuntu (1)
- nio (1)
- springboot (1)
- java8 (1)
最新评论
-
wajjj:
[flash=200,200][url][img][list] ...
【JAVA】读取excel内容(兼容03和07格式) -
xurichusheng:
jjhe369 写道感谢分享!但是发现一个小问题,就是第13, ...
oracle 存储过程分页查询 -
jjhe369:
感谢分享!但是发现一个小问题,就是第13,14行的V_STAR ...
oracle 存储过程分页查询 -
飞天奔月:
为什么不用 Map<String, String> ...
读取.properties的内容,并将内容放入一个Map中 -
xurichusheng:
814687491 写道测试了一下,无法换行!你可以自定义自己 ...
使用google的zxing制作二维码
由于本人刚开始接触hession,还未深入的了解hession,所以一下的代码没有注释。
使用工具 : eclipse 3.3 tomcat 6.0.21 JDK 1.6
jar包:hessian-4.0.7.jar(见附件)
1、在 eclipse 中新建一个 Dynamic Web Project,名为 hession
2、在src下建包:com.hession
3、创建的代码如下:
package com.hession; import java.io.Serializable; public class Car implements Serializable { /** * */ private static final long serialVersionUID = -8470305814077115888L; private String color; private String length; private String name; public String toString(){ StringBuffer buf = new StringBuffer(); buf.append("[Car:{name=").append(getName()); buf.append(",color=").append(getColor()); buf.append(",length=").append(getLength()); buf.append("}]"); return buf.toString(); } //这里省略 setter()/getter() }
接口:
package com.hession; public interface IBasic { public String hello(); public Car getCar(); }
接口的实现类
package com.hession; public class BasicService implements IBasic { private String hello = "hello,world!"; @Override public Car getCar() { Car car = new Car(); car.setColor("RED红色"); car.setLength("2400"); car.setName("HAHACHE"); return car; } @Override public String hello() { return hello; } }
测试:
package com.hession; import java.net.MalformedURLException; import com.caucho.hessian.client.HessianProxyFactory; public class BasicClient { /** * @param args */ public static void main(String[] args) { String url = "http://localhost:8080/hession/hello"; HessianProxyFactory f = new HessianProxyFactory(); try { IBasic basic = (IBasic)f.create(IBasic.class, url); Car car = basic.getCar(); System.out.println("hello:"+basic.hello()); System.out.println(car); } catch (MalformedURLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
f.create(IBasic.class, url)中,第一个参数必须是接口,不能是实现类。
url 中的端口号以自己 tomcat 中配置的端口号为准。
web.xml
<servlet> <servlet-name>hello</servlet-name> <servlet-class> com.caucho.hessian.server.HessianServlet </servlet-class> <init-param> <param-name>home-class</param-name> <param-value>com.hession.BasicService</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>com.hession.IBasic</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
4、测试步骤
如果此时直接运行 BasicClient 类中的main方法,将会出现以下的异常:
com.caucho.hessian.client.HessianRuntimeException: java.net.ConnectException: Connection refused: connect at com.caucho.hessian.client.HessianProxy.sendRequest(HessianProxy.java:268) at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:170) at $Proxy0.getCar(Unknown Source) at com.hession.BasicClient.main(BasicClient.java:17) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at sun.net.NetworkClient.doConnect(NetworkClient.java:163) at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) at sun.net.www.http.HttpClient.<init>(HttpClient.java:233) at sun.net.www.http.HttpClient.New(HttpClient.java:306) at sun.net.www.http.HttpClient.New(HttpClient.java:323) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:904) at com.caucho.hessian.client.HessianURLConnection.getOutputStream(HessianURLConnection.java:94) at com.caucho.hessian.client.HessianProxy.sendRequest(HessianProxy.java:266) ... 3 more
原因是我们还没有启动 tomcat server。
4.1 将工程 hession 添加到 eclipse 中的 tomcat server(见附件中的图片 1.bmp)
4.2 启动 tomcat server
4.3 运行 BasicClient 类中的main方法
运行成功,运行结果如下:
hello:hello,world! [Car:{name=HAHACHE,color=RED红色,length=2400}]
评论
1 楼
xurichusheng
2011-11-03
IBasic basic = (IBasic)f.create(IBasic.class, url);
Car car = basic.getCar();
System.out.println("hello:"+basic.hello());
为什么我们这里 create 的是 接口 IBasic,但是运行结果说明是调用实现类BasicService呢?
通过查看 com.caucho.hessian.server.HessianServlet 中的init(ServletConfig config)源码,我们发现:
1、首先取得web.xml中配置的home-class和home-api所对应的类、接口
if(getInitParameter("home-class") != null)
{
String className = getInitParameter("home-class");
Class homeClass = loadClass(className);
_homeImpl = homeClass.newInstance();
init(_homeImpl);
}
if(getInitParameter("home-api") != null)
{
String className = getInitParameter("home-api");
_homeAPI = loadClass(className);
}
2、将实现类和接口的对应关系作映射
if(_homeImpl != null)
{
_homeAPI = findRemoteAPI(_homeImpl.getClass());
if(_homeAPI == null)
_homeAPI = _homeImpl.getClass();
}
Car car = basic.getCar();
System.out.println("hello:"+basic.hello());
为什么我们这里 create 的是 接口 IBasic,但是运行结果说明是调用实现类BasicService呢?
通过查看 com.caucho.hessian.server.HessianServlet 中的init(ServletConfig config)源码,我们发现:
1、首先取得web.xml中配置的home-class和home-api所对应的类、接口
if(getInitParameter("home-class") != null)
{
String className = getInitParameter("home-class");
Class homeClass = loadClass(className);
_homeImpl = homeClass.newInstance();
init(_homeImpl);
}
if(getInitParameter("home-api") != null)
{
String className = getInitParameter("home-api");
_homeAPI = loadClass(className);
}
2、将实现类和接口的对应关系作映射
if(_homeImpl != null)
{
_homeAPI = findRemoteAPI(_homeImpl.getClass());
if(_homeAPI == null)
_homeAPI = _homeImpl.getClass();
}
发表评论
-
mysql树
2019-09-26 08:39 413mysql树 -
【JAVA】组织树
2019-09-04 10:17 1047JDK 版本:jdk 1.8 及以上。 1. ... -
多线程多批量插入大数据
2018-10-31 11:19 6407参考 https://blog.csdn.ne ... -
java 7 nio逐行读取文件内容
2015-12-26 23:33 5458nio逐行读取文件内容,使用 java 7. 首先,获取 ... -
java 6 IO读取txt文件内容
2015-12-26 23:24 876逐行读取。 首先获取文件的编码格式; 读取文件内容。 ... -
【JAVA】读取excel内容(兼容03和07格式)
2015-12-21 13:51 2181jar 包: poi-3.13.j ... -
一行代码去除List中的重复数据
2015-12-02 10:52 16711. 核心代码: List<String> ... -
将List中的对象中的字段的重复值删除
2015-12-01 11:10 2704如下面的对象 Subs,如果其属性 startSt 和 e ... -
jdk 官方下载地址
2015-11-06 10:00 1861http://www.oracle.com/techn ... -
jsp页面显示二进制图片
2014-11-05 15:58 40801. DAO层 import java.sql.C ... -
java中使用JNative调用dll方法
2014-03-03 16:02 5330使用JNative调用dll方法, dll 文件名 ... -
Vector排序
2013-05-08 10:17 15351. Vector 默认按元素的添加顺序排序 im ... -
使用观察者模式监听Map值的改变
2013-05-02 16:46 6197观察者(Observer)角色:为所有的具体观察者定 ... -
【转】一个比较快的Base64 编码/解码 算法
2013-03-28 17:50 1725转自: 中国开源社区 最快的 Base64 编码/解 ... -
jdbc 数据库连接池
2012-12-04 16:09 1513注:有些java类是JDK ... -
将查询结果导入excel 中
2012-06-29 11:14 12101. 数据库:oracle 10g2 JDK: ... -
使用Comparator做对象的排序
2012-06-15 18:15 1334之前在面试的时候,人家老是问怎么对对象进行排序。 虽然 ... -
【转】 模拟银行业务调度系统
2012-06-13 15:39 1204转自:CSDN,itm_hadf ... -
HttpClient 代理实例(Get方式) 线程
2012-01-10 14:23 1550使用的jar包: commons-codec-1.4.jar ... -
httpclient资料(自用)
2012-01-10 07:07 1076httpclient资料
相关推荐
总的来说,这个“Hessian实例”压缩包是一个宝贵的教育资源,可以帮助Java开发者快速上手Hessian协议,掌握远程调用的技巧,从而提升分布式系统开发的效率。通过实践和研究这两个示例文件,你将能更好地理解Hessian...
这里我们提供了一个使用Hessian 4.0.37的简单实例,包括服务器端和客户端的创建。 #### 服务器端(Server) 首先,定义一个服务接口和其实现: ```java public interface HelloWorldService { String sayHello...
总的来说,Flex中的Hessian实例涉及到了客户端与服务器之间的高效通信、ActionScript与Java的互操作、数据传输优化,以及图表组件的使用等多个方面,是Flex开发中的重要技能。深入理解和实践这些知识点,将有助于...
在IT行业中,Hessian是一种二进制序列化协议,它被广泛用于远程方法调用(RMI)和Web服务中,以提高数据传输效率。...在提供的链接中,博主otom31分享了一个具体的Hessian实例,可以作为学习和实践的起点。
Hessian提供了一个Servlet基类,用于处理接收到的请求。Hessian的远程调用机制是通过动态代理实现的,这意味着服务接口应当被暴露,以便客户端可以调用。服务端的实现类则负责具体业务逻辑。 Hessian的工作流程大致...
- 使用Hessian库的`HessianProxyFactory`,传入服务器URL和服务接口,工厂会创建一个代理对象,这个对象的行为就像本地的对象一样,但实际上调用的是远程服务的方法。 - 调用这个代理对象的方法,Hessian会自动将...
3. **Hessian客户端实现**:在客户端,我们需要创建一个HessianProxyFactory实例,通过指定服务的URL来获取服务代理对象。这样,就可以像操作本地对象一样调用远程服务的方法。在本实例中,客户端程序可能是名为...
在"Spring MVC Hessian Maven简单实例"中,我们将探讨如何将这三个技术结合在一起,以实现一个远程服务调用的解决方案。 首先,我们需要创建一个Maven项目,配置pom.xml文件来管理Spring MVC、Hessian和其它相关...
现在,让我们通过一个简单的Java示例来了解如何使用Hessian。在这个例子中,我们将创建一个服务器端服务并暴露一个方法,然后在客户端调用这个远程方法。 1. 首先,我们需要在服务器端定义一个服务接口和实现类。...
Hessian是一种轻量级的RPC(远程过程调用)协议,它由Caucho公司开发,主要用于实现...同时,这也是一个很好的起点,帮助你进一步探索如何优化Hessian服务的性能,或者与其他技术(如负载均衡、安全控制等)进行集成。
Flex-Hessian-Java实例是一个关于使用Flex客户端与Java服务器之间进行高效远程调用的实践案例。这个压缩包包含了实现这一技术所需的关键组件和文件。Flex是Adobe开发的一种开放源码的富互联网应用(RIA)开发框架,...
这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...
远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的...试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml文本)的优点。
在这个实例中,我们学习了如何利用Spring的自动装配和Hessian的高效通讯能力,实现了一个简单的Web Service。这种方式适用于需要快速、轻量级交互的场景,特别适合于内部服务之间的通信,或者对性能有较高要求的应用...
总结,Hessian是一个实用的RPC协议,尤其适用于Java环境中的轻量级服务通信。通过上述步骤,你可以快速地构建和使用Hessian服务,并且可以根据需求进行性能优化和安全配置。在实际开发中,结合WebTest这样的工具,...
这个实例教程对于新手来说,是一个很好的起点,能够帮助你快速理解和实践Hessian的基本用法。在实际项目中,你还可以根据需要对安全性、性能等方面进行优化,比如添加认证机制、调整序列化策略等。
在客户端,我们需要一个Hessian客户端代理来调用服务端的方法。这个代理对象会负责将Java方法调用转化为HTTP请求,发送到服务端,再将返回的结果反序列化回Java对象。在MyEclipse中,你可以使用Hessian的客户端库来...
Hessian的入门实例主要展示了如何创建一个简单的服务提供者和消费者。首先,我们需要定义一个服务接口,例如`HelloService`,包含一个或多个方法,这些方法将被远程调用。然后,我们需要实现这个接口并部署为一个...