Spring使用远程服务之Hessian

Hessian像RMI一样,使用二进制消息进行客户端和服务端的交互,它的二进制消息可以移植到其他非Java的语言中包括PHP、Python、C++和C#。因为Hessian是基于HTTP的,所以HessianSeriviceExporter实现为一个Spring MVC控制器。

HessianSeriviceExporter是一个SpringMVC控制器,它可以接收Hessian请求,并将这些请求翻译成对POJO的调用来,从而将POJO导出为一个Hessian服务

为了使用导出Hessian服务,我们需要执行两个额外的配置步骤:

1、在web.xml中配置Spring的DispatcherServlet,并把我们的应用部署为Web应用;

2、在Spring的配置文件中配置一个URL处理器,将Hessian服务的URL分发给对应的Hessian服务Bean。

下面我们距离说明

我的项目分层

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
	  <!-- 在此处配置刚刚写的spring-hessian.xml的位置 -->
	<context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>
	        classpath:/spring-hessian.xml
	    </param-value>
	</context-param> 

	<servlet>
    <!-- servlet-name保持与spring-hessian.xml中一致 -->
    <servlet-name>HelloServiceExporter</servlet-name>
    <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
	</servlet>
	<servlet-mapping>
	    <servlet-name>HelloServiceExporter</servlet-name>
	    <url-pattern>/HelloService</url-pattern>
	</servlet-mapping>  

</web-app>

spring-hessian.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	 http://www.springframework.org/schema/tx
	 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	 http://www.springframework.org/schema/jee
	 http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
	 http://www.springframework.org/schema/aop
	 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	 http://www.springframework.org/schema/context
	 http://www.springframework.org/schema/context/spring-context-3.0.xsd
	 http://activemq.apache.org/schema/core
	 http://activemq.apache.org/schema/core/activemq-core.xsd"
	default-lazy-init="true"> 

  	<context:annotation-config />
  	<!-- 组件扫描,使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
	<context:component-scan base-package="hessian" />

	<!-- 自动装配 -->
	<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

    <!-- Name保持与web.xml中的一致,web.xml下文中描述 -->
    <bean name="HelloServiceExporter"
        class="org.springframework.remoting.caucho.HessianServiceExporter">
        <!-- service的ref与HelloServiceImpl中@Service中配置的一致 -->
        <property name="service" ref="helloService" />
        <!-- 接口的路径 -->
        <property name="serviceInterface"
            value="hessian.HelloService" />
    </bean>
</beans>

java类

package hessian;

public interface HelloService {

	void sayHello(String name);

}
package hessian;

import org.springframework.stereotype.Service;

@Service("helloService")
public class HelloServiceImpl implements HelloService {  

    /* (non-Javadoc)
     * @see com.gsoft.geloin.service.HelloService#sayHello(java.lang.String)
     */
    @Override
    public void sayHello(String name) {
        System.out.println("Hello " + name + "!");
    }  

} 

客户端的调用

首先将Service的打成jar包加入到客户端程序中

测试代码

package hessionclient;

import hessian.HelloService;

import com.caucho.hessian.client.HessianProxyFactory;

