当前位置: 首页 > 编程日记 > 正文

Hessian通信案例(java)

个人博客: 戳我,戳我

前言

由于工作的原因,接触到了hessain,项目需要做hessain和xml之间的报文转换。但是对于hessian是个什么东西一头雾水。于是接下来的时间了解了hessain协议的序列化规则以及hessian协议进行通信的方式。这篇文章是在完成了这个模块之后很长一段时间(大概3个月)才记录的。一来这个时候没什么事,二来当时就一直打算记录下学习的过程,后来搁置了。故本文对hessain协议做一个简单介绍,然后搭建了一个Java版的hessian客户端和服务端,实现了hessian通信。

什么是Hessian

什么是rpc?

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RMI是J2EE中标准的RPC服务,RPC的完美封装是的将业务逻辑可以进行分布式部署,将运算密集型的工作进行分流(但请求还是同步的),在使用过程中间封装起实现可以实现在客户端调用的时候完全透明(需要在RMI客户端调用方式进行封装)。

什么是hessian?

Hessian是一个轻量级的,自定义描述的二进制RPC协议。Hessian主要用作面向对象的消息通信。

hessian序列化规则

hessian序列化方式目前有两个版本1.0和2.0,具体可以查看官网http://hessian.caucho.com/doc/hessian-serialization.html。另外我在我的七牛空间上传了hessian协议2.0中文版,有需要的话可以下载,防止官网全英文看不懂。另外hessian官网上提供了各种版本的hessian协议的实现,包括java,c++,c#,Python,.NET,Ruby等,上面其实有比较详细的demo。可以参考,当时我也是参考过的。

Hessian通信案列(java)

环境准备


Eclipse && Tomcat.

资源下载

下载java版的hessian类库: hessian-4.0.37.jar

hessian 服务端

  1. Eclipse中新建Dynamic Web Project

    此处可以看到需要选择Target runtime,需要首先安装Tomcat。

  2. 导入下载的hessian-4.0-37.jar,右键build path->Add to Build path
    导入完成如图:

  3. 开发步骤

    hessian服务端的开发涉及到3个部分。定义接口&&接口实现&&web.xml

    • 定义接口

新建IBasic.java,随便命名。

package test;public interface IBasic {  
public String hello();   
}

此处做演示,只定义了一个最简单的hello函数,实际情况可以在此文件中增加你的接口函数。接口函数就是服务端暴露出来的服务,可以为客户服务的实际内容。故此接口文件也需要在客户端的开发中用到。

  • 接口实现

新建BasicService.java,随便命名。

package test;public class BasicService implements IBasic {private String hello= "Hello, world,my name is nick!";   public String hello() {return hello;
}
}

此文件就是接口函数的具体实现,此处只是针对在IBasic.java中定义好的接口函数。对于小白,简单来说,就是服务端提供了一些服务,或者说暴露了一些服务,也就是接口函数,这些服务供客户端远程调用,就像客户端在本地调用一样,只不过服务端跟客户端的通信采用了一些二进制协议。

  • web.xml
    服务端实现了上述两个文件,基本就算完成了,不过如果需要发布到tomcat运行,还需要在web.xml配置Servlet.

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet>  <servlet-name>ServerMachine</servlet-name>  <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  <init-param>  <param-name>home-class</param-name>  <param-value>test.BasicService</param-value>  </init-param>  <init-param>  <param-name>home-api</param-name>  <param-value>test.IBasic</param-value>  </init-param>  </servlet>  <servlet-mapping>  <servlet-name>ServerMachine</servlet-name>  <url-pattern>/ServerMachine</url-pattern>  </servlet-mapping>  </web-app>

图中需要注意的就是servlet-name,可以修改成你自己喜欢的名字,至于具体这个web.xml里面各个字段的意义,我其实也不清楚,我对java不了解,我一直从事C++开发。当时自己尝试了很多遍。如果你配置的时候发布到Tomcat启动不了,那么请反复修改下吧。

此处还需要注意需要有个index.jsp这个脚本,如下:

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is my JSP page. <br></body>
</html>

这两个文件的放置的位置也很关键,如果不对,是会出错的。见下图:

4 发布到Tomcat,启动hessian_server

这一步的前提是需要在Eclipse中新建Server并配置好。过程略。毕竟现在不会java的不太多了,我当时为了这小个问题还折腾了好久。

成功后如下:
这里注意到上面的URL: http://localhost:8080/hessian_server,这个地址就是hessian服务端的地址,实际情况将localhost换成服务端所在的IP地址,这个地址客户端需要用到。

