当前位置: 首页 > news >正文

厦门市网站建设app开发水务 网站建设

厦门市网站建设app开发,水务 网站建设,巴西网站域名,网站开发成本报表一、hessian是什么 Hessian是一个轻量级的remoting onhttp工具#xff0c;使用简单的方法提供了RMI的功能。 相比WebService#xff0c;Hessian更简单、快捷。采用的是二进制RPC协议#xff0c;因为采用的是二进制协议#xff0c;所以它很适合于发送二进制数据。——百度百…一、hessian是什么 Hessian是一个轻量级的remoting onhttp工具使用简单的方法提供了RMI的功能。 相比WebServiceHessian更简单、快捷。采用的是二进制RPC协议因为采用的是二进制协议所以它很适合于发送二进制数据。——百度百科   学习hessian必须知道什么是RPC。 实现RPC必须解决如下几个问题 1、通讯问题。 2、寻址问题。 3、序列化与反序列化。 带着这三个问题我们一起来探究一下hessian   二、hessian怎么使用 首先大家去下载源码并导入到idea中打开 https://github.com/zhaojiatao/learn_hessian 项目结构 --learn_hessian ----api  客户端和服务端均共同引用的接口api ----client  客户端调用demo包括本地直接通过代理对象调用以及使用spring集成方式调用 ----webserver  通过传统servlet方式提供服务 ----webserver_spring  与spring集成 提供服务   2.1服务端搭建 2.1.1传统serlet方式搭建 在web.xml中配置HessianServlet 指明服务地址/hessian 及其实现类com.zjt.learn.hessian.api.impl.GetUserInfoImpl servletservlet-nameHessianServlet/servlet-nameservlet-classcom.caucho.hessian.server.HessianServlet/servlet-classinit-paramparam-nameservice-class/param-nameparam-valuecom.zjt.learn.hessian.api.impl.GetUserInfoImpl/param-value/init-param/servletservlet-mappingservlet-nameHessianServlet/servlet-nameurl-pattern/hessian/url-pattern/servlet-mapping   package com.zjt.learn.hessian.api.impl;import com.zjt.learn.hessian.api.GetUserInfo; import com.zjt.learn.hessian.dto.User; import org.apache.commons.lang3.StringUtils;/*** Created by zhaojiataosouche.com on 2018/4/17*/ public class GetUserInfoImpl implements GetUserInfo {Overridepublic String getuserinfo(String id) {if(StringUtils.isNotBlank(id)){User usernew User();user.setId(1);user.setName(zhaojiatao);user.setAddress(hangzhou);user.setAge(18);user.setGender(1);return user.toString();}return null;} }   2.1.2使用spring方式集成发布服务 首先在web.xml中配置springmvc servletservlet-nameSpringMVC/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-nameSpringMVC/servlet-nameurl-pattern/remote/*/url-pattern/servlet-mapping   配置applicationContext.xml: 使用HessianServiceExporter来处理请求 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsddefault-lazy-inittruebean id getuserService classcom.zjt.learn.hessian.api.impl.GetUserInfoImpl/bean name/getuserHessianService classorg.springframework.remoting.caucho.HessianServiceExporterproperty nameservice refgetuserService/property nameserviceInterface valuecom.zjt.learn.hessian.api.GetUserInfo//bean /beans       2.2客户端调用 2.2.1使用传统方式调用远程服务 package test;import com.caucho.hessian.client.HessianProxyFactory; import com.zjt.learn.hessian.api.GetUserInfo;/*** Created by zhaojiataosouche.com on 2018/4/17*/ public class BasicClient {public static void main(String[] args) {try {String url http://localhost:8080/hessian;HessianProxyFactory factory new HessianProxyFactory();factory.setOverloadEnabled(true);GetUserInfo getUserInfo (GetUserInfo) factory.create(GetUserInfo.class, url);System.out.println(getUserInfo.getuserinfo(1));System.out.println(over);}catch (Exception e){e.printStackTrace();}}}     2.2.2使用spring方式调用 新建spring.xml配置文件 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsddefault-lazy-inittruebean idgetuserService classorg.springframework.remoting.caucho.HessianProxyFactoryBeanproperty nameserviceUrl valuehttp://localhost:8080/remote/getuserHessianService/property nameserviceInterface valuecom.zjt.learn.hessian.api.GetUserInfo//bean /beans     package test;import com.zjt.learn.hessian.api.GetUserInfo; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Created by zhaojiataosouche.com on 2018/4/18*/ public class BasicSpringClient {public static void main(String[] args) {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(new String[]{classpath:spring.xml});GetUserInfo getUserInfo (GetUserInfo)context.getBean(getuserService);System.out.println(getUserInfo.getuserinfo(1));}}     hessian的使用是很简单的。大家自己照着代码敲一下就可以。   三、探究一下hessian的细节 回到文章开始提出的问题即rpc框架需要解决的问题看看hessian如何解决的。 3.1.通讯问题 我们先看看客户端在发起远程请求前都经历了什么 首先客户端通过代理工厂对象HessianProxyFactory的create方法创建代理对象 在create方法里可以看到该代理对象在执行时的handler是通过HessianProxy代理对象的invoke方法来执行典型的动态代理    在invoke方法中 通过String methodName method.getName();得到方法名 通过sendRequest方法取得和服务端的连接HessianConnection对象 跟踪sendRequest方法我们发现 发现hessian是使用http协议进行网络通信  在is getInputStream(conn);处等待服务端返回的响应    3.2 寻址问题 我们跟踪这里 我们得出结论hessian使用lookup方法来寻找远程服务   3.3序列化与反序列化 我们继续看刚刚跟踪的客户端调用时执行的HessianProxy对象的invoke方法 进入其中的 conn sendRequest(mangleName, args) 再进入 out.call(methodName, args); 再进入 writeObject(args[i]);  进入其Hessian2Output实现中 最终看到了hessian如何进行序列化 serializer.writeObject(object, this);     至此我们也可以梳理一下hessian客户端动态代理的执行流程   我们再来看看服务端的执行细节 通过后台的代码可见我们所有的工作都围绕在HessianServlet在展开。该Servlet中有两个比较重要的方法init()、service(); init方法初始化服务和服务对象主要分为3步 通过home-class或者service-class创建服务端的实现类实例 init方法还会创建HessianSkeleton对象这是Hessian服务端的核心功能部分。 HessianSkeleton继承自AbstractSkeleton其构造方法将会从实现类中抽取方法和方法的Method对象并且存储到_methodMap中。 对于一个Servlet来说其service方法是对外提供服务的方法 最主要的是调用HessianSkeleton对象的invoke方法。注意Servlet实例中有两个HessianSkeleton变量分别是_objectSkeleton和 _homeSkeleton invoke方法 首先从HessianInput对象中获取到Method信息获取到真正的service对象。 根据反射机制调用service对象的invoke方法获取到返回值。 最后调用HessianOutput对象将结果写回到调用方。          本文参考 https://blog.csdn.net/sunwei_pyw/article/details/74002351 https://www.cnblogs.com/happyday56/p/4268249.html  转载于:https://www.cnblogs.com/zhaojiatao/p/8908335.html
http://www.zqtcl.cn/news/106952/

