hessian学习

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.HessianServlet
17         </servlet-class>
18
19         <init-param>
20             <param-name>home-class</param-name>
21             <param-value>
22                 <!-- 服务实现类 -->
23                 yjmyzz.cnblogs.com.service.impl.HelloServiceImpl
24             </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     @Test
13     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 }

示例源码地址:http://code.taobao.org/p/spring-mvc4-rest/src/

 

时间: 2024-10-26 12:38:29

hessian学习的相关文章

用WebSphere DataPower实现Hessian客户端访问标准Web服务

简介:与主流的基于 XML 消息和 SOAP 协议的 Web 服务相比,Hessian 是轻量级的二进制 RPC 协议 ,具有简单和高效的优势.本教程提出了利用 WebSphere DataPower 对协议和数据格式进行转换,实现 标准 Web 服务对 Hessian 客户端的支持,使得 Hessian 客户端在不改变代码条件下很容易的访问基于 标准 SOAP 协议的 Web 服务. 开始之前 关于本教程 本教程详细地介绍了如何安装.配置和使用 WebSphere DataPower 实现 H

一篇文章学会spring boot(包括jms和hessian的集成)

之前在学习spring cloud微服务的时候,由于spring cloud的基础是spring boot,因此曾简单地了解过spring boot,但也只是简单的了解过而已. 而现在,需要把struts2项目改为spring boot,一开始时以为是整个项目重构,不仅限于struts2部分,因此就相对更系统.更细致的学了一下spring boot. 整个过程由易到难,大概分成了这么些模块: 一.创建简单的spring boot web项目 很多时候学一个新的东西,都需要从最简单的地方开始,然后

java和c#使用hessian通信

介绍 hessian主页:http://hessian.caucho.com/ 一个简单的例子学习hessian服务:服务端为Java,客户端为C#. 先要准备好C#和Java的第三方类库:http://hessian.caucho.com/ Hssiancharp.dll hessian-4.0.37.jar Hessian服务端(java) 打开eclipse创建一个Dynamic Web Project,将hessian-4.0.37.jar放到lib下,大概如图所示: 创建一个通信接口I

剑桥大学研究院总结:26条深度学习经验

[编者按]8月初的蒙特利尔深度学习暑期班,由Yoshua Bengio. Leon Bottou等大神组成的讲师团奉献了10天精彩的讲座,剑桥大学自然语言处理与信息检索研究组副研究员Marek Rei参加了本次课程,在本文中,他精炼地总结了学到的26个有代表性的知识点,包括分布式表示,tricks的技巧,对抗样本的训练,Neural Machine Translation,以及Theano.Nvidia Digits等,非常具有参考价值. 八月初,我有幸有机会参加了蒙特利尔深度学习暑期学校的课程

关于深度学习:大神Yoshua Bengio提供了26条经验

雷锋网按:本文译者刘翔宇,中通软开发工程师,关注机器学习.神经网络.模式识别. 1.分布式表示(distributed representations)的需要 在Yoshua Bengio开始的讲座上,他说"这是我重点讲述的幻灯片".下图就是这张幻灯片: 假设你有一个分类器,需要分类人们是男性还是女性,佩戴眼镜还是不佩戴眼镜,高还是矮.如果采用非分布式表示,你就在处理2*2*2=8类人.为训练精准度高的分类器,你需要为这8类收集足够的训练数据.但是,如果采用分布式表示,每一个属性都会在

《深度学习导论及案例分析》-第1章 概述 1.1深度学习的起源和发展

第1章 概述 如何让机器从经验中学习长期以来都是哲学界和科学界的研究目标之一.学习能力对人类智能的形成和发展无疑起着至关重要的作用,而机器学习的研究显然有助于提高人工智能的水平.从原始的输入数据到产生意义的理解过程往往需要经过许多不同层次的信息处理.转换.表达和抽象,如果涉及的层次较深,深度学习的模型和方法就可能发挥重要作用.本章主要勾画深度学习的起源和发展.特点和优势.模型和算法. 1.1深度学习的起源和发展 作为一种实现人工智能的强大技术,深度学习(deep learning)已经在手写数字

《深度学习导论及案例分析》一 第1章 概述1.1深度学习的起源和发展

第1章 概述 如何让机器从经验中学习长期以来都是哲学界和科学界的研究目标之一.学习能力对人类智能的形成和发展无疑起着至关重要的作用,而机器学习的研究显然有助于提高人工智能的水平.从原始的输入数据到产生意义的理解过程往往需要经过许多不同层次的信息处理.转换.表达和抽象,如果涉及的层次较深,深度学习的模型和方法就可能发挥重要作用.本章主要勾画深度学习的起源和发展.特点和优势.模型和算法. 1.1深度学习的起源和发展 作为一种实现人工智能的强大技术,深度学习(deep learning)已经在手写数字

2017年深度学习必读31篇论文(附下载地址)

2017年即将擦肩而过,Kloud Strife在其博客上盘点了今年最值得关注的有关深度学习的论文,包括架构/模型.生成模型.强化学习.SGD & 优化及理论等各个方面,有些论文名扬四海,有些论文则非常低调. 一如既往,首先,标准免责声明适用,因为今年仅与GAN有关的论文就超过1660篇.我肯定会有疏漏,试图缩减到每两周一篇论文,包含了Imperial Deep Learning Reading Group上的大量素材.无论如何,我们开始吧. 架构/模型 今年的Convnet网络架构已经少得多,

从8个方面对移动设备阅读体验进行研究学习

一直想对移动设备阅读体验进行较为完整的研究和学习,但内容太多,涉及到非常多的传统平面设计知识,目前仅初步地完整字体部分.完整的研究框架包括: 1.界面版式设计的方法.常用的栅格分割适合移动设备多分辨率复杂内容的自动排版,内容可控制时是否可以模仿杂志的复杂不规则排版方式,以达到最佳的阅读体验. 2.移动设备上最佳的字体有什么必要的设计要素?如下图,更多的内容包括字体颜色.字间距.行间距和字体渲染等,不同的内容需要不同的字体.随着屏幕分辨率和显示精度的发展,字体也有一个进化过程. 3.屏幕亮度等参数