`
xurichusheng
  • 浏览: 341647 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一个简单的hession实例

    博客分类:
  • java
阅读更多

 

由于本人刚开始接触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}]
 

 

 

  • 大小: 5 KB
分享到:
评论
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();
}

相关推荐

    Hessian实例下载

    总的来说,这个“Hessian实例”压缩包是一个宝贵的教育资源,可以帮助Java开发者快速上手Hessian协议,掌握远程调用的技巧,从而提升分布式系统开发的效率。通过实践和研究这两个示例文件,你将能更好地理解Hessian...

    hessian包及一个简单的使用实例

    这里我们提供了一个使用Hessian 4.0.37的简单实例,包括服务器端和客户端的创建。 #### 服务器端(Server) 首先,定义一个服务接口和其实现: ```java public interface HelloWorldService { String sayHello...

    flex中hessian实例

    总的来说,Flex中的Hessian实例涉及到了客户端与服务器之间的高效通信、ActionScript与Java的互操作、数据传输优化,以及图表组件的使用等多个方面,是Flex开发中的重要技能。深入理解和实践这些知识点,将有助于...

    Hessian 学习 例子 实例

    在IT行业中,Hessian是一种二进制序列化协议,它被广泛用于远程方法调用(RMI)和Web服务中,以提高数据传输效率。...在提供的链接中,博主otom31分享了一个具体的Hessian实例,可以作为学习和实践的起点。

    hessian实例 helloworld

    Hessian提供了一个Servlet基类,用于处理接收到的请求。Hessian的远程调用机制是通过动态代理实现的,这意味着服务接口应当被暴露,以便客户端可以调用。服务端的实现类则负责具体业务逻辑。 Hessian的工作流程大致...

    hessian简单实例

    - 使用Hessian库的`HessianProxyFactory`,传入服务器URL和服务接口,工厂会创建一个代理对象,这个对象的行为就像本地的对象一样,但实际上调用的是远程服务的方法。 - 调用这个代理对象的方法,Hessian会自动将...

    Hessian工程实例

    3. **Hessian客户端实现**:在客户端,我们需要创建一个HessianProxyFactory实例,通过指定服务的URL来获取服务代理对象。这样,就可以像操作本地对象一样调用远程服务的方法。在本实例中,客户端程序可能是名为...

    spring mvc hessian maven简单实例

    在"Spring MVC Hessian Maven简单实例"中,我们将探讨如何将这三个技术结合在一起,以实现一个远程服务调用的解决方案。 首先,我们需要创建一个Maven项目,配置pom.xml文件来管理Spring MVC、Hessian和其它相关...

    hessian使用小例子

    现在,让我们通过一个简单的Java示例来了解如何使用Hessian。在这个例子中,我们将创建一个服务器端服务并暴露一个方法,然后在客户端调用这个远程方法。 1. 首先,我们需要在服务器端定义一个服务接口和实现类。...

    hessian学习实例

    Hessian是一种轻量级的RPC(远程过程调用)协议,它由Caucho公司开发,主要用于实现...同时,这也是一个很好的起点,帮助你进一步探索如何优化Hessian服务的性能,或者与其他技术(如负载均衡、安全控制等)进行集成。

    flex-hessian-java实例.rar

    Flex-Hessian-Java实例是一个关于使用Flex客户端与Java服务器之间进行高效远程调用的实践案例。这个压缩包包含了实现这一技术所需的关键组件和文件。Flex是Adobe开发的一种开放源码的富互联网应用(RIA)开发框架,...

    Hessian学习入门实例

    这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...

    hessian 实例

    远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的...试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml文本)的优点。

    基于spring+hessian框架的webservice实例

    在这个实例中,我们学习了如何利用Spring的自动装配和Hessian的高效通讯能力,实现了一个简单的Web Service。这种方式适用于需要快速、轻量级交互的场景,特别适合于内部服务之间的通信,或者对性能有较高要求的应用...

    利用hessian进行系统通信实例教程

    这个实例教程对于新手来说,是一个很好的起点,能够帮助你快速理解和实践Hessian的基本用法。在实际项目中,你还可以根据需要对安全性、性能等方面进行优化,比如添加认证机制、调整序列化策略等。

    hessian 使用实例

    总结,Hessian是一个实用的RPC协议,尤其适用于Java环境中的轻量级服务通信。通过上述步骤,你可以快速地构建和使用Hessian服务,并且可以根据需求进行性能优化和安全配置。在实际开发中,结合WebTest这样的工具,...

    hessian入门实例,导入就可以直接运行

    在客户端,我们需要一个Hessian客户端代理来调用服务端的方法。这个代理对象会负责将Java方法调用转化为HTTP请求,发送到服务端,再将返回的结果反序列化回Java对象。在MyEclipse中,你可以使用Hessian的客户端库来...

    轻量级远程服务调用Hessian的入门实例和与Spring整合的实例.zip

    Hessian的入门实例主要展示了如何创建一个简单的服务提供者和消费者。首先,我们需要定义一个服务接口,例如`HelloService`,包含一个或多个方法,这些方法将被远程调用。然后,我们需要实现这个接口并部署为一个...

Global site tag (gtag.js) - Google Analytics