Hessian 使用小记

想来想去还是把hessian的应用放到SOA栏目中来吧

hessian实现了远程调用,不需要学习WEB service的一些规范就可以直接上手, 它一个轻量级的Java远程访问的解决方案。Hessian很像WebService,只不过它不使用SOAP协议,而是使用它自己的binary协议

使用它只需要3个关键的类

1、stub(存根) 也就是服务器端和客户端的公共接口

2、服务器端对该接口的实现类serviceimpl

3、服务器端的sevlet ,hessian帮我们实习了个HessianServlet,当然我们可以直接让我们的serviceimpl继承HessianServlet

下面举例,例子在网络上,官方文档上都有的

stub

/**
* @author 付志超
* @time Sep 26, 2008 2:35:54 PM
*/
/**
 * 
 */
package com.alimama.function;

import com.alimama.bean.Student;

public interface SayHello {
	public String sayHello(String name);
	public Student getStudent() ;

}

 

serviceimpl

/**
* @author 付志超
* @time Sep 26, 2008 2:36:58 PM
*/
package com.alimama.function.impl;

import com.alimama.bean.Student;
import com.alimama.function.SayHello;
import com.caucho.hessian.server.HessianServlet;

public class SayHelloImpl extends HessianServlet implements SayHello {

	public String sayHello(String name) {
		return "hello "+name;
	}

	@Override
	public Student getStudent() {
	        Student  s=new Student();
	        s.setName("付志超");
	        s.setSchool("武汉理工大学");
	        return s;       
	}

}

 

本例中需要传输的序列化的bean

/**
* @author 付志超
* @time Sep 26, 2008 3:42:47 PM
*/
package com.alimama.bean;

import java.io.Serializable;

public class Student implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -9006571629757493042L;
	private String name;
	private String school;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSchool() {
		return school;
	}
	public void setSchool(String school) {
		this.school = school;
	}
	public String toString() {
		return name+"  "+school;
	}
	
	
}

 

最后是web.xml的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>
			com.alimama.function.impl.SayHelloImpl
		</servlet-class>
	</servlet>
  <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>com.alimama.function.impl.Test</servlet-class>
  </servlet>

	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>
</web-app>

 

当然如果我们的 serviceimpl没有实现 HessianServlet

 那么web.xml应该修改成为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<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.alimama.function.impl.SayHelloImpl</param-value>
		</init-param>
		<init-param>
			<param-name>home-api</param-name>
			<param-value>com.alimama.function.SayHello</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
</web-app>

 

 记住 Student一定要实习可序列化接口

最后是我们的客户端的调用

/**
* @author 付志超
* @time Sep 26, 2008 2:57:27 PM
*/
package com.alimama.test;

import java.net.MalformedURLException;

import com.alimama.function.SayHello;
import com.caucho.hessian.client.HessianProxyFactory;

