Spring集成Hessian1

Hessian是一个轻量级的远程调用工具,采用的是Binary RPC协议,很适合于发送二进制数据,基于HTTP具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的Web Service。只是它不使用SOAP协议,但相比Web Service而言更简单、快捷。

Burlap与Hessian相似,只是Burlap传输的将是XML而不是二进制的数据。

RMI很难穿越防火墙,2端都必须基于Java开发,传输对象时还需要考虑对象版本的问题。而Burlap与Hessian是基于HTTP的,很容易穿越防火墙,而且客户端不仅限于Java。Burlap与Hessian用的是私有的对象序列化机制,比起RMI来效率是较低的,RMI用的是Java的序列化机制。

Spring还提供了一种RPC机制—HTTP invoker,基于HTTP传输,使用的又是Java的对象序列化机制。

1. Hessian框架JAR包下载

http://hessian.caucho.com/上下载所需的JAR包,这里下载的是hessian-4.0.37.jar。hessian的jar包是非常的小。

特别需要注意的是:hessian-4.0.37.jar不仅要放到工程依赖的jar包中,还要放在web-inf下的lib目录下,否则会报错:

NoClassDefFoundError: com/caucho/hessian/io/HessianDebugInputStream

2.服务器端环境搭建

2.1和RMI一样,需要先定义一个接口:

package com.hessian.isay;

public interface Isay {
         public String sayHello(String arg1,String arg2);
         public String getObjectMessage(Object object);
}

2.2再编写一个具体的实现类:

package com.hessian.isay;

public class IsayImpl implements Isay {
          public String sayHello(String arg1, String arg2) {
                  return "Hello:" + arg1 + arg2;
          }
         @Override
         public String getObjectMessage(Object object) {
                if(object instanceof HessianTestObject){
                               return "server react :" + ((HessianTestObject) object).getMessage();
                }
                return "";
         }}

2.3 创建一个对象,证明可以传输对象

package com.hessian.isay;
import java.io.Serializable;
public class HessianTestObject implements Serializable{
           private static final long serialVersionUID = -6273473338054054934L;
           private String message;
           public String getMessage() {
                     return message;
           }

           public void setMessage(String message) {
                     this.message = message;
           }
}

2.4配置web.xml,加上下面的代码:

<servlet>
    <description>spring mvc servlet</description>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <init-param>
           <description>spring mvc 配置文件</description>
           <param-name>contextConfigLocation</param-name>
           <param-value> classpath:springMvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

  这里需要注意的是,DispatcherServlet的servlet-name是springMvc,所以需要新建一个名为springMvc-servlet.xml的文件。tomcat在启动时将会去加载这个文件。

2.5 创建springMvc-servlet.xml文件

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- 接口的具体实现类 -->
    <bean id="impl" class="com.hessian.isay.IsayImpl" />
    <!-- 使用Spring的HessianService做代理 -->
    <bean name="/helloSpring.do"
    class="org.springframework.remoting.caucho.HessianServiceExporter">
        <!-- service引用具体的实现实体Bean-->
        <property name="service" ref="impl" />
        <property name="serviceInterface"       value="com.hessian.isay.Isay" />
    </bean>

    <!-- 可以配置多个HessianServiceExporter代理Bean -->
</beans>

 启动tomcat服务器,如果没报异常,则说明服务器端的环境搭建完成了。

3.客户端环境搭建

客户端需要的是hessian-4.0.37.jar,HessianTestObject,Isay和NormalClient(或者SpringClient)。

  3.1 不依赖于Spring的方式调用

  编写测试类如下:

import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.hessian.isay.Isay;

public class NormalClient {
        public static void main(String[] args) throws MalformedURLException {
            //Spring Hessian代理Servelet
            String url = "http://localhost:8080/ssm/helloSpring.do";
            HessianProxyFactory factory = new HessianProxyFactory();
            Isay api = (Isay) factory.create(Isay.class, url);

            System.out.println(api.sayHello("hello", " spring"));

            HessianTestObject object = new HessianTestObject();
            object.setMessage("message from object");
            System.out.println(api.getObjectMessage(object));
        }
}

  3.2 依赖于Spring的实现

  先编写xml文件hessian_client.xml,完成bean的定义:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
        <!-- 客户端Hessian代理工厂Bean -->
        <bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
            <!-- 请求代理Servlet路径 -->
            <property name="serviceUrl">
                <value>http://localhost:8080/ssm/helloSpring.do</value>
            </property>
            <!-- 接口定义 -->
            <property name="serviceInterface">
                <value>com.hessian.isay.Isay</value>
            </property>
        </bean>
</beans>

  上面直接写死url的方式不是很好,写成如下方式更为灵活:http://${serverName}:${httpPort}/${serverPath}/${contextPath}。

  再编写测试代码,如下:

package com.hessian.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hessian.isay.Isay;

