1.1.1 spring hessian应用
分类:spring2012-07-26 15:10 628人阅读评论(0) 收藏举报
springwebservicestringjavaservlet防火墙
Spring目前提供了对RMI、 HttpInvoker、Hessian、Burlap及WebService等Remoting技术的集成。Spring屏蔽了这些实现技术的差异,用 户只需开发简单的Java对象(Plain Old Java Objects,POJO)然后按照Spring规定的格式进行配置文件的编写即可。
一、几种Remoting实现的比较
Spring支持的Remoting实现技术是非常多的,虽然Spring屏蔽了这些技术使用上的差异,但是选择一个合适的Remoting技术仍然对系统有非常积极的作用,下面就来讲述这些实现技术的优缺点。
(1) RMI:RMI使用Java的序列化机制实现调用及返回值的编组(marshal)与反编组(unmarshal),可以使用任何可序列化的对象作为参数和返回值。其缺点是RMI只能通过RMI协议来进行访问,无法通过HTTP协议访问,无法穿透防火墙。
(2) Hessian:Hessian也是将网络传输的对象转换为二进制流通过Http进行传递,不过它是使用自己的序列化机制实现的编组与反编组,其支持的数据类型是有限制的,不支持复杂的对象。Hessian的优点是可以透过防火墙。Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据
(3) Burlap:Burlap是将网络传输的对象转换为XML文本格式通过Http进行传递,支持的对象与Hessian相比更少。XML一般比二进制流占用空间大,在网络上传递所需要的时间比二进制流长,XML的解析过程也会耗用更多的内存。Burlap可以穿透防火墙,而且由于传输的格式是XML文本,可以与其他系统(比如.NET)集成,从某种程度来讲,Burlap是一种不标准的WebService。
(4) HttpInvoker:HttpInvoker将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的优点。 Http Invoker是使用Http协议传输二进制流的,而同时又具有Hessian、Burlap的优点。
二、Spring中使用Hessian Remoting技术
使用步骤如下:
1、在web.xml中的配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/applicationContext.xml,
/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>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hessian</servlet-name>
<url-pattern>/hessian/*</url-pattern>
</servlet-mapping>
1)Hessian要求远程服务通过Servlet暴露出来,所以我们使用Spring的DispatcherServlet来暴露我们的服务。
2)我们必须在WEB-INF目录下创建一个文件名格式为 [Servlet Name]-servlet.xml 的配置文件,由于我们设定servlet-name为Hessian,所以我们在这里创建一个名为Hessian-servlet.xml的文件。
2、Hessian-servlet.xml文件的配置
Xml代码
<!-- 业务类 -->
<beanid="hessianService"class="com.cjm.webservice.hessian.HessianServiceImpl"/>
<!-- 远程服务 -->
<beanname="/hessianService"class="org.springframework.remoting.caucho.HessianServiceExporter">
<propertyname="service"ref="hessianService"/>
<propertyname="serviceInterface">
<value>
com.cjm.webservice.hessian.HessianService
</value>
</property>
</bean>
1)实际业务类是通过Spring的HessianServiceExporter类来暴露给客户端的。
2)service:指定服务对应的业务类。
3)serviceInterface:指定业务类实现哪个接口。Spring推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。
4)Hessian的远程服务名为/hessianService。笔者使用的web服务器是Tomcat-5.5.23,端口是8888,web应用名为spring2,则远程服务的URL为:http://localhost:8888/spring2/hessian/hessianService。
3、业务类源代码
Java代码
//接口类:
publicinterface HessianService {
public String sayHello(String username);
public HessianModel getHessianModel(String username, String password);
}
//实现类:
publicclass HessianServiceImpl implements HessianService {
public String sayHello(String username){
return"Hello " + username;
}
public HessianModel getHessianModel(String username, String password) {
returnnew HessianModel(username, password);
}
}
//领域模型类:
publicclass HessianModel implements Serializable{
private String username;
private String password;
public HessianModel(String username, String password){
this.username = username;
this.password = password;
}
……
}
4、客户端调用服务范例
1)在Jsp页面中调用服务
Java代码
String url = "http://localhost:8888/spring2/hessian/hessianService";
HessianProxyFactory factory = new HessianProxyFactory();
HessianService hessianServer =
(HessianService)factory.create(HessianService.class, url);
String ret = hessianServer.sayHello("Raymond.chen");
out.print(ret);
HessianModel model = hessianServer.getHessianModel("uid", "pwd");
out.print("username: " + model.getUsername() + "<br>");
A)结果显示:Hello Raymond.chen
B)客户端程序必须引用hessian-3.0.20.jar文件和远程服务对应的接口类。
C)当调用的远程服务方法返回一个自定义类时,该自定义类必须实现Serializable接口。
2)在Spring环境中调用服务
Xml代码
<beanid="testHessianService"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<propertyname="serviceUrl"value="http://localhost:8888/spring2/hessian/hessianService"/>
<propertyname="serviceInterface"value="com.cjm.webservice.hessian.HessianService"/>
</bean>
<!- Struts2中调用服务 -->
<beanid="orgAction"class="com.cjm.web.action.OrganizationAction"parent="baseAction">
<propertyname="organizationService"ref="organizationService"/>
<propertyname="testHessianService"ref="testHessianService"/>
</bean>
OrganizationAction.java部分源代码:
Java代码
private HessianService testHessianService;
HessianModel model = testHessianService.getHessianModel("uid", "pwd");
System.out.println("username: " + model.getUsername());
A)使用HessianProxyFactoryBean来连接服务。
B)serviceUrl:远程服务的URL。
C)serviceInterface:服务对应的接口类。
如果需要改用Burlap,则将上面的 HessianServiceExporter改成BurlapServiceExporter,HessianProxyFactory改成 BurlapProxyFactory就可以,接口和实现类的代码均不需要修改;同样如果要改用HttpInoker,只要将上面的 HessianServiceExporter改成HttpInvokerService- Exporter,将HessianProxyFactory改成HttpInvokerProxyFactoryBean就可以了。
相关推荐
该案例主要为hessian+spring结合进行接口开发,参数可直接传输!
1.名称:Spring + Hessian + Spring MVC(包括Server和Client).zip 2.来源:自己实现 3.备注:项目有两个系统,包括Server端和Client端,项目已经跑通,可以实现。 4.注意:client中pom.xml里最后的一个jar包,需要...
这是Hessian和Spring集成的示例,具体步骤请参考本人博客: http://blog.csdn.net/jjasun/article/details/29593083
hessian+srping 整合示例文档
spring+hessian+maven整合.zip
struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...
Spring + Mybatis + Hessian 亲自手写,附带测试用例,有问题随时提问。操作流程,自己导入sql,并修改数据库配置,配置Tomcat后启动服务,然后启动Tomcat, 最后测试用例。 测试用例步骤:步骤1.Run HessianTest. ...
Nepxion Thunder是一款基于Netty + Hessian + Kafka + ActiveMQ + Tibco + Zookeeper(Curator Framework) + Redis + FST + Spring + Spring Web MVC + Spring Boot + Docker分布式RPC调用框架。架构思想主要是来自...
Struts2+mybatis3+spring3整合的一个Student添加,删除,查询小案例。架包需要自己加入哦 。亲~
hessian与spring整合的jar包
Hessian与Spring整合需要jar包,需要的同学进行下载学习
NULL 博文链接:https://ml5858258-sina-com.iteye.com/blog/1260842
Hessian与spring整合的dome
NULL 博文链接:https://xmong.iteye.com/blog/1329804
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1228288
Spring集成Hessian案例
引入该工程,在接口上添加@hessianService注解,在client定义url,在client端的xml里面配置hessianClientBuilder,在server里面配置hessianServerBuilder,并实例化接口。在client端里面使用接口并注入即可。
webservice技术,基于spring+hessian框架开发的简单实例
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。参考文档地址...