hessian服务端到这里就完了。这里我只是用了最简单的方式来设置,实际比较复杂的情况下可以使用spring等,具体我还没研究过。

接下来就是hessian客户端的开发了!!

hessain 客户端

  1. Eclipse中新建Java Project

  2. 导入下载的hessian-4.0-37.jar,右键build path->Add to Build path
    导入完成如图:

  3. 开发步骤

    hessian客户端的开发涉及到2个部分。定义接口&&客户端主程序

    • 定义接口

把上面服务端定义好的接口文件IBasic.java原样复制到工程中。

  • 客户端主程序

新建HessianClient.java,随便命名。

package test;import com.caucho.hessian.client.HessianProxyFactory;public class HessianClient{
public static void main(String []args)   throws Exception   {   String url = "http://localhost:8080/hessian_server/ServerMachineTest";   HessianProxyFactory factory = new HessianProxyFactory();   IBasic basic = (IBasic) factory.create(IBasic.class, url); String helloreturn = basic.hello();System.out.println(helloreturn);}    
}

注意上面的URL地址。

主要步骤定义服务端的地址URL,然后new一个代理工厂HessainProxyFactory,这个代理类工厂负责远程调用。 然后就可以像调用本地函数一样,调用在IBasic.java中定义好的接口函数hello()。

4 启动客户端

项目上右键Run as->Java Application启动客户端。
成功后结果如下:

至此,小结

至此,完成了Hessian 客户端和服务端的通信。现在回过头来看,可能会觉得比较简单。当时还是折腾了好一会呢!! 简单来说,服务端定义并实现服务,发布到Tomcat,客户端新建一个代理,就像调用本地函数那样调用远程的服务端提供的函数,完成通信。

那么Hessian的底层具体是怎么实现的呢?客户端和服务端是怎么完成了序列化,并反序列的?客户端的代理类工厂是怎么实现的?这些我可能会留到另外的博客里分析。

写完了

写这篇文章是回过头来写,大概中间隔了快4个月的时间,为了写这篇博客,里面用到的一些图片,我又从头搭建了一个服务端和客户端,还是碰到了一些小问题,说明过了段时间是会陌生的。最好的时间是做完那个关于Hessain的项目就应该记录下过程,可以节省很多时间。

坚持写博客还是挺困难的,后面有时间打算再写分析下Hessian的源码以及C++版的Hessain,以及做其他项目涉及到的一些东西。

Blog:

  • rebootcat.com (默认)

相关文章:

VDI序曲二十一 APP-V 4.6 SP1服务器端部署

APP-V是微软应用程序虚拟化除RemoteApp以外非常棒的另一种应用程序虚拟化&#xff0c;此应用程序虚拟化是把搭开应用程序消耗的资源放在前端&#xff0c;应用程序虚拟化主要解决的还是软件兼容性问题和保护软件资产问题&#xff0c;同时让用户无需安装就可以绿色使用的手段&…

绝悟之后再超神,腾讯30篇论文入选AI顶会ACL

作者 | 马超责编 | Carol出品| AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;封图 | CSDN 付费下载于东方 IC近日&#xff0c;国际计算语言学协会年会ACL在官网(https://www.aclweb.org)公布了2020年度的论文收录名单&#xff0c;其中腾讯共有30篇论文入选&…

mac中用命令行运行mysql

1&#xff0c;安装mysql 在mysql的官方网站下载 mysql 5.5.23 http://www.mysql.com/downloads/mysql/&#xff0c;根据我的机器的配置情况选择了64bit版本。 2&#xff0c;命令行中启动mysql 安装的位置在/usr/local/mysql 于是做了一个别名&#xff1a; $alias mysql/usr/loc…

Hessian源码分析(java)

个人博客&#xff1a; 戳我&#xff0c;戳我 先扯一扯 前一篇博文Hessian通信案例(java)简单实现了Java版的Hessian客户端和服务端的通信&#xff0c;总体看来&#xff0c;实现起来比较简单&#xff0c;整个基于Hessian的远程调用过程也显得很方便。但是知其然还要知其所以然&…

必读!53个Python经典面试题详解

作者 | Chris翻译 | 苏本如&#xff0c;编辑 | 夕颜题图 | 视觉中国出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文列出53个Python面试问题&#xff0c;并且提供了答案&#xff0c;供数科学家和软件工程师们参考。不久前&#xff0c;我作为“数据科学家”开始担…

Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer

