1、hessian调用分为服务端和客户端

2、总体图

3、服务端配置

(1)web.xml

<!-- hessian 配置  默认会加载hessian-servlet.xml--><servlet><servlet-name>hessian</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>hessian</servlet-name><url-pattern>/hessian/*</url-pattern></servlet-mapping><!-- hessian 配置 -->

(2)Interface

public interface WebHessianService {void test();
}

(3)Implement

@Service("webHessianService")
public class WebHessianServiceImpl implements WebHessianService {public void test(){system.out.println();}
}

(4)HessianServerProxyExporter:

Servlet-API-based HTTP request handler that exports the specified service bean as Hessian service endpoint, accessible via a Hessian proxy.
public class HessianServerProxyExporter extends HessianServiceExporter {private static Logger logger = LoggerFactory.getLogger(HessianServerProxyExporter.class);PropertyUtil propertyUtil = PropertyUtil.getInstance("project");public String hessianAuth;public HessianServerProxyExporter() {this.hessianAuth = this.propertyUtil.getProperty("hessianAuth");}public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {logger.info("++++ hessian request clientIp:" + request.getRemoteAddr() + "++++requestData:" + request.getRequestURL());String auth = request.getHeader("hessianAuth");if(auth != null && auth.equalsIgnoreCase(this.hessianAuth)) {super.handleRequest(request, response);} else {logger.info("+++++hessianAuth->fail :" + request.getRemoteAddr() + "," + request.getRequestURL());}}
}

(5)ServiceBean
 <!--  Hessian访问路径 含权限认证 --><bean name="/webHessian" class="com.qysxy.hessian.server.HessianServerProxyExporter"><property name="service" ref="webHessianService"/><property name="serviceInterface"><value>com.qysxy.framework.hessian.WebHessianService</value></property></bean>

4、客户端配置

(1)HessianClientProxyFactory   :hessian客户端代理

public class HessianClientProxyFactory extends HessianProxyFactory {PropertyUtil propertyUtil = PropertyUtil.getInstance("project");private final String hessianAuth;public HessianClientProxyFactory() {this.hessianAuth = this.propertyUtil.getProperty("hessianAuth");}protected URLConnection openConnection(URL url) throws IOException {URLConnection conn = super.openConnection(url);conn.setRequestProperty("hessianAuth", this.hessianAuth);return conn;}
}

(2)Interface

public interface WebHessianService {void test();
}

(3)clientBean:

    <bean id="webHessianService"class="org.springframework.remoting.caucho.HessianProxyFactoryBean"><property name="serviceInterface"value="com.qysxy.framework.hessian.service.WebHessianService"></property><property name="serviceUrl"><value>${hessianPath}/hessian/webHessian</value></property><property name="readTimeout"><value>100000</value></property><property name="proxyFactory"><beanclass="com.*.hessian.client.HessianClientProxyFactory" /></property><property name="chunkedPost" value="false" /></bean>

5、测试

 @Testpublic void hessian() {String url = "http://127.0.0.1/hessian/webHessian";HessianClientProxyFactory  factory = new HessianClientProxyFactory();try {WebHessianService service = (WebHessianService) factory.create(WebHessianService.class, url);service.test();System.err.println("map=" + map.toString());} catch (MalformedURLException e) {e.printStackTrace();}}

6、总结:

服务端是需要定义方法接口并且实现方法,利用servlet和spring的拦截器控制访问;

客户端可以用bean组件定义好调用方法接口、访问URL、hessian代理工厂

转载于:https://www.cnblogs.com/yuan951/p/6708792.html

Spring+Hessian搭建远程方法调用相关推荐

  1. XML-RPC远程方法调用

    一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...

  2. Spring-整合JDBC-事务-远程方法调用RMI

    一.spring整合JDBC spring整合jdbc使用了模版方法设计模式 定义一套规范,固定流程不变,传入可变内容 1.Maven项目添加依赖 spring-context坐标依赖 mysql驱动 ...

  3. java中使用rmi进行远程方法调用

    java中进行远程方法调用,能支持分布式计算.并且可以实现在server的修改,能反应到各个client. 假如server的ip是:192.168.11.2, server端的代码如下: /*** ...

  4. [Dnode]基于Node.js给浏览器提供异步远程方法调用

    Dnode介绍 Dnode是一个提供异步双向远程方法调用的类库.网络socket和websocket风格的socket.io通信已经成为可能,所以系统的进程之间可以相互通信并且可以与运行在浏览器端的用 ...

  5. 系统间通信2:通信管理与远程方法调用RMI

    本文引用 : https://yinwj.blog.csdn.net/article/details/49120813 RMI : Remote Method Invocation,远程方法调用 RP ...

  6. Java远程方法调用

    主要参考 http://www.kaixinwenda.com/article-yxc135-7690958.html http://bbs.chinaunix.net/thread-1179312- ...

  7. Java知识整理——远程方法调用

    什么是RMI ? Java远程方法调用(RMI)是一个Java API,它执行的面向对象的等价远程过程调用(RPC)的方法,包括了直接传输序列化的Java类和分布式垃圾收集的支持. 远程方法调用(RM ...

  8. RMI原理揭秘之远程方法调用

    接上:http://guojuanjun.blog.51cto.com/277646/1423392 这一次我们从学习RegistryImpl_Stub.java和RegistryImpl_Skel. ...

  9. JAVA反射+SOCKET实现远程方法调用

    2019独角兽企业重金招聘Python工程师标准>>> 实现类共有5个: com/chenun/javanet/rmi/RemoteCall.java  //RemoteCall类代 ...

最新文章

  1. Java 社区领袖联合发文:别慌,Java 仍然是免费的!
  2. 海归技术大佬:硅谷科技公司到底牛在哪里?讲透“奈飞文化”8个原则!
  3. 基础SQL面试题(3)
  4. Flash基本概念和原理
  5. php 正则匹配收货地址,PHP简单实现正则匹配省市区的方法
  6. pandas计算一个维度中的所有数值占总价值的占比
  7. K - Repeating Decimals(循环小数)
  8. zxr10交换机配置手册vlan_中兴ZXR10 G系列交换机SVLAN使用指导
  9. java循环之后求和代码,Java lambda 循环累加求和代码
  10. 如何使用虚拟实验室建设思科IPS***防御课程的实验环境
  11. android应用程序跳转到系统的各个设置页面
  12. linux Shell入门
  13. 计算机丢失msvcrt.dll,msvcrt.dll修复工具
  14. VMware 8.0下载地址
  15. matlab中求均值的mean()函数的使用
  16. 台式计算机主板修理教程,小白装机最新最详细的台式电脑组装教程图解
  17. 线上编程学院codecademy
  18. app运营,如何提高用户的参与度?
  19. 逆向破解_iOS_学习笔记_1
  20. 【整理】Python中的re.search和re.findall之间的区别和联系 + re.finall中带命名的组,不带命名的组,非捕获的组,没有分组四种类型之间的区别

热门文章

  1. 【opencv学习】ROI区域和图像填充
  2. jdbc连接oracle数据库
  3. 【计算机网络】—— 停止-等待协议
  4. 操作系统原理 —— 操作系统概述
  5. pytorch ——模型创建与nn.Module
  6. 利用批处理程序和excel获取windows文件信息
  7. 监听器Listener
  8. 【入门6】函数与结构体(今天刷洛谷了嘛)
  9. 微信小程序 【笔记003】小程序的事件处理
  10. 【架构师】【数据库基础】【笔记 01】快速了解数据库系统的重要概念02