相关文章:

  • jfinal网站开发装修公司加盟哪家最好
  • 成都个人网站制作石家庄设计网站公司
  • 阿里巴巴网站本土化建设烟台市两学一做网站
  • 潍坊品牌网站建设公司旅游类作业网站
  • 建设谷歌公司网站费用求职seo推荐
  • 企业网站建设规划ppt企业网站前端模板下载
  • 补习吧 一家专门做家教的网站百度云搜索引擎入口网盘搜索神器
  • 网站建设与制作企业嘉鱼网站建设哪家专业
  • 电脑怎么做网站赚钱柳州柳北建设局网站
  • 农村服务建设有限公司网站设计基础网站推荐
  • 做网站的编程语言组合ppt模板免费的网站推荐
  • 泰安企业建站公司流程上海营销型网站报价
  • 网站承载量怎么做福州公交集团网站建设
  • 新吴区住房和建设交通局网站小程序商城哪家好排行榜
  • 中小学网站建站模板长春火车站咨询电话
  • c2c网站特点公司网站建设亚运村
  • 邢台wap网站建设费用黑帽seo之搜索引擎
  • 如何用阿里云做网站刷题网站怎么做
  • 织梦制作手机网站上海猎头公司名单
  • 免费生成图片的网站wordpress 购物
  • 江西建设部网站国际新闻最新消息今天2023
  • 怎么做网站啊wordpress英文显示改中文
  • 建筑专业网站有哪些网站标题seo外包优化
  • 浙江建设厅网站施工员报名中国建设协会官网站
  • 网站建设优化是干嘛上海今天最新的新闻
  • 网站大全浏览器软文的概念
  • 盐山做网站价格莱芜征婚吧
  • 具有品牌的微网站建设网站设计培训班前台
  • 网站推广工具推荐html网站地图在线生成
  • 成都本地网站建设青岛电子商务的网站建设