锁定老帖子 主题:我个人理解的什么是web service
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-05
首先从本次项目的系统集成说起。我只说现状,不评论其是否合理或者正确。 这次只有一台应用服务器,应用服务器上同时启动多个jboss,每个jboss中有若干个(1-3)应用。 每个子系统都对外提供了一些接口,或者说是服务,供其他的子系统调用。接口的提供方式是web service,用CXF进行了封装。与此同时,由于要开放一些服务给android终端调用,所以也提供了一个servlet的地址,专门给终端用。以上就是本次多个子系统相互集成的方式 但是事实上,子系统直接调用提供给终端的servlet也是可以的,用web service可以实现的功能,用servlet照样可以实现。所以由此我就在想,究竟所谓的web service和servlet有什么区别? 相同点: 1、流程相似:客户端(可以是浏览器或者应用程序)访问指定的地址,服务端(web service或者servlet)接受参数,在内部进行逻辑处理,然后返回一个结果给客户端。这个过程是相同的,所以上面说了,用web service可以做到的事情,用servlet一样可以做到 2、底层协议基本相同:servlet是基于HTTP协议,大部分的web service同样也是基于HTTP协议 不同点: 1、servlet在服务端是只能用java实现的(本身就是JavaEE规范的一部分),而web service的服务端可以用任何语言来实现。相应的,servlet只能部署在Servlet容器内,而web service则无此限制 2、servlet返回的是纯文本(有的文章里说,servlet返回的是HTML,这个是不对的,所谓的HTML也不过是文本而已,我一个servlet做完业务逻辑以后,完全可以返回"success"等字符串,甚至可以返回一个空串),而web service返回的是语义更加丰富的XML,而且可以是有类型的 3、servlet的地址,如果不公开声明,客户端是不知道的。比如我们这个项目,提供servlet的子系统,对终端声明了servlet的地址,终端才知道这个URL,才知道往哪里调。而web service,可以通过WSDL,对外公开发布自己的地址 4、web service的请求和响应,都有一套XML规范(标准、协议),所以只要遵循web service规范,任何人或者说任何程序都能读懂web service的请求和响应。而如果用servlet的话,当然也可以自己定义一套输入和输出的XML格式,但是这个格式除了你自己,或者组织内部,是没有人懂的。所以把这个servlet放到网上,根本没有用,因为别人不知道怎么按照你的要求传递参数给你,也不知道怎么解析你的返回值。从这个角度说,web service是通用的规范 5、servlet就是JavaEE规范的一部分,定义了一组API,其实现依赖各应用服务器厂商,比如jboss、tomcat、WAS等,但无论其如何实现,都是基于JAVA平台的。而web service是一种定义了“网络服务”如何提供和使用的规范,没有规定其实现的平台,所以具有跨平台的特点 总结来说,servlet和web service不是一个层面的东西,虽然有很多共同点,但是并不容易放在一起来比较。 如果有跨平台的需求,或者需要开放给网络上的其他组件调用,那么选择web service是不错的,因为其没有绑定JAVA平台,更重要的是,web service已经有了输入输出的规范,就节省了定义和推广的成本 但是,如果只是在一个有限的系统内要实现互相调用,每个子系统都是基于JAVA平台来实现,这个服务也没有打算发布到互联网的话,那么用servlet或者RMI就更合适,因为更简单,也不需要额外的成本,并且性能也更好 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-01-06
我表示,完全同意啊。。。
|
|
返回顶楼 | |
发表时间:2012-01-06
其实核心都是一样的,都是基于http的请求和相应
|
|
返回顶楼 | |
发表时间:2012-01-06
moyue 写道 其实核心都是一样的,都是基于http的请求和相应 webservice可不一定要基于http |
|
返回顶楼 | |
发表时间:2012-01-07
对,只是大部分是HTTP,其实Servlet也有不基于HTTP的,只不过少见
|
|
返回顶楼 | |
发表时间:2012-01-07
moyue 写道 其实核心都是一样的,都是基于http的请求和相应
axis2 就是基于soap+http的 |
|
返回顶楼 | |
发表时间:2012-01-07
总结得挺好的
如果是同构系统(特指java)之间互相调用,用hessian是个不错的选择 与spring集成很方便 |
|
返回顶楼 | |
发表时间:2012-01-07
KimHo 写道 总结得挺好的
如果是同构系统(特指java)之间互相调用,用hessian是个不错的选择 与spring集成很方便 +1 总结的确实不错 |
|
返回顶楼 | |
发表时间:2012-01-07
最后修改:2012-01-07
moyue 写道 其实核心都是一样的,都是基于http的请求和相应
朋友,很面熟,上次讨论MVC,看的出还是有水平的。 web service基础的协议是soap协议,相关协议可以从baidu文库找到。主要目的是描述远程调用过程与对应参数以及类型。 http是更外层的壳。是通讯的一种方式。 web service可以走HTTP,也可以走其他通讯协议。 没仔细看,字太多 有个地方语义不明确 引用 servlet返回的是纯文本(有的文章里说,servlet返回的是HTML,这个是不对的,所谓的HTML也不过是文本而已,我一个servlet做完业务逻辑以后,完全可以返回"success"等字符串,甚至可以返回一个空串),而web service返回的是语义更加丰富的XML,而且可以是有类型的 servlet本身是返回文本流的,而web service的SOAP协议也是文本流承载的,只不过需要相对的解包方式。 总之,共同学习吧。 |
|
返回顶楼 | |
发表时间:2012-01-07
再扩展下话题,貌似REST又是SOA的另一种设计思路?
|
|
返回顶楼 | |