hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:
目前已经支持N多语言,包括:java/c#/flex/php/ruby...
maven的依赖项如下:
12 com.caucho 3hessian 44.0.37 5
入门示例:
一、服务端开发
1.1 先建服务接口
1 package yjmyzz.cnblogs.com.service;2 3 public interface HelloService {4 5 public String helloWorld(String message);6 }
1.2 提供服务实现
1 package yjmyzz.cnblogs.com.service.impl; 2 3 import yjmyzz.cnblogs.com.service.HelloService; 4 5 public class HelloServiceImpl implements HelloService { 6 7 @Override 8 public String helloWorld(String message) { 9 return "hello," + message;10 }11 12 }
1.3 修改web.xml
1 4 56 hessian-showcase 7 89 11 12index.jsp 1013 34 35hessian-service 14 1516 com.caucho.hessian.server.HessianServlet17 18 1920 26 27home-class 2122 23 yjmyzz.cnblogs.com.service.impl.HelloServiceImpl24 2528 32 33home-api 29 30yjmyzz.cnblogs.com.service.HelloService 3136 39 40hessian-service 37/hessian 38
部署到tomcat或其它web容器中即可。
1.4 导出服务接口jar包最终服务是提供给客户端调用的,客户端必须知道服务的接口信息(包括接口方法中的传输dto定义),所以得将这些java文件导出成jar,提供给调用方。
方法很简单:eclipse中在接口package(包括dto对应的package)上右击,选择Export
再选择Jar File
二、客户端调用
同样先添加maven的hessian依赖项,同时引入上一步导出的服务接口jar包,然后参考下面的示例代码:
1 import java.net.MalformedURLException; 2 import org.junit.Test; 3 import yjmyzz.cnblogs.com.service.HelloService; 4 import com.caucho.hessian.client.HessianProxyFactory; 5 6 7 public class ServiceTest { 8 @Test 9 public void testService() throws MalformedURLException { 10 11 String url = "http://localhost:8080/hessian-showcase/hessian";12 System.out.println(url);13 14 HessianProxyFactory factory = new HessianProxyFactory();15 HelloService helloService = (HelloService) factory.create(HelloService.class, url);16 System.out.println(helloService.helloWorld("jimmy"));17 18 }19 }
三、与Spring的整合
spring-web包里提供的org.springframework.remoting.caucho.HessianServiceExporter类,可以将普通方法导出成hessian服务。关键是解决org.springframework.web.servlet.DispatcherServlet的url访问路径问题,一般情况下,我们是这样配置的
1 23 12 13appServlet 4org.springframework.web.servlet.DispatcherServlet 56 9contextConfigLocation 7classpath:servlet-context.xml 81 10true 1114 appServlet 15/ 16
这是spring mvc的入口,拦截所有访问路径,可以把这一节再复制一份,追加在后面,只不过url-pattern指定成特定的规则
1 23 12 13appServlet 4org.springframework.web.servlet.DispatcherServlet 56 9contextConfigLocation 7classpath:servlet-context.xml 81 10true 1114 17 18 19 20appServlet 15/ 1621 29 30hessianServlet 22org.springframework.web.servlet.DispatcherServlet 2324 27contextConfigLocation 25classpath:hessian-context.xml 261 2831 hessianServlet 32/hessian/* 33
这样,所有以/hessian/开头的访问路径,约定成hessian服务地址,详细配置在hessian-context.xml中,内容如下:
1 28 9 10 11 12 13 15 19 2016 17 18
这样,就能直接以http://localhost:8080/spring-mvc4-rest/hessian/service 发布hessian服务了
再来看看客户端如何整合,类似的,我们需要一个配置文件,比如:hessian-client.xml,内容如下:
1 28 9 11 18 1912 14http://localhost:8080/spring-mvc4-rest/hessian/service 1315 17com.cnblogs.yjmyzz.service.hessian.HelloService 16
调用示例:
1 package com.cnblogs.yjmyzz.test; 2 import java.net.MalformedURLException; 3 4 import org.junit.Test; 5 import org.springframework.context.ApplicationContext; 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 8 import com.cnblogs.yjmyzz.service.hessian.HelloService; 9 10 public class HessianServiceTest { 11 @SuppressWarnings("resource")12 @Test13 public void testService() throws MalformedURLException {14 ApplicationContext context = new ClassPathXmlApplicationContext(15 "hessian-client.xml");16 HelloService hello = (HelloService) context.getBean("hessianClient");17 System.out.println(hello.helloWorld("jimmy.yang"));18 }19 }
示例源码地址: