博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hessian学习
阅读量:6836 次
发布时间:2019-06-26

本文共 5755 字,大约阅读时间需要 19 分钟。

hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:

目前已经支持N多语言,包括:java/c#/flex/php/ruby...

maven的依赖项如下:

1 
2
com.caucho
3
hessian
4
4.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  5 
6
hessian-showcase
7 8
9
index.jsp
10
11 12
13
hessian-service
14 15
16 com.caucho.hessian.server.HessianServlet17
18 19
20
home-class
21
22
23 yjmyzz.cnblogs.com.service.impl.HelloServiceImpl24
25
26 27
28
home-api
29
30
yjmyzz.cnblogs.com.service.HelloService
31
32 33
34 35
36
hessian-service
37
/hessian
38
39 40

部署到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     
2
3
appServlet
4
org.springframework.web.servlet.DispatcherServlet
5
6
contextConfigLocation
7
classpath:servlet-context.xml
8
9
1
10
true
11
12 13
14
appServlet
15
/
16

这是spring mvc的入口,拦截所有访问路径,可以把这一节再复制一份,追加在后面,只不过url-pattern指定成特定的规则

1 
2
3
appServlet
4
org.springframework.web.servlet.DispatcherServlet
5
6
contextConfigLocation
7
classpath:servlet-context.xml
8
9
1
10
true
11
12 13
14
appServlet
15
/
16
17 18 19
20
21
hessianServlet
22
org.springframework.web.servlet.DispatcherServlet
23
24
contextConfigLocation
25
classpath:hessian-context.xml
26
27
1
28
29 30
31
hessianServlet
32
/hessian/*
33

这样,所有以/hessian/开头的访问路径,约定成hessian服务地址,详细配置在hessian-context.xml中,内容如下:

1 
2
8 9 10
11 12
13
15
16
17
18
19 20

这样,就能直接以http://localhost:8080/spring-mvc4-rest/hessian/service 发布hessian服务了

再来看看客户端如何整合,类似的,我们需要一个配置文件,比如:hessian-client.xml,内容如下:

1 
2
8 9
11
12
http://localhost:8080/spring-mvc4-rest/hessian/service
13
14
15
com.cnblogs.yjmyzz.service.hessian.HelloService
16
17
18 19

调用示例:

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 }

示例源码地址:

 

转载地址:http://kkqkl.baihongyu.com/

你可能感兴趣的文章
变量、中文-「译」javascript 的 12 个怪癖(quirks)-by小雨
查看>>
合作开发用到的几个 设计模式
查看>>
[iOS] 在UIToolBar中增加UILabel等控件(xib/storyboard图形界面方式)
查看>>
宋体节点hdoj 1520 Anniversary party(树形dp)
查看>>
优化网站设计(七):避免在CSS中使用表达式
查看>>
让你的网站拥有微博(weibo.com)关注图标
查看>>
hadoop基本命令
查看>>
若不能连接到sql server的localhost
查看>>
JavaScript无提示关闭窗口(兼容IE/Firefox/Chrome)
查看>>
Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
查看>>
JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...
查看>>
格式资料python sqlalchemy 查询结果转化为 Json格式
查看>>
超链接浏览<meta name="format-detection"/> 的用法
查看>>
请求网络网络编程
查看>>
文件目录Android SDK目录结构
查看>>
Asp.net Web.Config - 配置元素customErrors
查看>>
Android: how to resolve Application’s parameter NullPointerException
查看>>
EntityFramework用法探索(二)CodeFirst
查看>>
人人都来写算法 之 快速排序
查看>>
[转]SQLServer和Oracle,存储过程区别,常用函数对比
查看>>