搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
天景科技苑
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
java 爬虫概要_java爬数据概要设计
2
第六篇:图数据库技术:知识图谱的存储与查询_知识图谱查询
3
「VUE架构」VUE2.0 Axios深入浅出_vue2 支持axio 版本
4
图数据库_图数据库成为主流
5
java八股文主要内容:_java八股文包括哪八部分
6
【VPS折腾记】nextcloud——配置优化(二)_nextcloud优化
7
Burpsuite靶场——文件上传漏洞
8
ESP32入门教程(四)基于ESP-32 WROOM开发板的WEB网页控制步进电机滑台(A4988)_esp32 a4988
9
浅谈云上攻防——云服务器攻防矩阵_云安全攻防
10
<黑神话·悟空> 是用什么编程语言开发的?
当前位置:
article
> 正文
Java操作Hessian
作者:天景科技苑 | 2024-08-21 13:45:59
赞
踩
动态切换hessian
[size=medium]一、首先先说Hessian是什么?
Hessian:hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能,相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用了二进制协议,所以它很适合于发送二进制数据,Hessian主要作面向对象的消息通信。Hessian的初衷就是支持动态类型,格式紧凑,跨语言Hessian是使用自己的序列化机制实现的编组和反编组,其支持的数据类型是有限制的,不支持复杂的对象,可以穿透防火墙,在这里不得不说一下RMI:RMI是一组用户开发分布式应用程序的API。他使用的是java序列化机制实现调用及返回值的编组于反编组。它使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。他可以被看做是RPC的Java版本,因为传统的RPC并不能很好的应用于分布式对象系统。而Java RMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。他也有它的缺点,他只能通过RMI协议来进行访问无法通过HTTP协议访问,无法穿透防火墙。
还有一种远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的优点。试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml文本)的优点。
二、写一个简单的hessian通信所需要知道写哪些内容?
Hessian:写一个Hessian需要注意的问题:
1、JAVA服务器端必须具备以下几点:
包含Hessian的jar包
设计一个接口,用来给客户端调用
实现该接口的动能
配置web.xml,配置相应的servlet
对象必须实现Serializable接口
对于复杂对象可以使用Map的方法传递
2、客户端必须具备以下几点:
java客户端包含Hessian.jar包
具有和服务器端结构一样的接口和实体类。包括命名空间都最好一样。利用HessianProxyFactory调用远程接口
三、简单hessian实例:
1、在服务端的接口:
public interface IHello {
String sayHello();
}
2、在服务端的实现类:
public class IHelloImpl extends HessianServlet implements IHello {
@Override
public String sayHello() {
// TODO Auto-generated method stub
return "Hello,I from HessianService";
}
}
3、在客户端的类:
public class ClientTest {
public static String url = "http://127.0.0.1:8080/HessianService/Hello";
public static void main(String[] args){
HessianProxyFactory factory = new HessianProxyFactory();
try {
IHello iHello = (IHello) factory.create(IHello.class, url);
System.out.println(iHello.sayHello());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、先将服务器端的类link到客户端,或者是将服务器端打包放到客户端,
4、在web.xml中进行配置:
服务器端: <servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>home-class</param-name>
<param-value>com.kcpt.hessian.service.IHelloImpl</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>com.kcpt.hessian.service.IHello</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
执行成功:输出Hello,I from HessianService,这是简单的hessian实现方式,看起来比较简单
四、hessian与spring结合.
在实际应用中,我们不只是简单的只使用hessian来进行通信的,如果方法多得话,还不如直接写在客户端来调用,然而:当hessian与spring结合后,大大减少了这些操作,将dao层的操作全部放在hessian服务端,将业务逻辑全部放在hessian客户端,这样的话我们的hessian客户端和服务端完全分离,因此我们的业务逻辑和dao层就真正的达到了分离,就可以放在不同的服务器上,当然hessian的通信的作用不仅仅只有这些。
接口和实现和上边的一样:只是在web.xml中配置比较麻烦:
例子:
1、服务器端:增加remoting-servlet.xml配置文件:用来配置bean,并将bean导出为hessian服务:
<?xml version = "1.0" encoding = "UTF-8" ?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop = "http://www.springframework.org/schema/aop"
xmlns:tx = "http://www.springframework.org/schema/tx"
xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" >
<!-- 定义普通的bean实例 -->
<bean id="Hello" class="com.kcpt.hessian.service.IHelloImpl"/>
<!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务-->
<bean name="/remoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
<!-- 需要导出的目标bean-->
<property name="service" ref="Hello"/>
<!-- Hessian服务的接口-->
<property name="serviceInterface" value="com.kcpt.hessian.service.IHello"/>
</bean>
</beans>
2、web.xml文件的配置:
首先是监听器:spring的监听器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <!--添加监听器 -->
</listener>
<!-- 指定spring的配置文件在哪里,在这个配置文件中导出了Hessian服务 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/remoting-servlet.xml</param-value>
</context-param>
<!-- Hessian通过Servlet提供远程服务,需要将某个匹配的模式映射到hessian服务中,spring的dispatcherServlet能完成此功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,该转发器将匹配/remoting/*的请求截获,转发给context的bean处理。而HessianServiceExporter提供bean服务。 -->
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
3、在客户端:
同样要加spring监听器和context-param指定bean的文件
声明bean的xml文件:
<?xml version = "1.0" encoding = "UTF-8" ?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop = "http://www.springframework.org/schema/aop"
xmlns:tx = "http://www.springframework.org/schema/tx"
xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" >
<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl"> //hessian的地址和名称请求转发的名称
<value>http://127.0.0.1:8080/HessianService/remoting</value>
</property>
<property name="serviceInterface"> //hessian所要调用的接口
<value>com.kcpt.hessian.service.IHello</value>
</property>
</bean>
</beans>
4、客户端的程序中要写:
ApplicationContext context = new ClassPathXmlApplicationContext("com/kcpt/hessian/client/remoting-client.xml"); //这里只是你声明的bean的xml文件所在的路径
IHello b = (IHello) context.getBean("myServiceClient");
来获取到ihello这个接口,从而就能够调用这个接口里的方法进行操作[/size]
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/天景科技苑/article/detail/1012047
推荐阅读
article
最新
Java
高频
面试
集锦
,
让你“
金九银
十”轻松斩获
offer
_高级
java
开发
面试
题大全...
这是一份全面的
Java
面试
指南
,
涵盖了从基础到高级的208道
面试
题
,
包括
Java
基础、容器、多线程、反射、网络、设计模式...
赞
踩
article
java
exec
执行
tar
_
java
调用
系统命令
获
MAC
、
解压缩
tar
包...
public class procee {public static void main(String[] args) ...
赞
踩
article
推荐文章:
阿里
云
SDK
管理型
凭证
提供者
for
Java
—— 让
云
服务访问更安全、便捷......
推荐文章:
阿里
云
SDK
管理型
凭证
提供者
for
Java
—— 让
云
服务访问更安全、便捷 aliyun-sdk-mana...
赞
踩
article
八大
排序
算法
总结与
java
实现_
八大
排序
算法
演示
java
csdn
...
原文链接:
八大
排序
算法
总结与
java
实现 - iTimeTraveler概述因为健忘,加上对各种
排序
算法
理解不深刻,过...
赞
踩
article
Java
集合框架:
Java
中的
优先级
队列
PriorityQueue
的实现_
java
coll...
在
Java
中是一种基于堆(Heap)数据结构实现的
优先级
队列。堆是一种特殊的完全二叉树,分为最小堆和最大堆。在最小堆...
赞
踩
article
RabbitMQ
之
Windows
下的
安装
部署
_
rabbitmq
-
java
-
client
插件下载...
本文详细介绍了在
Windows
环境下
安装
部署
RabbitMQ
的步骤,包括配置Erlang环境,设置环境变量,
安装
Rabb...
赞
踩
article
CentOS
上安装
Java
17...
要在
CentOS
上安装
Java
17,您可以使用多种方法。这里我将向您展示如何通过下载 Oracle 提供的 Ja...
赞
踩
article
【CentOS】
安装
Java
环境_
centos
安装
java
环境...
本文档详细介绍了如何在CentOS7系统上
安装
JDK 1.8。首先,通过XShell上传JDK
安装
包到指定目录并解压。接...
赞
踩
article
Java
SpringBoot
各种
参数
配置
方式的
优先级
_
java
启动
参数
优先级
...
本文主要讨论了在
Java
中,命令行
参数
(-Dxxx=xxx)的设置如何遵循
优先级
规则,即高于application.pr...
赞
踩
article
【
Java
Web】014 --
SpringBoot
原理(配置
优先级
、
Bean
管理、SpringB...
SpringBoot
原理(配置
优先级
、
Bean
管理、
SpringBoot
原理),内容注意包括:配置文件(.propert...
赞
踩
article
java
springboot
配置
方式
优先级
排序_
java
的
配置
文件
的
优先级
...
本文介绍了在SpringBoot项目中,包括application.yaml和application.propertie...
赞
踩
article
Java
8
并发
集合
:安全高效的
多线程
集合
_
concurrenthashmap
和concurrent...
在
多线程
环境中,使用线程安全的数据结构非常重要,以避免竞态条件和数据不一致的问题。
Java
8引入了一些
并发
集合
类,提供...
赞
踩
article
Java
并发
集合
:高效线程安全的
数据结构
...
Java
并发
集合
:高效线程安全的
数据结构
大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序...
赞
踩
article
Java
集合
系列之并发包(
java
.
util
.
concurrent
)下
的
高级
集合
类_
java
con...
先看一张描述
java
.
util
.
concurrent
包下
集合
组成结构
的
类图下列介绍
的
集合
统一特性:线程安全,支持并发操作...
赞
踩
article
【
Java
基础】
Java
并发
集合
容器_
java
并发
集合
...
ConcurrentHashMap是
Java
中的一个线程安全的哈希表实现,它是HashMap的线程安全版本。与HashM...
赞
踩
article
Java
-
正则表达式
...
Java
提供了 java.util.regex 包,它包含了 Pattern 和 Matcher 类,用于处理正则表达...
赞
踩
article
题解 | #最大差值# c++&
amp
;
java
&
amp
;
Python3
_
增长率
最高值与最低值相...
天地不仁,以万物为刍狗。今天笔试题一做,难度和之前站点都不在同一级别,SQL题是窗口聚合,编程题是一大堆,处理输入都要好...
赞
踩
article
华为
OD
机试
- 分
披萨
(
Java
& JS &
Python
&
C
&
C
++
)...
本文介绍了一道关于公平分
披萨
的算法问题,问题背景是吃货和馋嘴两人需要轮流从
披萨
切块中选取,以最大化吃货的份额。文章详细解...
赞
踩
article
【华为OD机试】
分
披萨
(
动态
规划-
Java
&
Python
&
C++
&JS实现)_
java
分
披萨
...
本文介绍了如何运用
动态
规划解决华为OD机试中的一道
分
披萨
问题。通过
分
析题意,阐述解题思路,提供
Java
、
Python
、C...
赞
踩
article
【
华为
OD
机试
真题
】456、
分
披萨
|
机试
真题
+
思路
参考+代码解析(CD卷)(本题
100%
)(C+...
题目描述>"吃货" 和 " 馋嘴 "两人到
披萨
店点了一份铁盘(圆形)
披萨
,并让店员将
披萨
按放射状切成大小相同的偶数扇形小...
赞
踩
相关标签
java
面试
开发语言
职场和发展
mysql
java exec执行tar
排序
排序算法
归并排序
冒泡排序
栗筝i 的 Java 技术栈
Java 基础
Java 集合
Java 堆排序
优先级队列
rabbitMQ安装部署
centos
linux
spring boot
Java Web
SpringBoot