转载请出自出处:http://eksliang.iteye.com/blog/2267513
一、概述
Hessian和Burlap是CauchoTechnology提供的两种基于HTTP的轻量级远程服务解决方案。他们都致力于借助尽可能简单的API和通信协议来简化Web服务。
你可能会问,为什么Caucho对同一个问题会有两种解决方案。Hessian和Burlap就如同一个事物的两面,但是每一个解决方案都服务于略微不同的目的。Hessianx像RMI一样,使用二进制消息进行客户端和服务器之间的交互。但是与其他二进制远程调用技术(例如RMI)不同是,他的二进制消息可以移植到其他非Java语言中,包括PHT、C++和C#
Burlap是一种基于XML的远程过程调用技术,这使得他可以自然而然的移植到任何能够解析XML的语言上。正是因为他是基于XML的,所以相比起Hessian的二进制格式而言,Burlap可读性更强。但是与其他基于XML的远程技术(例如SOAP或者XML-RPC)不同,Burlap的消息结构尽可能的简单,不需要额外的外部定义语言(例如WSDL、IDL)。
Hessian和Burlap的在很大程度上是一样的的。唯一的区别在于Hessian的消息是二进制的,而Burlap的消息是XML。由于Hessian的消息是二进制的,所以他在宽带上更加具有优势。但是如果我们更加关注可读性,那么Burlap的XML消息会是更好的选择。
二、在Spring导出(发布)一个Hessian/Burlap服务
2.1、定义服务接口UserService
import java.util.List; import com.gosun.jws.daomain.Users; /** * 服务的接口 * @author Ickes * */ public interface UserService { /** * 测试返回list * @return */ public List<Users> geAlltUsers(); /** * 测试返回实体,以及传人普通参数 * @param id * @return */ public Users getUser(String id); /*** * 测试传入对象 * @param user */ public void save(Users user); /** * 测试传人集合 * @param users */ public void saves(List<Users> users); }
2.2、服务接口实现类
import java.util.List; import com.gosun.jws.daomain.Users; import com.gosun.jws.daomain.UsersFactory; public class UserServiceImpl implements UserService { @Override public List<Users> geAlltUsers() { return UsersFactory.getUsers(); } @Override public Users getUser(String id) { System.out.println(id); return UsersFactory.getUser(); } @Override public void save(Users user) { System.out.println(user.toJson()); } @Override public void saves(List<Users> users) { for (Users u : users) { System.out.println(u.toJson()); } } }
测试用到的:UsersFactory工具类和Users实体类在:http://eksliang.iteye.com/blog/2265021篇文章的3.1和3.2代码中
2.3、配置Spring的HessianProxyFactoryBean
<!-- 在Spring中装配hessian服务 --> <bean id="hessianUserService" class="org.springframework.remoting.caucho.HessianServiceExporter"> <!--需要发布的实现类 --> <property name="service" ref="userServiceHessian" /> <property name="serviceInterface" value="com.gosun.jws.hessian.UserService" /> </bean> <!-- 在spring中装配burlap服务 --> <bean id="burlapUserService" class="org.springframework.remoting.caucho.BurlapServiceExporter"> <!--需要发布的实现类 --> <property name="service" ref="userServiceHessian" /> <property name="serviceInterface" value="com.gosun.jws.hessian.UserService" /> </bean> <!-- 将特定的请求映射到具体的hessianservice --> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hessianUserService.service">hessianUserService</prop> <prop key="/burlapUserService.service">burlapUserService</prop> </props> </property> </bean> <bean id="userServiceHessian" class="com.gosun.jws.hessian.UserServiceImpl" />
2.4、配置Hessian控制器
因为Hessian是基于Http的,所以 HessianServiceExporter和BurlapServiceExporter需要实现一个Spring MVC控制器,这意味着为了使用导出的Hessian服务,我们需要执行两个额外的配置 步骤:
- 在web.xml中配置Spring的DispatcherServlet,并把我们的应用部署为Web应用;
- 在Spring的配置文件中配置一个URL出来器,将Hessian服务的URL分发给对应的Hessian服务Bean;
web.xml中配置DispatcherServlet:
<!-- Hessian控制器配置 Servlet --> <servlet> <servlet-name>hessian</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- dispatcherServlet详解地址:http://jinnianshilongnian.iteye.com/blog/1602617 --> <!-- <init-param> <param-name>namespace</param-name> <param-value>applicationContext-hessian</param-value> </init-param> --> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext-hessian.xml classpath:applicationContext-httpinvoker.xml </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hessian</servlet-name> <url-pattern>*.service</url-pattern> </servlet-mapping>配置Spring的URL处理器,将Hessian服务的URL分发给对应的Hessian服务bean,这段代码已经一起写在了2.3的代码中,就是org.springframework.web.servlet.handler.SimpleUrlHandlerMapping这个类。
这个时候启动服务器,就可以完成对Hessian服务的启动。
三、访问Hessian/Burlap服务
3.1、在spring中配置HessianProxyFactoryBean和BurlapProxyFactoryBean
<!-- 使用spring调用Hession的服务 --> <bean id="hessianUserService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <property name="serviceUrl" value="http://localhost:8080/jws/hessianUserService.service"/> <property name="serviceInterface" value="com.gosun.jws.hessian.UserService" /> </bean> <!-- 使用spring调用Hession的服务 --> <bean id="burlapUserService" class="org.springframework.remoting.caucho.BurlapProxyFactoryBean"> <property name="serviceUrl" value="http://localhost:8080/jws/burlapUserService.service"/> <property name="serviceInterface" value="com.gosun.jws.hessian.UserService" /> </bean>
3.2、使用Spring的API进行调用
import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.gosun.jws.daomain.Users; /** * 在spring中调用 * @author Lenovo * */ public class ClientDemo { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("client-application/applicationContext-hessian.xml"); UserService us = (UserService) ac.getBean("burlapUserService"); Users user = us.getUser("a001"); System.out.println(user.toJson()); System.out.println("----------------------------------------"); List<Users> users = us.geAlltUsers(); for (Users u : users) { System.out.println(u.toJson()); } System.out.println("----------------------------------------"); us.save(user); System.out.println("----------------------------------------"); us.saves(users); } }
3.3、Hessian原始方式调用
import java.net.MalformedURLException; import java.util.List; import com.caucho.hessian.client.HessianProxyFactory; import com.gosun.jws.daomain.Users; /** * 直接使用hessian的API进行调用 * @author Lenovo * */ public class HessianClientDemo { public static void main(String[] args) throws MalformedURLException { String url = "http://localhost:8080/jws/hessianUserService.service"; HessianProxyFactory factory = new HessianProxyFactory(); //如果UserService类有重载方法需要设置,不然会抛出异常 factory.setOverloadEnabled(true); UserService us = (UserService) factory.create(UserService.class,url); Users user = us.getUser("a001"); System.out.println(user.toJson()); System.out.println("----------------------------------------"); List<Users> users = us.geAlltUsers(); for (Users u : users) { System.out.println(u.toJson()); } System.out.println("----------------------------------------"); us.save(user); System.out.println("----------------------------------------"); us.saves(users); } }
相关推荐
Kafka与Spring集成指南 Kafka分布式消息系统是一种高吞吐量、可扩展、基于发布订阅模式的消息系统,广泛应用于大数据处理、实时数据处理和日志处理等领域。Spring Framework是一种流行的Java应用程序框架,提供了一...
**Spring与Hibernate集成详解** 在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全方位的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种服务管理功能。而...
### WebWork与Spring集成:深度解析与实践指南 在企业级应用开发中,框架的集成是提高代码可维护性、扩展性和复用性的关键。WebWork框架与Spring框架的集成便是一个典型示例,它结合了WebWork在MVC架构方面的优势与...
Restlet与Spring集成是将Restlet框架与Spring框架结合,以增强RESTful服务的开发能力。Restlet是一个轻量级的Java框架,专门用于构建REST(Representational State Transfer)架构风格的应用程序。它遵循JAX-RS...
将 Netty 与 Spring 集成,可以利用 Netty 的高性能网络通信能力,同时享受 Spring 提供的便捷的组件管理和应用结构。 在 Netty 和 Spring 集成的过程中,通常涉及以下几个关键知识点: 1. **Spring 上下文**: 在...
- Spring与Struts2集成,Spring可以作为Struts2的Action的依赖注入容器,通过Spring的ApplicationContext获取服务层对象,实现业务逻辑处理。 - Struts2与Hibernate集成,通常在Action中通过SessionFactory获取...
标题 "DWR与SPRING 集成" 涉及到的是两个在Web开发中常用的开源框架——Direct Web Remoting (DWR) 和 Spring。DWR允许在浏览器和服务器之间进行实时、异步的数据交换,而Spring是Java企业级应用的全面解决方案,...
1. **集成Socket服务**:在Spring中集成Socket服务,我们通常会使用`java.net.ServerSocket`类来创建服务器端的Socket,并通过`java.net.Socket`处理客户端连接。为了将Socket服务与Spring框架结合,我们可以创建一...
### dwr与spring集成的方式 #### 一、引言 DWR(Direct Web Remoting)是一种简化Ajax开发的Java框架,允许在客户端直接调用服务器端的Java方法,从而简化了传统的JavaScript编程复杂度。Spring作为一款流行的企业...
将RCP与Spring集成可以充分利用两者的优点,如RCP的图形用户界面优势和Spring的业务逻辑管理能力。现在我们来详细探讨一下这个"rcp与spring集成的一个简单例子"。 首先,集成的初衷是为了将Spring的灵活性和模块化...
drools6.4+spring集成是一项将业务规则引擎Drools与Spring框架相结合的技术实践,旨在利用Drools的强大规则处理能力,结合Spring的灵活应用管理,构建高效、可维护的业务系统。在这个项目实例中,我们将深入探讨如何...
在"Spring cloud与Spring boot集成完整案例"中,我们可以预见到以下内容: - **ace-security**: 可能是关于Spring Security的集成,Spring Security提供了全面的安全解决方案,包括认证、授权等,确保微服务的安全性...
分布式服务治理soa面向服务架构 dubbo与spring集成的最小例子
### JSF与Spring集成知识点详解 #### 一、概述 **JSF (JavaServer Faces)** 和 **Spring** 都是目前广泛使用的Java Web开发框架。JSF 是一个用于构建基于 Java 的 Web 应用程序的标准组件框架,而 Spring 框架则是...
Thymeleaf与Spring集成的关键点在于,它能无缝地与Spring MVC结合,提供了对Spring表达式语言(Spring Expression Language,SpEL)、国际化、资源管理、表单处理等Spring核心功能的支持。通过集成,Thymeleaf可以像...
当我们将Thrift与Spring集成时,我们可以利用Spring的强大功能来管理和协调Thrift服务,从而构建出高效、灵活的分布式系统。 集成Thrift和Spring的主要目的是为了利用Spring的依赖注入(DI)和面向切面编程(AOP)...
3. **配置集成**:在Struts2的配置文件中,我们需要声明一个Struts2-Spring插件,它允许Struts2与Spring进行通信。同时,在Spring的配置文件中,需要定义Action类的bean,并配置好相关属性和依赖。 4. **AOP结合**...
【jbpm与Spring集成】是企业级应用中常见的技术整合,旨在利用jbpm(Java Business Process Management)的流程管理能力,结合Spring框架的灵活服务管理,实现高效、可扩展的业务流程自动化。jbpm是一个开源的工作流...
此外,Spring还提供了与Hibernate的集成,使得在Spring应用中使用Hibernate变得更加便捷。 本书将指导读者如何将这三个框架集成在一起,形成一个强大的企业级应用开发平台。通过实际案例,读者将学习到如何配置...