今天我们来学一下Burlap。
Burlap是一种基于XML远程调用技术,但与其他基于XML的远程技术(例如SOAP或者XML-RPC)不同,Burlap的消息结构尽可能的简单,不需要额外的外部定义语言(例如WSDL或IDL)。
Burlap和Hessian很大程度上,它们是一样的,唯一的区别在于Hessian的消息是二进制的,而Burlap的消息是XML。(Burlap和Hessian代码实现上也很相似)
接下来我们看一下代码的实现:
一、首先我们先创建一个实体类,这里不需要实现Serializable接口
packageentity;public classFood {privateString name;private doubleprice;publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public doublegetPrice() {returnprice;
}public void setPrice(doubleprice) {this.price =price;
}
}
二、我们来定义一个接口
packageservice;importjava.util.List;importentity.Food;public interfaceFoodService {
ListgetFoodList();
}
三、定义一个类,实现步骤二中的接口,并继承BurlapServlet类(这里需要用到Burlap的jar文件,可以到这里下载http://www.findjar.com/jar/burlap/jars/burlap-2.1.7.jar.html)
packageservice.impl;importjava.util.ArrayList;importjava.util.List;importservice.FoodService;importcom.caucho.burlap.server.BurlapServlet;importentity.Food;public class FoodServiceImpl extends BurlapServlet implementsFoodService {public ListgetFoodList() {
List list=new ArrayList();
Food f1=newFood();
f1.setName("酸菜鱼");
f1.setPrice(25);
Food f2=newFood();
f2.setName("糖醋鱼");
f2.setPrice(23);
list.add(f1);
list.add(f2);returnlist;
}
}
四、现在我们可以在WEB-INF下的web.xml中配置一个servlet(Hessian也可以这样配置servlet)
food
service.impl.FoodServiceImpl
food
/food
五、我们来写一下测试代码,看一下结果
packagetest;importjava.util.List;importservice.FoodService;importcom.caucho.burlap.client.BurlapProxyFactory;importentity.Food;public classTest {public static voidmain(String[] args) {
String url="http://127.0.0.1:8080/test/food";
BurlapProxyFactory factory=newBurlapProxyFactory();try{
FoodService foodSevice=(FoodService) factory.create(FoodService.class, url);
List foodList =foodSevice.getFoodList();for(Food food : foodList) {
System.out.println(food.getName()+":"+food.getPrice()+"元。");
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
控制台显示的结果为:
=========控制台=========
酸菜鱼:25.0元。
糖醋鱼:23.0元。
========================
接下来我们看一下Spring整合Burlap,这里和Spring整合Hessian基本差不多。
Spring整合Burlap
一、我们来定义一个接口
packageservice;importjava.util.List;importentity.Food;public interfaceFoodService {
ListgetFoodList();
}
二、定义一个类,实现步骤二中的接口
packageservice.impl;importjava.util.ArrayList;importjava.util.List;importservice.FoodService;importentity.Food;public class FoodServiceImpl implementsFoodService {public ListgetFoodList() {
List list=new ArrayList();
Food f1=newFood();
f1.setName("酸菜鱼");
f1.setPrice(25);
Food f2=newFood();
f2.setName("糖醋鱼");
f2.setPrice(23);
list.add(f1);
list.add(f2);returnlist;
}
}
三、我们可以在WEB-INF下的web.xml中配置SpringMVC需要信息
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
springMvc
org.springframework.web.servlet.DispatcherServlet
1
springMvc
/
四、在applicationContext.xml中配置需要导出服务的bean信息
/>
五、在WEB-INF下新建springMvc-servlet.xml文件,并配置信息
FoodService
六、在客户端程序applicationContext.xml中配置获取服务的bean信息
/>
七、现在我们编写测代码
packagetest;importjava.util.List;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importentity.Food;importservice.FoodService;public classTest {public static voidmain(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
FoodService foodService=(FoodService) ctx.getBean("getFoodService");
List foodList =foodService.getFoodList();for(Food food : foodList) {
System.out.println(food.getName()+":"+food.getPrice()+"元。");
}
}
}
接下来我们把项目部署到Tomcat上面,并且启动服务。运行测试代码
======控制台=======
酸菜鱼:25.0元。
糖醋鱼:23.0元。
===================
到这里我们已经学习了Spring整合Burlap。