Spring+Hessian搭建远程方法调用
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搭建远程方法调用相关推荐
- XML-RPC远程方法调用
一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...
- Spring-整合JDBC-事务-远程方法调用RMI
一.spring整合JDBC spring整合jdbc使用了模版方法设计模式 定义一套规范,固定流程不变,传入可变内容 1.Maven项目添加依赖 spring-context坐标依赖 mysql驱动 ...
- java中使用rmi进行远程方法调用
java中进行远程方法调用,能支持分布式计算.并且可以实现在server的修改,能反应到各个client. 假如server的ip是:192.168.11.2, server端的代码如下: /*** ...
- [Dnode]基于Node.js给浏览器提供异步远程方法调用
Dnode介绍 Dnode是一个提供异步双向远程方法调用的类库.网络socket和websocket风格的socket.io通信已经成为可能,所以系统的进程之间可以相互通信并且可以与运行在浏览器端的用 ...
- 系统间通信2:通信管理与远程方法调用RMI
本文引用 : https://yinwj.blog.csdn.net/article/details/49120813 RMI : Remote Method Invocation,远程方法调用 RP ...
- Java远程方法调用
主要参考 http://www.kaixinwenda.com/article-yxc135-7690958.html http://bbs.chinaunix.net/thread-1179312- ...
- Java知识整理——远程方法调用
什么是RMI ? Java远程方法调用(RMI)是一个Java API,它执行的面向对象的等价远程过程调用(RPC)的方法,包括了直接传输序列化的Java类和分布式垃圾收集的支持. 远程方法调用(RM ...
- RMI原理揭秘之远程方法调用
接上:http://guojuanjun.blog.51cto.com/277646/1423392 这一次我们从学习RegistryImpl_Stub.java和RegistryImpl_Skel. ...
- JAVA反射+SOCKET实现远程方法调用
2019独角兽企业重金招聘Python工程师标准>>> 实现类共有5个: com/chenun/javanet/rmi/RemoteCall.java //RemoteCall类代 ...
最新文章
- Java 社区领袖联合发文:别慌,Java 仍然是免费的!
- 海归技术大佬:硅谷科技公司到底牛在哪里?讲透“奈飞文化”8个原则!
- 基础SQL面试题(3)
- Flash基本概念和原理
- php 正则匹配收货地址,PHP简单实现正则匹配省市区的方法
- pandas计算一个维度中的所有数值占总价值的占比
- K - Repeating Decimals(循环小数)
- zxr10交换机配置手册vlan_中兴ZXR10 G系列交换机SVLAN使用指导
- java循环之后求和代码,Java lambda 循环累加求和代码
- 如何使用虚拟实验室建设思科IPS***防御课程的实验环境
- android应用程序跳转到系统的各个设置页面
- linux Shell入门
- 计算机丢失msvcrt.dll,msvcrt.dll修复工具
- VMware 8.0下载地址
- matlab中求均值的mean()函数的使用
- 台式计算机主板修理教程,小白装机最新最详细的台式电脑组装教程图解
- 线上编程学院codecademy
- app运营,如何提高用户的参与度?
- 逆向破解_iOS_学习笔记_1
- 【整理】Python中的re.search和re.findall之间的区别和联系 + re.finall中带命名的组,不带命名的组,非捕获的组,没有分组四种类型之间的区别