Microsoft Web 平台安装程序 3.0 (Web PI) 是一款免费的工具&#xff0c;使用它可以获得 Microsoft Web 平台的最新组件&#xff08;包括 Internet Information Services (IIS)、SQL Server Express、.NET Framework 和 Visual Web Developer&#xff09;。Web PI 的内置Window…

Linux Shell 脚本限制ssh最大用户登录数

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1670233 我撰写本文原来的意图是想把“复制SSH渠道”和"copy SSH Session"这样的功能从远程s…

hessiancpp编译和使用(C++版)

个人博客&#xff1a;戳我&#xff0c;戳我 许下的承诺 前两篇博客Hessian通信案例(java)和Hessian源码分析(java)介绍了Java版的hessian的使用以及源码分析。当时也说过打算写一下C版的hessian的使用和源码分析&#xff0c;现在就是兑现承诺的时候了。其实我项目中实际用到的…

美国AI博士一针见血:Python这样学最容易成为高手!

我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0…

win7操作系统在哪显示隐藏文件夹

win7操作系统在哪显示隐藏文件夹 打开计算机--组织--文件夹和搜索选项--查看--把 “隐藏受保护的操作系统文件”前面的钩去掉&#xff0c;选中“显示隐藏的文件、文件夹和驱动器”--确定

ASP.NET MVC4中调用WEB API的四个方法

当今的软件开发中&#xff0c;设计软件的服务并将其通过网络对外发布&#xff0c;让各种客户端去使用服务已经是十分普遍的做法。就.NET而言&#xff0c;目前提供了Remoting,WebService和WCF服务&#xff0c;这都能开发出功能十分强大的服务。然而&#xff0c;越来越多的互联网…

使用docker制作hexo镜像

个人博客&#xff1a;戳我&#xff0c;戳我 背景 这段时间一直在折腾我的博客&#xff0c;由于之前出现过一次电脑硬盘完全挂掉的情况&#xff0c;为了避免重新搭建博客系统&#xff0c;一直打算搞一个方便点的环境&#xff0c;能进行多机迁移之类的。正好&#xff0c;Docker完…

3D目标检测深度学习方法数据预处理综述

作者 | 蒋天元来源 | 3D视觉工坊&#xff08;ID: QYong_2014&#xff09;这一篇的内容主要要讲一点在深度学习的3D目标检测网络中&#xff0c;我们都采用了哪些数据预处理的方法&#xff0c;主要讲两个方面的知识&#xff0c;第一个是representation&#xff0c;第二个数据预处…

NTLM协议认证

第一篇blog&#xff0c;发现这是个记录学习过程的好地方。从基础的开始吧。 NTLM&#xff1a; 基本知识telnet的一种验证身份方式&#xff0c;即Windows NT LAN Manager (NTLM)&#xff1b; NTLM 是为没有加入到域中的计算机&#xff08;如独立服务器和工作组&#xff09;提供的…

新盒模型移动端的排版

这里采用的是新盒模型来进行排版&#xff1a; <div class"mytest">   <header></header>   <section></section>   <footer></footer> </div> 在CSS样式里添加如下样式 html,body{ height: 100%; } .mytest{ …

微信跳一跳高分辅助踩坑

旧博文&#xff0c;搬到 csdn 原文&#xff1a;http://rebootcat.com/2018/01/08/wechat_jump_hack/ 最近挺火的微信跳一跳 最近新版微信的『跳一跳』小程序着实火了一把&#xff0c;也把小程序这个概念再次推波助澜了一波&#xff0c;看来以后小程序这个入口会有大作为。 张小…

“编程能力差,90%的人会输在这点上!”谷歌开发:其实都是在瞎努力

这是一个很难让人心平气和的年代。疫情之下&#xff0c;很多人的都在面临着&#xff1a;失业、降薪、找不到工作、随时被裁等风险。但是&#xff1a;有心的人早已上路超车&#xff0c;做个人能力的升级——提高自己的不可替代性。李开复曾提出过“五秒钟准则”&#xff1a;一项…

64位win7安装IIS7时不能浏览asp的问题

64位win7高级家庭版安装IIS7&#xff0c;安装完成后只能浏览静态页&#xff0c;找了很多的教程都没有解决&#xff0c;最后在一个博客里看到说64位系统下ASP是不支持的ODB读取ACC的数据库的&#xff0c;因此需要开启32位应用程序的支持。 方法是&#xff1a; Internet 信息服务…

0525 项目回顾7.0

