- 浏览: 167286 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
兰斯洛特1987:
顶!!!!谢谢分享.最近我也在研究这玩意...
Java语言的Hook实现 -
pu02203:
我把Confidant.jar, 丢进去eclipse, 里面 ...
重磅推出诛仙辅助软件第二波:Java版按键精灵 -
泣血端午:
Calculagraph 这是哪个类啊?
A星算法 -
haitaohehe:
我使用的是jstl1.0 可是在使用<c:set va ...
JSTL1.0和JSTL1.1的区别 -
micheal19840929:
学习楼主,我也测试一下~看看兼容性吧。lanlanzhilia ...
手机版飞鸽传书:无线牵
/**
* @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文件夹中。
创建接口:
- package server.demo;
- public interface DemoApi {
- public void setName(String name);
- public String sayHello();
- public User getUser();
- }
package server.demo; public interface DemoApi { public void setName(String name); public String sayHello(); public User getUser(); }
实现接口:
- 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");
- }
- }
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。
- 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;
- }
- }
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:
- <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>
<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。
接口:
- package server.demo;
- public interface DemoApi {
- public void setName(String name);
- public String sayHello();
- public User getUser();
- }
package server.demo; public interface DemoApi { public void setName(String name); public String sayHello(); public User getUser(); }
User类:
- 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;
- }
- }
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; } }
客户端程序:
- 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());
- }
- }
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中增加:
- <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>
<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的内容:
- <!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>
<!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如下:
- 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());
- }
- }
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内容为:
- <!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>
<!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如下:
- 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());
- }
- }
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
发表评论
-
HTTP POST GET 本质区别详解
2010-08-24 09:50 933一 原理区别 一般在浏览器中输入网址访问资源都是通 ... -
Linux的SMTP 命令
2010-07-12 17:54 1167HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况 ... -
常见异常解决方法
2010-06-30 09:49 820【异常】 com.caucho.config.LineCon ... -
在servlet中获取web.xml中设置的初始化参数信息的方法
2010-06-29 17:31 1860HttpServlet的父类GenericServlet类中实 ... -
servlet中init()和service()方法的区别
2010-06-29 16:49 1207首先你要明确servlet的生命周期和HTTP协议. Serl ... -
JSTL1.0和JSTL1.1的区别
2010-06-24 11:51 1586这要从一个异常说起 According to TLD or ... -
spring中配置二级缓存
2010-06-23 11:09 732spring中配置二级缓存 关键字: spring hib ... -
DetachedCriteria分页记录重复解决方案
2010-06-08 16:21 2373尝试了criterion.setResultTransform ... -
HttpSessionListener统计在线人数
2010-03-22 12:29 1330在网站中经常需要进行在线人数的统计。过去的一般做法 ... -
request.getSession(false)和request.getSession(true)区别
2010-02-11 12:25 1693request.getSession(false)和req ... -
Chapter 11. HQL: The Hibernate Query Language - 十一章 HQL: Hibernate 查询语言
2010-01-22 17:33 1746NHibernate is equiped with an e ... -
任务型队列式多线程之实现
2010-01-16 10:34 2519前言:最近做的一个项目正好要用到多线程,而且要实现 ... -
Hibernate中显示前一条,后一条记录
2010-01-08 15:21 717哪位有更好的方法,贡献下,谢了先! /** ... -
Cookie之二
2010-01-06 11:46 90117.2 存取Cookie 创建Cookie的方式与定义一 ... -
Cookie之一
2010-01-06 11:42 799Cookie是存储在客户端计 ... -
典型的 SQL 注入过程
2009-12-29 17:28 788此漏洞已帮其修复,并知会当事人 SQL 注入漏洞危害巨大,但 ... -
Hibernate(jpa)复合主键annotation声明方法
2009-12-22 10:56 764CREATE TABLE TB_HOUR_DATA( S ... -
实现jsp点击txt链接强制下载
2009-11-27 17:44 3428web开发时有时候会遇到,点击一个txt的文本,需要出现下载的 ...
相关推荐
Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用...
Spring AOP和Hessian是两个在Java开发中广泛使用的技术,尤其在分布式系统和服务治理中。下面将详细解释这两个概念以及它们如何结合使用。 **Spring AOP(面向切面编程)** Spring AOP是Spring框架的一个重要组成...
在本示例“hessian-demo”中,我们将探讨如何在Spring 4框架下集成Hessian 4.0.7,以及利用内置的Jetty服务器来运行这个示例。 首先,让我们深入了解Hessian的工作原理。Hessian协议基于HTTP,但采用了二进制编码,...
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。参考文档地址...
本示例着重介绍如何在Spring和SpringMVC框架中集成Hessian RPC,以实现客户端和服务端的通信。 Hessian是一种轻量级的二进制Web服务协议,由Caucho公司开发。它具有较高的传输效率,支持Java和.NET等多种语言,特别...
4. **客户端调用**:客户端可以选择与Spring集成,通过Spring的`ApplicationContext`获取代理对象,或者直接使用Hessian工具生成代理。 **安全机制** Hessian提供了基于X.509证书的加密和签名机制,这包括`X509...
这个"PHP与Java通信Demo源码"是基于Hessian协议实现的一个示例,展示了如何在PHP和Java之间建立通信。现在,我们将深入探讨Hessian协议以及如何使用它在PHP和Java之间进行数据交换。 首先,Hessian协议由Caucho ...
本文主要讨论的是如何将Hessian RPC与RMI技术整合到Structs、Spring、Hibernate和Ibatis这四个关键的Java开发框架中,以构建一个高效、灵活的分布式应用程序。 1. **Hessian配置说明**: Hessian的配置通常涉及...
一个Spring整合Hessian的Demo,同时包含Hessian服务端与客户端。是一个Maven工程,IDE使用的Eclipse,运行前需要安装Eclipse的Maven插件。可以结合文章一起学习,地址是...
使用eclipse maven工程搭建hessian远程服务demo 分服务端的整合和客户端 建议阅读相关博客http://blog.csdn.net/heisemuyangquan/article/details/79460528
Hessian与Spring结合使用可以极大地简化远程服务的开发流程。Spring框架提供了强大的依赖注入和支持面向切面编程的能力,而Hessian则负责处理远程服务调用。两者结合能够帮助开发者快速构建高性能的分布式应用系统。...
### Hessian与Spring整合知识点详解 #### 一、Hessian简介 ...通过本文的介绍,相信读者已经掌握了如何使用Hessian与Spring集成的基本步骤和技术要点。在实际项目开发中,还需要根据具体需求进行更深入的研究和实践。
整合 Dubbo + SpringMvc 4.3.1 的服务器maven工程样例,使用注解方式定义服务及IOC装配,采用Hessian协议传输 三个工程,在 cnetAdmin 和 cnetBlu 中,要引用 cnetCommon 工程。
### Spring MVC 与 Dubbo 整合知识点解析 #### 一、Spring MVC 与 Dubbo 概述 ...以上是对“springmvc-dubbo完整demo”的详细解析,希望能够帮助您更好地理解如何将 Spring MVC 与 Dubbo 进行有效整合。
附件中的demo主要包括两部分hessianServer、hessianClient(没有用maven,很普通的java web运用),其中hessianServer没有用spring、hessianClient用了spring,server与client两者都同时作为了服务端与客户端,不...
基于java实现hessian进行服务器之间数据交互demo项目 实现功能: 1.基于spring 2.5.6+hessian3.1.6带有签名安全机制 2.基于servlet代理机制实现HessianServlet,进行简单IP地址校验功能!
【标题】"dubbo+zookeeper+spring demo" 是一个整合了Dubbo、ZooKeeper和Spring框架的示例项目,旨在展示如何在分布式环境中利用这三个技术进行服务发现和服务调用。 【描述】在这个demo中,Dubbo作为服务提供与...
通过"DUBBO_SPRING_DEMO"这个示例,开发者可以学习如何在实际项目中配置和使用Dubbo与Spring的集成,从而提升服务的可扩展性和可靠性。这个过程涉及到Spring的bean管理、Dubbo的配置语法,以及对分布式服务治理的...
Hessian与Spring的整合 在Spring环境下使用Hessian,可以通过Spring的`DispatcherServlet`将请求转发给Hessian服务。这种方式可以更好地利用Spring的特性,提高开发效率和服务管理的灵活性。 - 配置`...
- Dubbo 很常见地与 Spring 框架集成,利用 Spring 的依赖注入和管理能力,简化应用开发。 - "dubbo demo" 可能会有 Spring 配置文件,展示如何将 Dubbo 组件与 Spring 容器集成。 通过深入研究这个 "dubbo demo...