首页 »Java教程 » axis开发webservice:Web Service开发的层次 »正文
axis开发webservice:Web Service开发的层次
来源: 发布时间:星期一, 2009年8月17日 浏览:27次 评论:0
Web Service是最近几年比较火 ![](/icons/64421de.gif) ![](/icons/64421yi.gif) 个东西 ![](/icons/64421dou.gif) 它带来了 ![](/icons/64421yi.gif) 大堆 ![](/icons/64421de.gif) 新名词 ![](/icons/64421dou.gif) 所以显得比较炫 ![](/icons/64421dou2.gif) 看透其华而不实 ![](/icons/64421de.gif) 表面 ![](/icons/64421dou.gif) 它也就不再神奇 ![](/icons/64421dou2.gif) 下面 ![](/icons/64421de.gif) 讨论均以Java为参考
1 访问 ![](/icons/64421yi.gif) 个Web Service实际上可以看作 ![](/icons/64421diaoyong.gif) ![](/icons/64421yi.gif) 个 ![](/icons/64421hanshu.gif) ![](/icons/64421dou.gif) 唯 ![](/icons/64421yi.gif) 区别 ![](/icons/64421de.gif) 就是这个 ![](/icons/64421hanshu.gif) 是远程 ![](/icons/64421de.gif) ![](/icons/64421dou.gif) 这么 ![](/icons/64421yi.gif) 说 ![](/icons/64421dou.gif) 它和RMI就没有什么本质 ![](/icons/64421de.gif) 区别了 ![](/icons/64421dou2.gif) 既然是 ![](/icons/64421yi.gif) 个 ![](/icons/64421hanshu.gif) ![](/icons/64421dou.gif) 当然要有 ![](/icons/64421hanshu.gif) ![](/icons/64421de.gif) 声明了 ![](/icons/64421dou.gif) 完成这个工作 ![](/icons/64421de.gif) 就是WSDL ![](/icons/64421dou.gif) 它详细 ![](/icons/64421de.gif) 定义 ![](/icons/64421hanshu.gif) ![](/icons/64421de.gif) 原型 ![](/icons/64421dou.gif) 包括 ![](/icons/64421hanshu.gif) 名、入口参数、出口参数 ![](/icons/64421dou.gif) 这就是WSDL中opertion完成 ![](/icons/64421de.gif) 工作 ![](/icons/64421dou2.gif) 既然是 ![](/icons/64421yi.gif) 个远程 ![](/icons/64421de.gif) ![](/icons/64421hanshu.gif) ![](/icons/64421dou.gif) 还要涉及和远程地址 ![](/icons/64421de.gif) ![](/icons/64421yi.gif) 个绑定 ![](/icons/64421dou.gif) 这是WSDL中service ![](/icons/64421de.gif) 任务 ![](/icons/64421dou2.gif) Axis是 ![](/icons/64421yi.gif) 个可以通过WSDL生成相应访问代码 ![](/icons/64421de.gif) 开发包 ![](/icons/64421dou.gif) JBuilder中将它集成了进去 ![](/icons/64421dou.gif) 通过Wizard ![](/icons/64421de.gif) 方式简化了原本需要在命令行中手工完成 ![](/icons/64421de.gif) 操作 ![](/icons/64421dou2.gif)
2 既然是远程访问 ![](/icons/64421dou.gif) 就 ![](/icons/64421yi.gif) 定要有 ![](/icons/64421yi.gif) 个访问协议 ![](/icons/64421dou.gif) Web Service ![](/icons/64421de.gif) 访问协议就是SOAP ![](/icons/64421dou.gif) SOAP建立在XML的上 ![](/icons/64421dou.gif) 区别 ![](/icons/64421de.gif) 就是对XML原本没有限制 ![](/icons/64421de.gif) 格式加上了 ![](/icons/64421yi.gif) 些限制 ![](/icons/64421dou.gif) 需要有envelope ![](/icons/64421dou.gif) 在envelope中 ![](/icons/64421dou.gif) 还要分header和body ![](/icons/64421dou2.gif) 如果利用SOAP开发Web Service ![](/icons/64421de.gif) ![](/icons/64421chengxu.gif) ![](/icons/64421dou.gif) 那就需要根据WSDL ![](/icons/64421de.gif) 定义来自行组装SOAP包 ![](/icons/64421dou.gif) 这显然要比利用WSDL直接面向Web Service开发要复杂 ![](/icons/64421yi.gif) 些 ![](/icons/64421dou2.gif) JAXM是 ![](/icons/64421yi.gif) 个利用SOAP进行通信 ![](/icons/64421de.gif) 开发包 ![](/icons/64421dou.gif) 它简化了SOAP消息 ![](/icons/64421de.gif) 打包过程
3 SOAP是建立在XML的上 ![](/icons/64421de.gif) ![](/icons/64421dou.gif) 那么显然XML ![](/icons/64421de.gif) 开发包同样适合于SOAP 在这个层次上开发Web Service ![](/icons/64421dou.gif) 除了要完成上 ![](/icons/64421yi.gif) 层 ![](/icons/64421de.gif) 工作外 ![](/icons/64421dou.gif) 还要自行按照SOAP ![](/icons/64421de.gif) 格式组装SOAP消息 ![](/icons/64421dou.gif) 这显然又增加了工作量 XML ![](/icons/64421de.gif) 开发工具就比较多了 ![](/icons/64421dou.gif) 从最简单 ![](/icons/64421de.gif) SAX和DOM到DOM4J、JDOM ![](/icons/64421dou.gif) 还有不少XML到对象绑定 ![](/icons/64421de.gif) 工具 ![](/icons/64421dou.gif) 如JAXB、Castor等等 其实 ![](/icons/64421dou.gif) 不考虑Web Service ![](/icons/64421dou.gif) 完全用XML做通信协议 ![](/icons/64421de.gif) 情况也并不少见 ![](/icons/64421dou2.gif) 知晓XML-RPC ![](/icons/64421de.gif) 存在 ![](/icons/64421dou.gif) 就不难理解了XML做通信 ![](/icons/64421de.gif) 含义了 ![](/icons/64421dou2.gif) 截至到这里所讨论 ![](/icons/64421de.gif) 内容 ![](/icons/64421dou.gif) Sun提供了JWSDP(Java Web Service Developer Pack) ![](/icons/64421dou.gif) 其中包含从XML解析到WSDL生成 ![](/icons/64421de.gif) 全套解决方案
4 上面讨论 ![](/icons/64421de.gif) 所有东西实际上都还停留在传递消息 ![](/icons/64421de.gif) 内容上 ![](/icons/64421dou.gif) 并未涉及通信 ![](/icons/64421de.gif) 过程 ![](/icons/64421dou2.gif) 不要 ![](/icons/64421yi.gif) 看到Web Service ![](/icons/64421de.gif) Web就想当然认为它只能通过HTTP来传输 ![](/icons/64421dou2.gif) 前面 ![](/icons/64421de.gif) 讨论可以看出 ![](/icons/64421dou.gif) 所有 ![](/icons/64421de.gif) 消息内容和传输并无直接关系 ![](/icons/64421dou.gif) 所以 ![](/icons/64421dou.gif) 无论是以HTTP传输 ![](/icons/64421dou.gif) 还是SMTP或是自定义 ![](/icons/64421de.gif) 协议都没有问题 ![](/icons/64421dou2.gif) 在这个层次上开发Web Service ![](/icons/64421dou.gif) 前面 ![](/icons/64421de.gif) 种种险阻的外 ![](/icons/64421dou.gif) 还要完成对XML ![](/icons/64421de.gif) 手工解析工作 这里还是以最常见 ![](/icons/64421de.gif) HTTP方式来讨论 ![](/icons/64421dou2.gif) HTTP ![](/icons/64421de.gif) 开发就将Server和Client区别对待 ![](/icons/64421dou.gif) Server ![](/icons/64421de.gif) 实现通常 ![](/icons/64421de.gif) 选择是Servlet ![](/icons/64421dou.gif) 让Web Server替我们完成HTTP协议 ![](/icons/64421de.gif) 解析可以省去我们很多 ![](/icons/64421de.gif) 作 ![](/icons/64421dou2.gif) Client ![](/icons/64421de.gif) 实现可以选择JDK自带 ![](/icons/64421de.gif) Http Client ![](/icons/64421dou.gif) Apache ![](/icons/64421de.gif) Jakarta项目下 ![](/icons/64421de.gif) Commons子项目也提供了 ![](/icons/64421yi.gif) 个HttpClient
5 无论是HTTP还是SMTP ![](/icons/64421dou.gif) 抑或是自定义协议 ![](/icons/64421dou.gif) 归根结底都是应用级 ![](/icons/64421de.gif) 协议 ![](/icons/64421dou.gif) 底层 ![](/icons/64421de.gif) 实现都是由Socket完成 ![](/icons/64421dou2.gif) 到了这个层次基本就是原始时代了 ![](/icons/64421dou.gif) 什么都没有 ![](/icons/64421dou.gif) ![](/icons/64421yi.gif) 切都要手工完成 ![](/icons/64421dou2.gif) 在这个层次上开发Web Service ![](/icons/64421dou.gif) 所有前面 ![](/icons/64421de.gif) 困难都要 ![](/icons/64421yi.gif) ![](/icons/64421yi.gif) 经历 ![](/icons/64421dou.gif) 此外 ![](/icons/64421dou.gif) 还有协议 ![](/icons/64421de.gif) 开发等待着不幸至此 ![](/icons/64421de.gif) 人们 ![](/icons/64421dou2.gif) 到了这里 ![](/icons/64421dou.gif) 也不需要其它 ![](/icons/64421de.gif) 工具了 ![](/icons/64421dou.gif) JDK自带 ![](/icons/64421de.gif) Socket可以保打天下
6 还想往下吗?再往下就是操作系统 ![](/icons/64421de.gif) 实现了 ![](/icons/64421dou.gif) Java ![](/icons/64421de.gif) 平台无关就失去了意义 ![](/icons/64421dou.gif) 也超出了我目前所了解 ![](/icons/64421de.gif) 范围 ![](/icons/64421dou.gif) 到此打住吧! 前面所提及应该算是Web Service ![](/icons/64421de.gif) ![](/icons/64421yi.gif) 个基本知识结构 ![](/icons/64421dou.gif) 这里并没有讨论UDDI等等 ![](/icons/64421de.gif) 内容 ![](/icons/64421dou.gif) ![](/icons/64421yi.gif) 来我对它并不了解 ![](/icons/64421dou.gif) 2来那应该属于应用 ![](/icons/64421dou.gif) 不应该算Web Service实现中 ![](/icons/64421dou2.gif) 虽然我们可能不会从最下层开发Web Service ![](/icons/64421dou.gif) 但遇到底层 ![](/icons/64421de.gif) 问题 ![](/icons/64421de.gif) 情况却在所难免 ![](/icons/64421dou2.gif) 我就曾经在开发 ![](/icons/64421yi.gif) 个Web Service应用 ![](/icons/64421de.gif) 时候 ![](/icons/64421dou.gif) 被人抓住HTTP头中 ![](/icons/64421de.gif) SOAPAction大小写和某个所谓 ![](/icons/64421de.gif) 规范标准区别 ![](/icons/64421dou.gif) 我查了半天HTTP规范标准和SOAP规范标准 ![](/icons/64421dou.gif) 知道了HTTP是区分大小 ![](/icons/64421dou.gif) 而SOAPAction就是应该这么写 ![](/icons/64421dou.gif) 据理力争 ![](/icons/64421dou.gif) 指出所谓规范标准 ![](/icons/64421de.gif) ![](/icons/64421cuowu.gif)
经过前面 ![](/icons/64421de.gif) 讨论 ![](/icons/64421dou.gif) 我们可以看出 ![](/icons/64421dou.gif) Web Service并没有什么神秘可言 ![](/icons/64421dou.gif) 所有 ![](/icons/64421de.gif) 东西都是建立在已有东西 ![](/icons/64421de.gif) 基础的上 ![](/icons/64421dou2.gif) 技术 ![](/icons/64421de.gif) 发展不会是无中生有 ![](/icons/64421dou.gif) 只会是 ![](/icons/64421yi.gif) 个更好 ![](/icons/64421de.gif) 解决方案而已 ![](/icons/64421dou.gif) 在追新求变的前 ![](/icons/64421dou.gif) ![](/icons/64421yi.gif) 个比较牢固 ![](/icons/64421de.gif) 基础才是最重要
相关文章
读者评论
发表评论
|
|