一、sprint总结 当谈到团队&#xff0c;我开始真的不知道团队是怎么样的&#xff0c;怎么样进行工作的&#xff0c;要该怎么出力团队的关系&#xff0c;有时候会涉及到个人问题&#xff0c;是不是该考虑进来&#xff0c;但是很多时候是不能的&#xff0c;每一个人作为团队的一份…

辩证看待 iostat

旧博文&#xff0c;搬到 csdn 原文&#xff1a;http://rebootcat.com/2018/01/16/using-iostat-dialectically/ 前言 经常做系统分析会接触到很多有用的工具&#xff0c;比如 iostat,它是用来分析磁盘性能、系统 I/O 的利器。 本文将重点介绍 iostat 命令的使用&#xff0c;并…

搞机器学习,Python和R哪个更合适?

【编者按】如果你正想构建一个机器学习项目&#xff0c;但却纠结于如何选择编程语言&#xff0c;这篇文章将是你所需要的。这篇文章不仅帮助你理解Python和R这两种语言的区别&#xff0c;还有助于你了解各个语言多方面的优势。作者 | Manav Jain译者 | Joe&#xff0c;编辑 | 夕…

Java安装方法

第1章 Java简介及开发环境搭建 实验1 JDK的下载、安装与配置 【实验目的】 &#xff08;1&#xff09;熟悉JDK工具包的下载及安装过程。 &#xff08;2&#xff09;掌握JAVA_HOME、CLASSPATH及Path的设置内容。 &#xff08;3&#xff09;掌握Java程序运行原理及Javac、Java命…

Hash函数的安全性

我们为了保证消息的完整性&#xff0c;引进了散列函数&#xff0c;那么散列函数会对安全正造成什么影响呢&#xff1f;这是需要好好研究一番的问题。 三个概念&#xff1a; 1.如果y<>x&#xff0c;且h&#xff08;x&#xff09;h&#xff08;y&#xff09;&#xff0c;则…

一键安装python3环境

旧博文&#xff0c;搬到 csdn 原文&#xff1a;http://rebootcat.com/2018/04/15/python3_in_a_box/ 一键安装python3环境 由于现在逐步转移到 python3 进行开发&#xff0c;但是很多机器并没有预装 python3 环境&#xff0c;所以需要安装。 所以分享一个我常用的&#xff0c…

认知智能再突破,阿里 18 篇论文入选 AI 顶会 KDD

作者 | 马超责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近日&#xff0c;国际知识发现与数据挖掘协会KDD在官网(https://www.kdd.org/kdd2020)公布其2020年度的论文收录结果&#xff0c;笔者看到阿里共有18篇论文入选&…

python采集cpu信息

旧博文&#xff0c;搬到 csdn 原文&#xff1a;http://rebootcat.com/2018/05/20/analyze_cpu/ python脚本采集cpu 经常要做一些 linux 系统上的性能分析或者采集 cpu/mem/bandwidth 上报到监控系统。 分享一个我平常常用到的 cpu 采集脚本&#xff0c;原理是分析 /proc/stat…

Pretty Login便携版:Windows 7登录界面修改器

Pretty Login是由chnable开发的一个美化小工具&#xff0c;用来辅助修改Widnows 7登陆界面的背景图片&#xff0c;除此之外&#xff0c;它也能定制欢迎界面上的文本、按钮样式&#xff0c;如设置阴影、半透明效果。 由于Windows 7限制登录背景图片的大小不超过255KB&#xff0c…

来了来了!趋势预测算法大PK!

作者 | 王哲责编 | Carol头图 | CSDN 付费下载自视觉中国趋势预测在很多应用场景中都会起到至关重要的作用&#xff0c;比如淘宝商家会考虑库存量应该保持在多少才能够满足客户需求&#xff0c;商场希望得知假期会迎来多大的客流量以安排系列活动&#xff0c;机场想要预测五一黄…

hdu 5713(状态压缩DP)

要进行两次dp&#xff0c; 第一个&#xff0c;dp[i],1<i<(1<<n) 其中用i的二进制形式表示已选择的点。 dp[i] 用来保存i中的点构成一个连通块&#xff0c;边集多少种可能。 转移方程&#xff1a; save[0] 1;//这里用save[i]表示dp[i]for(int i1;i<(1<<n)…

nginx特定的 404页面利于seo

要求&#xff1a;访问http://www.qq.com/123 url保持不变 显示的结果为指定的404页面curl -I http://www.qq.com/123 返回的状态码为404 准备一 404.php页面在最底部加上&#xff1a;<?phpheader(HTTP/1.1 404 Not Found);header(Status: 404 Not Found);?>然后ngin…