public class HessianClientTest {
	public static void main(String[] args) {
		String url="http://127.0.0.1:8080/testHessian/hello";
		HessianProxyFactory factory=new HessianProxyFactory();
		try {
			SayHello say=(SayHello) factory.create(SayHello.class, url);
			System.out.println(say.sayHello("abc"));
			System.out.println(say.getStudent());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

  启动服务器,然后执行上面的客户端,就会看到输出

 hello abc
  付志超  武汉理工大学

 

还有点要注意 如果用最新的版本的 hessian-3.1.6.jar  hessian-3.2.0.jar  都出现问题 无法获得 出现IO异常

但是使用一个 hessian-3.0.20.jar 的老包 是没问题的

 

=====

OK 以后在进一部使用hessian了 

太赫兹不可信无人机中继的最低保密能量效率最大化附Matlab代码.rar 立即下载

相关推荐

QYR-18900-2026-2032全球与中国光片显微镜市场现状及未来发展趋势 Sample zhangxiong.pdf

QYR-18900-2026-2032全球与中国光片显微镜市场现状及未来发展趋势 Sample zhangxiong.pdf

WebService第二天

WebService第二天   课程安排:(CXF+HESSIAN) 框架CXF概述(是什么,SOA概述,下载安装) CXF快速入门(服务端、客户端开发,日志拦截器,SOAP版本相互调用的) CXF与spring的整合(一个完整案例:服务端+客户端) Hessian概述(rmi、支持的语言。。。。下载。。。) Hessianservlet整合(服...

zhangyr123的博客 530

全自动马达组装生产线.rar

全自动马达组装生产线.rar

HessianProxyFactory调SOA接口

代码: public static void main(String[] args) { //外部提供的接口URL String url = "http://127.0.1:9980/tracksoa/remote/track"; //hessian代理工厂 HessianProxyFactory factory = new HessianProxyFactory(); fa...

qq_39276383的博客 977

SOA架构的几种主要开发方式

面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。Soa的开发方法一般主要有开源的dubbo、dubbox、mule、wso2、cxf,以及付费的oracle soa、ibm soa等。 SOA是一种粗粒度、松耦合服务...

iteye_6274的博客 1534

Hessianwebservice、RESTFUL各自特点

Hessian. 一、简介        Hessian是由caucho提供的一个基于binary-RPC实现的远程通讯library。   1、是基于什么协议实现的?            基于Binary-RPC协议实现。   2、怎么发起请求?            需通过Hessian本身提供的API来发起请求。   3、怎么将请求转化为符合协议的格式的?       

weigao_easy的博客 6369

Hessian 的字段序列化小记

  Hessian 的字段序列化小记   一背景: 今天线上碰到一个问题,在通过hessian的反序列化的时候失败了。 简单查看了下原因,是因为服务端和客户端依赖的bean包版本不一致导致的。   二 具体分析: Client --- &gt; commons-entity  Sever  ---  &gt; commons-entity    做了依赖倒置处理,服务...

知行天下 699

数学小记——基于梯度的优化方法

基于梯度的优化方法0.概述1.什么是优化,以及优化的目标2.为什么用梯度进行优化 0.概述 在吴恩达网课第一课第二周的内容中,学习了经典的梯度下降法。总感觉有些云里雾里,最近看了“花书”,里面也提到了一些相关内容,于是在这里进行整理,希望能稍微加深一点理解。 1.什么是优化,以及优化的目标 优化,就是改变自变量的值(这个自变量一般是x),让目标函数f的取值达到最大/最小。 当优化的目的是把目标函数最小化时,也可以称为代价函数/损失函数/误差函数。名字有好几个,但意义是一样的。 最优解记为x∗x^*x∗,例如

m0_51473192的博客 719

dubbo学习小记

前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境。 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是通过Dubbo来治理的。其实之前我就对SOA、RPC等分布式服务的概念有所了解,Dubbo也多多少少知道一些,不过能亲身使用那是再好不过的了。 此文就对我的Dubbo学习做一个小的总结,基本我总

zhangyuan19880606的专栏 579

工作小记——一账通平台设计分析及结果

公司业务各方面展开,要新上多个平台。需要不同域名的多个平台可以共享登陆状态。准确得说,就是需要一账通平台 现状:海银会(非标固收)与海银财富(公募基金)两个数据库、海银会平台一套系统 1.单点登录实现方案。 有两种技术方案: 1)A网站和B网站,登陆都跳C网站,C网站登陆后带着token返回A、B网站的相关页面。A、B网站将token存放到cookie中去并建立相关session。 2)...

weixin_30847865的博客 347

Transient的用法

Java transient关键字使用小记 1. transient的作用及使用方法       我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。       然而在实际开发过程中,我们常常会遇到这

一直在路上 2131

Hession与Webservice的区别

Hessian:hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能,相比WebService,Hessian更简单、快捷。 采用的是二进制RPC协议,因为采用了二进制协议,所以它很适合于发送二进制数据,Hessian主要作面向对象的消息通信。 Hessian的初衷就是支持动态类型,格式紧凑,跨语言。Hessian使用自己的序列化机制实现的编组和反...

weixin_30527551的博客 219

基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的COLREG(Matlab代码实现)

内容概要:本文提出了一种融合模型预测控制(MPC)与人工势场法的船舶运动规划方法,旨在解决复杂海上多船遭遇场景下的避碰问题,并严格遵循国际海上避碰规则(COLREG)。该方法通过构建人工势场模型,综合考虑他船、静态障碍物、航道边界产生的排斥力以及目标点的吸引力,形成动态环境势场;同时引入MPC框架,基于船舶非线性动力学模型进行滚动时域优化,实时求解最优航向与航速指令,确保路径的安全性、平滑性与合规性。研究设计了对遇、交叉、追越及多船混杂等多种典型复杂会遇场景,并通过Matlab仿真验证了该方法在有效规避碰撞、保持航行稳定性以及准确执行COLREG规定避让行为方面的优越性能。; 适合人群:从事智能航运、海洋工程、自动驾驶船舶、智能交通系统及相关路径规划算法研究的科研人员与研究生;具备控制理论、优化算法基础及Matlab编程能力的技术开发者。; 使用场景及目标:① 实现复杂动态海况下多船智能避碰决策与自主导航;② 开发符合国际航行法规的无人船自主航行核心算法;③ 为智能港口、海上交通管理系统(SMARTS)及无人艇集群协同提供算法支持;④ 用于科研仿真验证、算法对比测试及高校相关课程的教学演示。; 阅读建议:此资源以Matlab代码实现为核心,强调理论建模与工程实践的深度融合,建议读者在深入理解MPC与人工势场耦合机制的基础上,动手运行并调试所提供的仿真程序,重点分析不同势场参数、预测时域与权重系数对避碰行为的影响,从而掌握算法的设计精髓与优化策略。

两索柔性光伏支架静风响应分析软件

两索柔性光伏支架静风响应分析软件

虚谷数据库集群部署-k8s

虚谷数据库集群部署-k8s

手机FFC冲裁检测机.rar

手机FFC冲裁检测机.rar

上一篇: java 获得某年的某月有多少天
下一篇: Velocity中如何判断null
esteem
博客等级 码龄22年 3粉丝 56原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值