public class SpringClient {
    public static void main(String[] args) {
        ApplicationContext contex = new ClassPathXmlApplicationContext(
                "hessian_client.xml");

        // 获得客户端的Hessian代理工厂bean
        Isay i = (Isay) contex.getBean("clientSpring");
        System.out.println(i.sayHello("hello", " spring"));
        HessianTestObject object = new HessianTestObject();
         object.setMessage("message from object");
         System.out.println(i.getObjectMessage(object));
    }
}

  

  Burlap的环境搭建与Hessian很类似,需要的也是hessian-4.0.37.jar。

  需要有2处需要更改:

一是将步骤2.5中的配置文件配置如下即可:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
        <!-- 接口的具体实现类 -->
            <bean id="impl" class="com.hessian.isay.IsayImpl" />
            <!-- 使用Spring的HessianService做代理 ,service引用具体的实现实体Bean-->
            <!-- <bean name="/helloSpring.do" class="org.springframework.remoting.caucho.HessianServiceExporter">
                      <property name="service" ref="impl" />
                     <property name="serviceInterface" value="com.hessian.isay.Isay" />
             </bean> -->

           <bean name="/helloSpring.do" class="org.springframework.remoting.caucho.BurlapServiceExporter">
                    <property name="service" ref="impl" />
                  <property name="serviceInterface" value="com.hessian.isay.Isay" />
            </bean>
        <!-- 可以配置多个HessianServiceExporter代理Bean -->
</beans>

二是将3.2中的配置文件改为:

  <bean id="clientSpring" class="org.springframework.remoting.caucho.BurlapProxyFactoryBean">
            <!-- 请求代理Servlet路径 -->
            <property name="serviceUrl">
                <value>http://localhost:8080/ssm/helloSpring.do</value>
            </property>
            <!-- 接口定义 -->
            <property name="serviceInterface">
                <value>com.hessian.isay.Isay</value>
            </property>
        </bean>

Spring自带的HttpInvoker基于Http,而且使用Java自带的序列化。配置和Hessian基本的一样,也只需要该2处地方。

使用HttpInvoker的缺点是必须使用Spring和必须基于Java。

一是将步骤2.5中的配置文件配置如下即可:

<bean name="/helloSpring.do" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="impl" />
        <property name="serviceInterface" value="com.hessian.isay.Isay" />
</bean>

二是将3.2中的配置文件改为:

<bean id="clientSpring" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
        <property name="serviceUrl">
            <value>http://localhost:8080/ssm/helloSpring.do</value>
        </property>

        <property name="serviceInterface">
            <value>com.hessian.isay.Isay</value>
        </property>
</bean>

时间: 2024-10-19 15:31:53

Spring集成Hessian1的相关文章

RabbitMQ安装和使用(和Spring集成)

一.安装Rabbit MQ Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接下载安装3.2.3 版本: 下载并安装 Eralng OTP For Windows (vR16B03) 运行安装 Rabbit MQ Server Windows Installer (v3.2.3) 具体操作步骤参考:在 Windows 上安装Rabbit MQ 指南 本人遇到的问题 当安装RabbitMQ后,使用rabbitmqctl

spring集成quartz

spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class" Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成

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

Struts2+Spring集成合并

前边单独总结了Struts2,Spring和Ibaits框架了,那么怎么结合使用呢?这次先来看一下Sturts2和Spring的集成合并.其实挺简单的,就是导入各自的jar包以及连接彼此的jar包,分好彼此的工作就可以了. 好看一下Struts2+Spring的集成方案!  Struts2和Spring集成有两种方案,是根据action的创建来划分的!  方案一,Struts2负责流程,Spring负责对象的创建:Action由Struts2框架负责创建:Service由Spring框架负责创建

Java Persistence with MyBatis 3(中文版) 第五章 与Spring集成

MyBatis-Spring是MyBatis框架的子模块,用来提供与当前流行的依赖注入框架Spring的无缝集成. Spring框架是一个基于依赖注入(Dependency Injection)和面向切面编程(Aspect Oriented Programming,AOP)的Java框架,鼓励使用基于POJO的编程模型.另外,Spring提供了声明式和编程式的事务管理能力,可以很大程度上简化应用程序的数据访问层(data access layer)的实现.在本章中,我们将看到在基于Spring的

spring集成Log4j以及log4j配置简要说明

Spring集成: web.xml中配置log4j <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/log4j.xml</param-value></context-param> <!-- 加载Spring框架中的log4j监听器Log4jConfigListener --><listener>

rabbitMQ第五篇:Spring集成RabbitMQ

前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.6.0.RELEASE</version> <

Spring 集成 RMI

Maven <dependency> <groupId>org.springframework</groupId> <artifactId>spring-remoting</artifactId> </dependency> 服务端 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spri

activiti搭建(二)与Spring集成

转载请注明源地址:http://www.cnblogs.com/lighten/p/5876773.html 本文主要讲解如何将Activiti和Spring框架集成,再过一段时间将会将一个基础的demo放在github上,地址将会在activiti系列导读文章中给出,如果未给出,则是因为没有构建完成(学习中,更新较慢).按照搭建篇章的顺序,也能搭建起来. 上一章将了数据库的初始化,继续那章建立的maven项目.Activiti与Spring集成需要相应的jar包,下面将补充其他maven依赖: