hessian(一)
来源:互联网 发布:arcgis js query post 编辑:程序博客网 时间:2024/06/06 17:37
转自:http://www.cnblogs.com/yjmyzz/p/hessian-helloworld.html
hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:http://hessian.caucho.com/
目前已经支持N多语言,包括:java/c#/flex/php/ruby...
maven的依赖项如下:
1 <dependency>2 <groupId>com.caucho</groupId>3 <artifactId>hessian</artifactId>4 <version>4.0.37</version>5 </dependency>
入门示例:
一、服务端开发
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 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3 "http://java.sun.com/dtd/web-app_2_3.dtd" > 4 5 <web-app> 6 <display-name>hessian-showcase</display-name> 7 8 <welcome-file-list> 9 <welcome-file>index.jsp</welcome-file>10 </welcome-file-list>11 12 <servlet>13 <servlet-name>hessian-service</servlet-name>14 15 <servlet-class>16 com.caucho.hessian.server.HessianServlet17 </servlet-class>18 19 <init-param> 20 <param-name>home-class</param-name> 21 <param-value>22 <!-- 服务实现类 -->23 yjmyzz.cnblogs.com.service.impl.HelloServiceImpl24 </param-value>25 </init-param>26 27 <init-param> 28 <param-name>home-api</param-name>29 <!-- 服务接口 -->30 <param-value>yjmyzz.cnblogs.com.service.HelloService</param-value>31 </init-param>32 33 </servlet>34 35 <servlet-mapping>36 <servlet-name>hessian-service</servlet-name>37 <url-pattern>/hessian</url-pattern>38 </servlet-mapping>39 40 </web-app>
部署到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 <!-- spring mvc --> 2 <servlet> 3 <servlet-name>appServlet</servlet-name> 4 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 5 <init-param> 6 <param-name>contextConfigLocation</param-name> 7 <param-value>classpath:servlet-context.xml</param-value> 8 </init-param> 9 <load-on-startup>1</load-on-startup>10 <async-supported>true</async-supported>11 </servlet>12 13 <servlet-mapping>14 <servlet-name>appServlet</servlet-name>15 <url-pattern>/</url-pattern>16 </servlet-mapping>
这是spring mvc的入口,拦截所有访问路径,可以把这一节再复制一份,追加在后面,只不过url-pattern指定成特定的规则
1 <!-- spring mvc --> 2 <servlet> 3 <servlet-name>appServlet</servlet-name> 4 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 5 <init-param> 6 <param-name>contextConfigLocation</param-name> 7 <param-value>classpath:servlet-context.xml</param-value> 8 </init-param> 9 <load-on-startup>1</load-on-startup>10 <async-supported>true</async-supported>11 </servlet>12 13 <servlet-mapping>14 <servlet-name>appServlet</servlet-name>15 <url-pattern>/</url-pattern>16 </servlet-mapping>17 18 19 <!-- hessian -->20 <servlet>21 <servlet-name>hessianServlet</servlet-name>22 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>23 <init-param>24 <param-name>contextConfigLocation</param-name>25 <param-value>classpath:hessian-context.xml</param-value>26 </init-param>27 <load-on-startup>1</load-on-startup> 28 </servlet>29 30 <servlet-mapping>31 <servlet-name>hessianServlet</servlet-name>32 <url-pattern>/hessian/*</url-pattern>33 </servlet-mapping>
这样,所有以/hessian/开头的访问路径,约定成hessian服务地址,详细配置在hessian-context.xml中,内容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 6 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 8 9 10 <bean id="helloServiceImpl" class="com.cnblogs.yjmyzz.service.hessian.support.HelloServiceImpl" />11 12 <!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务 -->13 <bean name="/service"14 class="org.springframework.remoting.caucho.HessianServiceExporter"> 15 <property name="service" ref="helloServiceImpl" />16 <!-- Hessian服务的接口 -->17 <property name="serviceInterface" value="com.cnblogs.yjmyzz.service.hessian.HelloService" />18 </bean>19 20 </beans>
这样,就能直接以http://localhost:8080/spring-mvc4-rest/hessian/service 发布hessian服务了
再来看看客户端如何整合,类似的,我们需要一个配置文件,比如:hessian-client.xml,内容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/context 7 http://www.springframework.org/schema/context/spring-context.xsd"> 8 9 <bean id="hessianClient"10 class="org.springframework.remoting.caucho.HessianProxyFactoryBean">11 <property name="serviceUrl">12 <value>http://localhost:8080/spring-mvc4-rest/hessian/service</value>13 </property>14 <property name="serviceInterface">15 <value>com.cnblogs.yjmyzz.service.hessian.HelloService</value>16 </property>17 </bean>18 19 </beans>
调用示例:
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 }
- hessian(一)
- Hessian探究(一)Hessian入门示例
- Hessian学习总结(一)
- Hessian源码剖析(一)
- Hessian探究(一)Hessian与Spring结合
- Hessian探究(一)Hessian与springMVC结合
- hessian源码分析(一)------架构
- hessian源码分析(一)------架构
- hessian源码分析(一)------架构
- hessian(一)--基本使用
- hessian入门案例(一)
- Hessian知识学习总结(一)——基础知识
- 机器学习----神经网络(一)Jacobian矩阵和Hessian矩阵
- Flex + Hessian 学习笔记(一)
- Hessian的学习笔记一
- 一、hessian通讯协议简介
- 【RPC框架Hessian一】Hessian RPC Hello World
- Hessian学习总结(一)——Hessian入门
- git stash 命令
- Node.js进阶
- Android中使用Bitmap会出现OutOfMemory的原因(转)
- 解决VM安装Ubuntu16.10卡在open-vm-tools
- Linux sprintf,sscanf,strcmp,strict_strtoull,memchr
- hessian(一)
- 常用网址收藏
- java配置文件
- 关于并发模型 Actor 和 CSP
- android系统截屏接口
- Convert BST to Greater Tree
- block解决循环引用详细解释
- JAVA 抓取当当图书文字并保存本地TXT文档
- apt-cache命令的常规用法