public class ArticleManager {
	public static void main(String[] args) {
        try {
            String url = "http://localhost:8080/SpringTest/HelloService";
            HessianProxyFactory factory = new HessianProxyFactory();
            HelloService helloService = (HelloService) factory.create(
                    HelloService.class, url);
            helloService.sayHello("张三");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端调用图

参考:

《Spring实战(第3版)》

PS:代码主体来源于网络

Spring使用远程服务之Hessian

时间: 2024-10-07 05:26:56

Spring使用远程服务之Hessian的相关文章

Spring对远程服务的支持

Java程序有以下的远程调用技术选择: 远程过程调用(RPC)是同步的,客户端在服务器端返回结果之前将一直被阻塞. 各种技术适用的场景如下: 典型的RMI开发的过程如下: 定义一个接口,用于客户端和服务器端的交互,接口要继承Remote接口,所有方法都要抛出RemoteException. 编写服务器端的实现,实现第一步所编写的接口. 编写一个注册类,基于某个某个IP和端口(默认是1099)注册服务器端类的实现. 编写客户端的调用,基于IP,端口和注册的名称查找服务器端对应的类. RMI支持传递

Hessian入门(包括与Spring集成)

A.纯Hessian接口开发步骤 Hessian-JAVA服务器端必须具备以下几点: * 1.包含Hessian的jar包(hessian-4.0.37.jar) * 2.设计一个接口,用来给客户端调用(IHessian.java) * 3.实现该接口的功能(IHessianImpl.java) * 4.配置web.xml,配好相应的Servlet(web.xml) * 5.对象必须实现Serializable接口(Foo.java) Hessian-JAVA服务端代码预览图: 1.包含Hess

Java学习之路-Hessian学习

Hessian是基于HTTP的轻量级远程服务解决方案,Hessian像Rmi一样,使用二进制消息进行客户端和服务器端交互.但与其他二进制远程调用技术(例如Rmi)不同的是,它的二进制消息可以移植其他非Java的语言中.  一.创建Hessian程序的4个步骤  1.定义一个远程接口的接口.  2.定义一个实现该接口的类.  3.在web.xml中定义导出Hessian服务需要的信息.  4.编写客户端访问代码.  二.程序的具体实现  一.首先我们先创建Web项目,并新建一个实体类,这个类需要实

Hessian RPC示例和基于Http请求的Hessian序列化对象传输

本文主要介绍两个案例,第一个是使用Hessian来实现远程过程调用,第二个是通过Hessian提供的二进制RPC协议进行和Servlet进行数据交互,Hessian本身即是基于Http的RPC实现. 案例一: 1.准备工作 这里建立一个Maven项目,其中包含四个模块,父模块(仅用来聚合其它模块,不做实际使用),服务器端模块,客户端模块,API模块(远程过程接口,供服务器和客户端使用).目录结构见下图: 2.添加Hessian的依赖 由于客户端和服务器都要依赖Hessian的包,这里可以添加到父

hessian 简单使用小结

hessian简介:是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据 1.开发环境 maven----springmvc 2.hessian需要一个客服端一个服务器端  客服端和服务端都需要有hessian的jar 使用maven 直接添加 <dependency> <groupId>com.caucho</

转:Acegi Security

Acegi Security -- Spring下最优秀的安全系统 http://www.springside.org.cn/docs/reference/Acegi.htm 1. Acegi 介绍 2. Acegi 配置 3. Acegi 扩展 4. Acegi ACL使用 5. FAQ Acegi是Spring Framework 下最成熟的安全系统,它提供了强大灵活的企业级安全服务,如完善的认证和授权机制,Http资源访问控制,Method 调用访问控制,Access Control Li

关于项目中的DAL数据接入层架构设计

摘要:项目中对关系型数据库的接入再寻常不过,也有海量的ORM工具可供选择,一个一般性的DAL数据接入层的结构却大同小异,这里就分享一下使用Hibernate.Spring.Hessian这三大工具对DAL层的具体实现方法,也是对之前使用的一个总结. 关键词:Hibernate, Spring, Hessian, DAL, 数据接入层, 架构设计 注意:以下配置或代码运行在Hibernate4.2.5,Spring3.2.4,Hessian4.0.37,Tomcat7.0.47环境下 一.Mode

Spring整合Hessian访问远程服务

声明:该文章转载自Spring整合Hessian访问远程服务,本人搬过来只是为了记录下学习Hessian的过程,忘此博主理解,在此感谢,等本人有能力了再学一些原创的东东,本人实践了下,hessianServer项目不是web project,由于较菜,花了一个下午才把java project转换成为web project. 项目下载: hessianServer:http://files.cnblogs.com/ontheroad_lee/hessianServer.rar hessianCli

Spring远程服务(RPC)

Spring支持几种不同的RPC模型,包括远程方法调用(RMI).Caucho的Hessian和Burlap和Spring自带的HTTP invoker.如下: 无论选择哪一种RPC模型,我们都会发现Spring对每一种模型都提供了风格一致的支持.在所有的模型中,服务都作为Spring所管理的Bean配置到我们的应用中.这是采用一个代理工厂Bean实现的,这个Bean能够像本地对象一样将远程服务装配到其他Bean的属性中去.它的工作原理如下: