Spring整合Hessian

简介:
 
Spring让Hessian变得不但强大,而且易用,但是易用背后,却有不少陷阱!
 
这个例子很简单,但实际上的确花费了我超过一小时的时间,排除了种种问题,最后问题终于水落石出。
 
整合以上篇Hello Hessian为基础,加入Spring框架,进行改进。
 
一、环境
jdk1.5
 
顺便说下,如果不说环境版本,很难保证你的程序在别的版本下能运行。
 
二、整合
 
1、写Spring的发布Hessian服务的配置文件
 
hessian-servlet.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
< beans > 
         < bean  id ="defaultHandlerMapping"  class ="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> 
         < bean  id ="helloService"  class ="lavasoft.suths.service.HelloService" /> 
         < bean  name ="/hello"  class ="org.springframework.remoting.caucho.HessianServiceExporter" > 
                 < property  name ="service"  ref ="helloService" /> 
                 < property  name ="serviceInterface"  value ="lavasoft.suths.service.Hello" /> 
         </ bean > 
</ beans >
 
2、配置web.xml
<? xml  version ="1.0"  encoding ="UTF-8" ?> 
< web-app  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_2_5.xsd" 
                  version ="2.5" > 
         < context-param > 
                 < param-name >contextConfigLocation </ param-name > 
                 < param-value > 
                        /WEB-INF/hessian-servlet.xml 
                 </ param-value > 
         </ context-param > 
         < servlet > 
                 < servlet-name >hessian </ servlet-name > 
                 < servlet-class >org.springframework.web.servlet.DispatcherServlet </ servlet-class > 
                 < load-on-startup >4 </ load-on-startup > 
         </ servlet > 

         < servlet-mapping > 
                 < servlet-name >hessian </ servlet-name > 
                 < url-pattern >/hessian/* </ url-pattern > 
         </ servlet-mapping > 
</ web-app >
 
陷阱:
a)hessian-servlet.xml的文件名必须以<servlet-name>hessian</servlet-name>名字开头,并且加上-servlet.xml一段,组成完整的文件名。
b)hessian-servlet.xml的文件名格式必须是[servlet-name]-servlet.xml格式,否则出错。
 
三、部署应用
 
因为涉及到类加载顺序问题,好用IDEA启动Tomcat测试老失败,不知道为啥!这次不用IDEA嵌入式启动Tomcat了,直接自己部署测试。
部署后,启动界面如下:
 
三、写测试
 
这次测试,可以在上个例子的基础上进行修改来测试,根据上面的配置,那么请求HelloService的URL应该是: http://localhost:8080/hessianapp/hessian/hello
package lavasoft.suths.service.client; 

import com.caucho.hessian.client.HessianProxyFactory; 
import lavasoft.suths.service.Hello; 

import java.net.MalformedURLException; 

/** 
* 客户端调用(会依赖服务接口) 

* @author leizhimin 2009-8-14 12:29:33 
*/
 
public  class Client { 
         public  static  void main(String[] args)  throws MalformedURLException { 
                String url =  "http://localhost:8080/hessianapp/hessian/hello"; 
                HessianProxyFactory factory = new HessianProxyFactory(); 
                Hello hello = (Hello) factory.create(Hello.class, url); 
                System.out.println(hello.sayHello("Hessian")); 
        } 
}
 
运行结果:
Hello Hessian! 

Process finished with exit code 0
 
还有一种测试方法,就是在客户端也使用Spring,需要做个配置remoting-client.xml:
<!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
        <bean id="helloServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"
                <property name="serviceUrl" value="http://localhost:8080/hessianapp/hessian/hello"/> 
                <property name="serviceInterface" value="lavasoft.suths.service.Hello"/> 
        </bean> 
</beans>
 
然后写个测试类:
package lavasoft.suths.service.client; 

import lavasoft.suths.service.Hello; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

/** 
* Spring整合Hessian,客户端测试 

* @author leizhimin 2009-8-14 15:32:46 
*/
 
public  class TestClient { 
         public  static  void main(String[] args) { 
                 try { 
                        ApplicationContext context =  new ClassPathXmlApplicationContext( "/remoting-client.xml"); 
                        Hello hello = (Hello) context.getBean( "helloServiceClient"); 
                        System.out.println(hello.sayHello( "Spring Hession")); 
                } 
                 catch (Exception e) { 
                        e.printStackTrace(); 
                } 
        } 
}
 
运行结果:
Hello Spring Hession! 

Process finished with exit code 0
 
陷阱:
实际上,看着代码好好,程序有时候还是不能跑,原因是Hessian的版本问题,这里推荐使用Spring自带的版本,就不会有问题了。
 
整个工程所以依赖的包:
log4j-1.2.15.jar 
spring-aop.jar 
spring-beans.jar 
spring-context.jar 
spring-context-support.jar 
spring-core.jar 
spring-jdbc.jar 
spring-jms.jar 
spring-orm.jar 
spring-test.jar 
spring-tx.jar 
spring-web.jar 
spring-webmvc.jar 
spring-webmvc-portlet.jar 
spring-webmvc-struts.jar 
hessian-3.1.3.jar 
aopalliance.jar 
commons-logging.jar
 
 
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/191871,如需转载请自行联系原作者
相关文章
|
前端开发 安全 Java
hessian与Spring MVC的整合
前几天因为项目的需要研究了下如何把hessian整合到项目中。现在做下简单的总结回顾。
92 0
hessian与Spring MVC的整合
|
XML Java 数据格式
Spring+Hessian+Maven+客户端调用实例
Hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:http://hessian.caucho.com/ 先上个效果图,在客户端界面通过ID查询后调用后台的Hession服务获取用户数据。
907 0
|
Web App开发 Java 数据格式
hessian+spring集成应用
注意事项 ▲JAVA服务器端必须具备以下几点:---->包含Hessian的jar包---->设计一个接口,用来给客户端调用---->实现该接口的功能---->配置web.xml,配好相应的servlet---->对象必须实现Serializable 接口---->对于复杂对象可以使用Map的方法传递▲客户端必须具备以下几点:---->java客户端包含Hessian.jar的包。
875 0
|
前端开发 Java API
Spring整合Hessian访问远程服务
Spring整合Hessian访问远程服务 目录 1.1      Hessian简介 1.2      整合 1.2.1     概述 1.2.2     服务端整合 1.2.3     客户端整合 1.1     Hessian简介        Hessian是一个轻量级的Web服务实现工具,它采用的是二进制协议,因此很适合发送二进制数据。
737 0
|
Java Spring 缓存
Hessian解析及应用(整合Spring)
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。------来自百度百科。         看官网简介吧:http://hessian.
955 0
|
2月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
46 0
|
2月前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
121 0
|
28天前
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
28 2
|
2月前
|
前端开发 搜索推荐 Java
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革
【Spring底层原理高级进阶】基于Spring Boot和Spring WebFlux的实时推荐系统的核心:响应式编程与 WebFlux 的颠覆性变革