论坛首页 Java企业应用论坛

我个人理解的什么是web service

浏览 6661 次
精华帖 (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就更合适,因为更简单,也不需要额外的成本,并且性能也更好
   发表时间:2012-01-06  
我表示,完全同意啊。。。
0 请登录后投票
   发表时间:2012-01-06  
其实核心都是一样的,都是基于http的请求和相应
0 请登录后投票
   发表时间:2012-01-06  
moyue 写道
其实核心都是一样的,都是基于http的请求和相应

webservice可不一定要基于http
0 请登录后投票
   发表时间:2012-01-07  
对,只是大部分是HTTP,其实Servlet也有不基于HTTP的,只不过少见
0 请登录后投票
   发表时间:2012-01-07  
moyue 写道
其实核心都是一样的,都是基于http的请求和相应

axis2 就是基于soap+http的
0 请登录后投票
   发表时间:2012-01-07  
总结得挺好的
如果是同构系统(特指java)之间互相调用,用hessian是个不错的选择
与spring集成很方便
0 请登录后投票
   发表时间:2012-01-07  
KimHo 写道
总结得挺好的
如果是同构系统(特指java)之间互相调用,用hessian是个不错的选择
与spring集成很方便

+1 总结的确实不错
0 请登录后投票
   发表时间: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协议也是文本流承载的,只不过需要相对的解包方式。

总之,共同学习吧。
0 请登录后投票
   发表时间:2012-01-07  
再扩展下话题,貌似REST又是SOA的另一种设计思路?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics