`
micheal19840929
  • 浏览: 163213 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hessian demo和hessian与spring整合demo

    博客分类:
  • J2EE
阅读更多

/**
* @version 1.1
* @author iam00@qq.com
* @create Mar 18, 2010
*/

  Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
  在进行基于Hessian的项目开发时,应当注意以下几点:
  ▲JAVA服务器端必须具备以下几点:
  •包含Hessian的jar包。
  •设计一个接口,用来给客户端调用。
  •实现该接口的功能。
  •配置web.xml,配好相应的servlet。
  •对象必须实现Serializable 接口。
  •对于复杂对像可以使用Map的方法传递。
  ▲客户端必须具备以下几点:
  •java客户端包含Hessian.jar的包。
  •具有和服务器端结构一样的接口。
•利用HessianProxyFactory调用远程接口。

下面是一个hessian的简单例子。

Java服务器端:

环境:j2sdk1.4.2、Tomcat6.0
依赖的包:hessian-3.1.6.jar

新建一个名为HessianServer的web project。将hessian-3.1.6.jar放入WEB-INF/lib文件夹中。

创建接口:

Java代码 复制代码
  1. package server.demo;   
  2.   
  3. public interface DemoApi {   
  4.     public void setName(String name);   
  5.     public String sayHello();   
  6.     public User getUser();   
  7. }  
package server.demo;

public interface DemoApi {
	public void setName(String name);
	public String sayHello();
	public User getUser();
}


实现接口:

Java代码 复制代码
  1. package server.demo;   
  2.   
  3. public class DemoService implements DemoApi {   
  4.     private String name;   
  5.   
  6.     public String sayHello() {   
  7.         return "Hello "+name;   
  8.     }   
  9.   
  10.     public void setName(String name) {   
  11.         this.name=name;   
  12.         System.out.println("Hello "+name);   
  13.     }   
  14.   
  15.     public User getUser() {   
  16.         return new User("lingling""pass");   
  17.     }   
  18.   
  19. }  
package server.demo;

public class DemoService implements DemoApi {
	private String name;

	public String sayHello() {
		return "Hello "+name;
	}

	public void setName(String name) {
		this.name=name;
		System.out.println("Hello "+name);
	}

	public User getUser() {
		return new User("lingling", "pass");
	}

}


创建User类,注意:一定要implements Serializable。

Java代码 复制代码
  1. package server.demo;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. public class User implements Serializable {   
  6.     String name = "kitty";   
  7.     String password = "nopass";   
  8.   
  9.     public User() {   
  10.         super();   
  11.     }   
  12.   
  13.     public User(String name, String password) {   
  14.         super();   
  15.         this.name = name;   
  16.         this.password = password;   
  17.     }   
  18.   
  19.     public String getName() {   
  20.         return name;   
  21.     }   
  22.   
  23.     public void setName(String name) {   
  24.         this.name = name;   
  25.     }   
  26.   
  27.     public String getPassword() {   
  28.         return password;   
  29.     }   
  30.   
  31.     public void setPassword(String password) {   
  32.         this.password = password;   
  33.     }   
  34.   
  35. }  
package server.demo;

import java.io.Serializable;

public class User implements Serializable {
	String name = "kitty";
	String password = "nopass";

	public User() {
		super();
	}

	public User(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}


配置web.xml:

Xml代码 复制代码
  1. <servlet>  
  2.     <servlet-name>first</servlet-name>  
  3.     <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>service-class</param-name>  
  6.         <param-value>server.demo.DemoService</param-value>  
  7.     </init-param>  
  8. </servlet>  
  9. <servlet-mapping>  
  10.     <servlet-name>first</servlet-name>  
  11.     <url-pattern>/helloworld</url-pattern>  
  12. </servlet-mapping>  
  <servlet>
  	<servlet-name>first</servlet-name>
  	<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
  	<init-param>
  		<param-name>service-class</param-name>
  		<param-value>server.demo.DemoService</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>first</servlet-name>
  	<url-pattern>/helloworld</url-pattern>
  </servlet-mapping>


将项目发布到tomcat服务器上。

Java客户端:

环境:j2sdk1.4.2
依赖的包:hessian-3.1.6.jar

创建一个名为HessianClient的java project,载入hessian-3.1.6.jar。

创建与服务器一样的接口及User类,注意它们所在的包路径也要与服务器相同,否则会出现java.lang.ClassNotFoundException。

接口:

Java代码 复制代码
  1. package server.demo;   
  2.   
  3. public interface DemoApi {   
  4.     public void setName(String name);   
  5.     public String sayHello();   
  6.     public User getUser();   
  7. }  
package server.demo;

public interface DemoApi {
	public void setName(String name);
	public String sayHello();
	public User getUser();
}


User类:

Java代码 复制代码
  1. package server.demo;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. public class User implements Serializable {   
  6.     String name = "kitty";   
  7.     String password = "nopass";   
  8.   
  9.     public User() {   
  10.         super();   
  11.     }   
  12.   
  13.     public User(String name, String password) {   
  14.         super();   
  15.         this.name = name;   
  16.         this.password = password;   
  17.     }   
  18.   
  19.     public String getName() {   
  20.         return name;   
  21.     }   
  22.   
  23.     public void setName(String name) {   
  24.         this.name = name;   
  25.     }   
  26.   
  27.     public String getPassword() {   
  28.         return password;   
  29.     }   
  30.   
  31.     public void setPassword(String password) {   
  32.         this.password = password;   
  33.     }   
  34.   
  35. }  
package server.demo;

import java.io.Serializable;

public class User implements Serializable {
	String name = "kitty";
	String password = "nopass";

	public User() {
		super();
	}

	public User(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}


客户端程序:

Java代码 复制代码
  1. package client.demo;   
  2.   
  3. import java.net.MalformedURLException;   
  4.   
  5. import server.demo.DemoApi;   
  6.   
  7. import com.caucho.hessian.client.HessianProxyFactory;   
  8.   
  9. public class ClientTest {   
  10.     public static void main(String[] args) throws MalformedURLException,   
  11.             ClassNotFoundException {   
  12.         String url = "http://localhost:9520/HessianServer/helloworld";   
  13.         HessianProxyFactory factory = new HessianProxyFactory();   
  14.         DemoApi api = (DemoApi) factory.create(url);   
  15.         api.setName("test");   
  16.         System.out.println(api.sayHello());   
  17.         System.out.println(api.getUser().getName());   
  18.         System.out.println(api.getUser().getPassword());   
  19.     }   
  20. }  
package client.demo;

import java.net.MalformedURLException;

import server.demo.DemoApi;

import com.caucho.hessian.client.HessianProxyFactory;

public class ClientTest {
	public static void main(String[] args) throws MalformedURLException,
			ClassNotFoundException {
		String url = "http://localhost:9520/HessianServer/helloworld";
		HessianProxyFactory factory = new HessianProxyFactory();
		DemoApi api = (DemoApi) factory.create(url);
		api.setName("test");
		System.out.println(api.sayHello());
		System.out.println(api.getUser().getName());
		System.out.println(api.getUser().getPassword());
	}
}


现在,启动tomcat,运行ClientTest。运行结果:
Hello test
lingling
pass

现在,在以上基础上将hessian与spring整合。

Java服务器端(即我们上面建的名为HessianServer的web project):

环境:j2sdk1.4.2、Tomcat6.0
依赖的包:
1. Hessian包:hessian-3.1.6.jar
2. spring-framework-2.0.2包:
a) aopalliance.jar
b) commons-logging.jar
c) log4j-1.2.14.jar
d) spring.jar
e) spring-aop.jar
f) spring-beans.jar
g) spring-context.jar
h) spring-core.jar
i) spring-jdbc.jar
j) spring-jms.jar
k) spring-web.jar
l) spring-webmvc.jar

配置web.xml,web.xml中增加:

Xml代码 复制代码
  1. <servlet>  
  2.     <servlet-name>remote</servlet-name>  
  3.     <servlet-class>  
  4.         org.springframework.web.servlet.DispatcherServlet   
  5.     </servlet-class>  
  6.     <init-param>  
  7.         <param-name>namespace</param-name>  
  8.         <param-value>classes/remote-servlet</param-value>  
  9.     </init-param>  
  10.     <load-on-startup>1</load-on-startup>  
  11. </servlet>  
  12. <servlet-mapping>  
  13.     <servlet-name>remote</servlet-name>  
  14.     <url-pattern>/remote/*</url-pattern>  
  15. </servlet-mapping>  
	<servlet>
		<servlet-name>remote</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<init-param>
			<param-name>namespace</param-name>
			<param-value>classes/remote-servlet</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>remote</servlet-name>
		<url-pattern>/remote/*</url-pattern>
	</servlet-mapping>


写spring的发布hessian服务的配置文件remote-servlet.xml,这个文件就建在工程的src下,即deploy到tomcat后,在WEB-INF/classes目录下。注意:这个文件为什么叫remote-servlet.xml呢?因为我们在web.xml中有配置:<param-value>classes/remote-servlet</param-value>所以文件名为remote-servlet.xml。
以下是remote-servlet.xml的内容:

Xml代码 复制代码
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <bean id="demoService" class="server.demo.DemoService" />  
  4.     <bean name="/helloSpring"  
  5.         class="org.springframework.remoting.caucho.HessianServiceExporter">  
  6.         <property name="service" ref="demoService" />  
  7.         <property name="serviceInterface" value="server.demo.DemoApi" />  
  8.     </bean>  
  9. </beans>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="demoService" class="server.demo.DemoService" />
	<bean name="/helloSpring"
		class="org.springframework.remoting.caucho.HessianServiceExporter">
		<property name="service" ref="demoService" />
		<property name="serviceInterface" value="server.demo.DemoApi" />
	</bean>
</beans>


好了,现在可以测试一下了。在刚才建的名为HessianClient的java project中修改client.demo.ClientTest.java如下:

Java代码 复制代码
  1. package client.demo;   
  2.   
  3. import java.net.MalformedURLException;   
  4.   
  5. import server.demo.DemoApi;   
  6.   
  7. import com.caucho.hessian.client.HessianProxyFactory;   
  8.   
  9. public class ClientTest {   
  10.     public static void main(String[] args) throws MalformedURLException,   
  11.             ClassNotFoundException {   
  12.         // String url = "http://localhost:9520/HessianServer/helloworld";   
  13.         String url = "http://localhost:9520/HessianServer/remote/helloSpring";   
  14.         HessianProxyFactory factory = new HessianProxyFactory();   
  15.         DemoApi api = (DemoApi) factory.create(DemoApi.class, url);   
  16.         api.setName("test");   
  17.         System.out.println(api.sayHello());   
  18.         System.out.println(api.getUser().getName());   
  19.         System.out.println(api.getUser().getPassword());   
  20.     }   
  21. }  
package client.demo;

import java.net.MalformedURLException;

import server.demo.DemoApi;

import com.caucho.hessian.client.HessianProxyFactory;

public class ClientTest {
	public static void main(String[] args) throws MalformedURLException,
			ClassNotFoundException {
		// String url = "http://localhost:9520/HessianServer/helloworld";
		String url = "http://localhost:9520/HessianServer/remote/helloSpring";
		HessianProxyFactory factory = new HessianProxyFactory();
		DemoApi api = (DemoApi) factory.create(DemoApi.class, url);
		api.setName("test");
		System.out.println(api.sayHello());
		System.out.println(api.getUser().getName());
		System.out.println(api.getUser().getPassword());
	}
}


现在,启动tomcat,运行ClientTest。运行结果:
Hello test
lingling
pass

如果客户端也使用spring呢?现在做一个spring整合hessian的客户端demo。首先载入spring-framework-2.0.2包:
1) aopalliance.jar
2) commons-logging.jar
3) log4j-1.2.14.jar
4) spring.jar
5) spring-aop.jar
6) spring-beans.jar
7) spring-context.jar
8) spring-core.jar
9) spring-jdbc.jar
10) spring-jms.jar
11) spring-web.jar
12) spring-webmvc.jar
在名为HessianClient的java project中src目录下,新建一个remote-client.xml,这个文件可随意命名。remote-client.xml内容为:

Xml代码 复制代码
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <bean id="helloSpring"  
  4.         class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  5.         <property name="serviceUrl">  
  6.             <value>  
  7.                 http://localhost:9520/HessianServer/remote/helloSpring   
  8.             </value>  
  9.         </property>  
  10.         <property name="serviceInterface">  
  11.             <value>server.demo.DemoApi</value>  
  12.         </property>  
  13.     </bean>  
  14. </beans>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="helloSpring"
		class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
		<property name="serviceUrl">
			<value>
				http://localhost:9520/HessianServer/remote/helloSpring
			</value>
		</property>
		<property name="serviceInterface">
			<value>server.demo.DemoApi</value>
		</property>
	</bean>
</beans>


在刚才建的名为HessianClient的java project中修改client.demo.ClientTest.java如下:

Java代码 复制代码
  1. package client.demo;   
  2.   
  3. import java.net.MalformedURLException;   
  4.   
  5. import org.springframework.context.ApplicationContext;   
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  7.   
  8. import server.demo.DemoApi;   
  9.   
  10. public class ClientTest {   
  11.     public static void main(String[] args) throws MalformedURLException,   
  12.             ClassNotFoundException {   
  13.         // String url = "http://localhost:9520/HessianServer/helloworld";   
  14.         // String url =   
  15.         // "http://localhost:9520/HessianServer/remote/helloSpring";   
  16.         // HessianProxyFactory factory = new HessianProxyFactory();   
  17.         // DemoApi api = (DemoApi) factory.create(DemoApi.class, url);   
  18.   
  19.         ApplicationContext context = new ClassPathXmlApplicationContext(   
  20.                 "remote-client.xml");   
  21.         DemoApi api = (DemoApi) context.getBean("helloSpring");   
  22.         api.setName("test");   
  23.         System.out.println(api.sayHello());   
  24.         System.out.println(api.getUser().getName());   
  25.         System.out.println(api.getUser().getPassword());   
  26.     }   
  27. }  
package client.demo;

import java.net.MalformedURLException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import server.demo.DemoApi;

public class ClientTest {
	public static void main(String[] args) throws MalformedURLException,
			ClassNotFoundException {
		// String url = "http://localhost:9520/HessianServer/helloworld";
		// String url =
		// "http://localhost:9520/HessianServer/remote/helloSpring";
		// HessianProxyFactory factory = new HessianProxyFactory();
		// DemoApi api = (DemoApi) factory.create(DemoApi.class, url);

		ApplicationContext context = new ClassPathXmlApplicationContext(
				"remote-client.xml");
		DemoApi api = (DemoApi) context.getBean("helloSpring");
		api.setName("test");
		System.out.println(api.sayHello());
		System.out.println(api.getUser().getName());
		System.out.println(api.getUser().getPassword());
	}
}


现在,启动tomcat,运行ClientTest。运行结果:
Hello test
lingling
pass

至此over~
PS:有时候可能因hessian或spring的版本问题使程序不能运行

转自:http://www.iteye.com/topic/618959

分享到:
评论

相关推荐

    hessian-demo和hessian与spring整合demo.doc

    Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用...

    spring aop hessian 基础demo 部署即可运行

    Spring AOP和Hessian是两个在Java开发中广泛使用的技术,尤其在分布式系统和服务治理中。下面将详细解释这两个概念以及它们如何结合使用。 **Spring AOP(面向切面编程)** Spring AOP是Spring框架的一个重要组成...

    hessian-demo示例

    在本示例“hessian-demo”中,我们将探讨如何在Spring 4框架下集成Hessian 4.0.7,以及利用内置的Jetty服务器来运行这个示例。 首先,让我们深入了解Hessian的工作原理。Hessian协议基于HTTP,但采用了二进制编码,...

    spring 集成 hessian例子

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。参考文档地址...

    spring springmvc hessian rpc客户端及服务端示例demo

    本示例着重介绍如何在Spring和SpringMVC框架中集成Hessian RPC,以实现客户端和服务端的通信。 Hessian是一种轻量级的二进制Web服务协议,由Caucho公司开发。它具有较高的传输效率,支持Java和.NET等多种语言,特别...

    hessian php与java通讯demo源码

    这个"PHP与Java通信Demo源码"是基于Hessian协议实现的一个示例,展示了如何在PHP和Java之间建立通信。现在,我们将深入探讨Hessian协议以及如何使用它在PHP和Java之间进行数据交换。 首先,Hessian协议由Caucho ...

    Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis

    本文主要讨论的是如何将Hessian RPC与RMI技术整合到Structs、Spring、Hibernate和Ibatis这四个关键的Java开发框架中,以构建一个高效、灵活的分布式应用程序。 1. **Hessian配置说明**: Hessian的配置通常涉及...

    Spring整合Hessian(Maven Web工程)

    一个Spring整合Hessian的Demo,同时包含Hessian服务端与客户端。是一个Maven工程,IDE使用的Eclipse,运行前需要安装Eclipse的Maven插件。可以结合文章一起学习,地址是...

    Spring配置hessian远程服务

    使用eclipse maven工程搭建hessian远程服务demo 分服务端的整合和客户端 建议阅读相关博客http://blog.csdn.net/heisemuyangquan/article/details/79460528

    Dubbo + SpringMVC 4.3.1 + Hessian 注解方式Demo工程源码

    整合 Dubbo + SpringMvc 4.3.1 的服务器maven工程样例,使用注解方式定义服务及IOC装配,采用Hessian协议传输 三个工程,在 cnetAdmin 和 cnetBlu 中,要引用 cnetCommon 工程。

    hessian运用

    附件中的demo主要包括两部分hessianServer、hessianClient(没有用maven,很普通的java web运用),其中hessianServer没有用spring、hessianClient用了spring,server与client两者都同时作为了服务端与客户端,不...

    Hessian 使用小结

    Hessian 是一种轻量级的二进制RPC通讯框架,基于HTTP使用servlet 暴漏web service. 本文描述了单独使用和及spring集成使用,并介绍了证书加密,签名及非证书类如DES加密方式. 文尾附官方实例链接.

    基于java的Hessian实现

    基于java实现hessian进行服务器之间数据交互demo项目 实现功能: 1.基于spring 2.5.6+hessian3.1.6带有签名安全机制 2.基于servlet代理机制实现HessianServlet,进行简单IP地址校验功能!

    dubbo+zookeeper+spring demo

    【标题】"dubbo+zookeeper+spring demo" 是一个整合了Dubbo、ZooKeeper和Spring框架的示例项目,旨在展示如何在分布式环境中利用这三个技术进行服务发现和服务调用。 【描述】在这个demo中,Dubbo作为服务提供与...

    DUBBO_SPRING_DEMO

    通过"DUBBO_SPRING_DEMO"这个示例,开发者可以学习如何在实际项目中配置和使用Dubbo与Spring的集成,从而提升服务的可扩展性和可靠性。这个过程涉及到Spring的bean管理、Dubbo的配置语法,以及对分布式服务治理的...

    dubbo demo

    - Dubbo 很常见地与 Spring 框架集成,利用 Spring 的依赖注入和管理能力,简化应用开发。 - "dubbo demo" 可能会有 Spring 配置文件,展示如何将 Dubbo 组件与 Spring 容器集成。 通过深入研究这个 "dubbo demo...

    Hessian远程调用框架学习一

    此外,Hessian还可以与其他技术结合,如Spring框架,以便更好地管理和部署服务。同时,Hessian支持版本控制,可以处理服务升级时的兼容性问题。 总的来说,Hessian远程调用框架在Java分布式系统中提供了一种高效、...

    dubbo 简单测试DEMO

    在DEMO中,我们通常使用默认的Dubbo协议和Hessian序列化。 5. **配置中心(Config Center)** 配置中心可以集中管理服务的元数据,如服务版本、路由规则、权重等。虽然这不是DEMO的必要部分,但了解这一概念有助于...

    burlap-spring-demo

    Burlap现在已经集成到hessian jar中 不作为一个单独的项目了 "&gt;Burlap是一个轻量级的XML RPC协议 这使得他可以移植到任何可以解析XML的语言中 比起Hessian 它的可读性更强 和其他基于Xml的远程技术(如SOAP和XML RPC...

    springmvc+dubbo+mybatis+zookeeper可以直接使用的框架demo

    Spring MVC + Dubbo + MyBatis + ZooKeeper 这是一个经典的微服务架构组合,用于构建高效、可扩展的分布式...此外,还可以考虑与其他工具集成,如Spring Cloud、Eureka、Sentinel等,以提升系统的稳定性和可扩展性。

Global site tag (gtag.js) - Google Analytics