首页 > 其他分享 >Hessian——轻量级远程调用方案

Hessian——轻量级远程调用方案

时间:2023-12-22 22:24:05浏览次数:35  
标签:调用 String service 轻量级 Hessian Basic com public hessian

Hessian——轻量级远程调用方案

转载自:https://www.cnblogs.com/lyhero11/p/5277583.html

Hessian是caucho公司开发的一种基于二进制RPC协议(Remote Procedure Call protocol)的轻量级远程调用框架。具有多种语言的实现,但用的最多的当然是Java实现 :)

Creating a Hessian service using Java has four steps:

1、Create an Java interface as the public API
2、Create a client using HessianProxyFactory
3、Create the Service implementation class
4、Configure the service in your servlet engine.

下面,我们来实现1个例子:

首先下载hessian-4.0.37.jar,服务端和客户端都要用的。

然后编写程序。

server端:

package com.lin.hessian.service;
public interface Basic {
    public String sayHello();
}
复制代码
package com.lin.hessian.service;
public class BasicService implements Basic{
    private String message = "balalala!";
    @Override
    public String sayHello() {
        return message;
    }
}
复制代码 复制代码
package com.lin.hessian.service;
import com.caucho.hessian.server.HessianServlet;
public class LinyService extends HessianServlet implements Basic{
    private String message = "wowwowowowowow";
    @Override
    public String sayHello() {
        return message;
    }
}
复制代码 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>HessianWeb</display-name>
  <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.lin.hessian.service.BasicService</param-value>     
        </init-param>     
        <init-param>     
            <param-name>home-api</param-name>
            <param-value>com.lin.hessian.service.Basic</param-value>     
        </init-param>     
    </servlet>
    
    <servlet-mapping>     
        <servlet-name>hello</servlet-name>     
        <url-pattern>/hello</url-pattern>     
    </servlet-mapping>

    <servlet>     
        <servlet-name>liny</servlet-name>     
        <servlet-class>com.lin.hessian.service.LinyService</servlet-class>         
    </servlet>
    
    <servlet-mapping>     
        <servlet-name>liny</servlet-name>
        <url-pattern>/liny</url-pattern>     
    </servlet-mapping>
</web-app>
复制代码

在服务端其实定义了两个service: BasicService和LinyService,不同之处在于是否继承HessianServlet,BasicService是一个pojo,而LinyService是一个servlet。

在web.xml里,BasicService是通过home-class和home-api两个参数传递给HessianServlet,然后将HessianServlet配置到web.xml的<servlet>里来实现服务配置到容器的。

而LinyService是直接将自己(它自己就是个Servlet)配置到web.xml的<servlet>来实现配置到容器。如果我们在一个应用中要实现多个hessian服务,应该采用这种方式。

下面来看看客户端:

package com.liny.hessian.service;
public interface Basic {
    public String sayHello();
}
复制代码
package com.lin.hessian.client;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.liny.hessian.service.Basic;
public class HessianClient {
    public static void main(String[] args) throws MalformedURLException{
     //String url = "http://localhost:8080/HessianWeb/hello"; String url = "http://localhost:8080/HessianWeb/liny"; HessianProxyFactory factory = new HessianProxyFactory(); Basic basic = (Basic)factory.create(Basic.class, url); System.out.println(basic.sayHello()); } }
复制代码

客户端要定义一个同服务端一模一样的接口Basic,然后通过HessianProxyFactory获得代理,并调用远程服务的方法。

注意:这里笔者故意将客户端与服务端的Basic接口的包路径定义成不一样(一个是com.liny.hessian.service,一个是com.lin.hessian.service),经过验证这样是可以的,但是推荐最好两者一模一样。

    « 上一篇: JavaScript中的类数组对象
» 下一篇: Redis持久化————AOF与RDB模式

posted on 2016-03-14 22:53  肥兔子爱豆畜子  阅读(16783)  评论(3)  编辑  收藏  举报

标签:调用,String,service,轻量级,Hessian,Basic,com,public,hessian
From: https://www.cnblogs.com/wanghengbin/p/17922456.html

相关文章

  • Android平台RTSP流如何添加动态水印后转推RTMP或轻量级RTSP服务
    技术背景我们在对接外部开发者的时候,遇到这样的技术诉求,客户用于地下管道检测场景,需要把摄像头的数据拉取过来,然后叠加上实时位置、施工单位、施工人员等信息,然后对外输出新的RTSP流,并本地录制一份带动态水印叠加后的数据。整个过程,因为摄像头位置一直在变化,所以需要整体尽可能的低......
  • 通过arthas vmtool 调用线上正在运行的service方法
    通过arthasvmtool调用线上正在运行的service方法场景场景具体描述业务上有某个缓存需要删除,但是没有写删除key的远程接口通过arthas执行service方法,删除缓存key1.前期准备1.1下载arthas官网地址https://arthas.gitee.io/doc/quick-start.html下载运行curl-Ohttps://arthas......
  • bat批处理 call 和 goto 调用
    前言全局说明bat批处理call和goto调用一、bat批处理call和goto调用@echooffSETval="XXXXX"SETval=""SETval=%val:~1,-1%call:EmptyTest%val%goto:eof:EmptyTestif"%1"==""(echoEmpyt!!!)call:EmptyTest%val%......
  • 新手友好、轻量级的C#/.NET万能工具库
    前言今天分享一个基于MITLicense协议开源、免费、新手友好、轻量级的C#/.NET万能工具库、帮助类库(支持.NET和.NETCore,可以帮助开发者们减少常见重复功能方法查找,提高开发工作效率):Masuit.Tools。项目官方介绍全龄段友好的C#万能工具库,码数吐司库,包含一些常用的操作类,大都是......
  • 在网页中调用MSTSC打开远程桌面
    1.修改注册表添加自定义URL协议MSTSC[HKEY_CLASSES_ROOT\MSTSC]@="URL:MSTSCProtocol""URLProtocol"=""[HKEY_CLASSES_ROOT\MSTSC\DefaultIcon][HKEY_CLASSES_ROOT\MSTSC\shell][HKEY_CLASSES_ROOT\MSTSC\shell\open][HKEY_CLASSE......
  • 自然语言处理:通过API调用各大公司的机器翻译开放平台
    国内大公司做机器翻译做的比较好的有讯飞和百度,这里给出这两个公司机器翻译的开放平台API的介绍:讯飞开放平台:链接:https://www.xfyun.cn/doc/nlp/xftrans_new/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E百度翻译平台:链接:https://api.fanyi.baidu.com/doc/21......
  • cmd调用函数和输入变量
    首先,你需要将这个函数保存在一个Python文件中,例如my_script.py。然后,你可以在命令提示符(cmd)中使用以下命令来运行这个脚本:pythonmy_script.py然而,这样做并不能直接调用你的函数。为了在命令行中调用这个函数并传递参数,你需要在你的脚本中添加一些代码来接收命令行参数。这可以通......
  • vue3调用高德地图,实现地址,经纬度填写
    父组件引用高德地图:1<template>2<divclass="wrapper">3<divclass="box">4<divclass="form-box">5<el-form6label-position="top"7:inline=&qu......
  • 记一次 Go 调用系统命令出现的问题分析
    首先在程序中封装了下面一个函数用来执行系统命令://执行系统命令funcexecuteCommand(commandstring,output,outerrio.Writer)error{ cmd:=exec.Command("/bin/bash","-c",command) stdout,err:=cmd.StdoutPipe() iferr!=nil{ returnerr } deferstdo......
  • http调用接口
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;publicstaticStringget(Stringurl,Stringcookie)throwsIOException{HttpURLConnectionconnection=(H......