如何学习Java web服务?

如何学习Java web服务?,java,web-services,Java,Web Services,我上一次使用Java servlet和JSP进行Java web开发是在2004年。我从来没有真正的地方与EJB。我回忆起我在开发web服务\动态web站点时的经验,这些web服务的开发速度很慢(就开发时间而言),而且很痛苦(就易于部署而言) 现在大多数企业用什么来开发基于Java的网站?您是否使用AXIS或其他框架来执行web服务?前端是否使用JSP或其他技术?当前的标准是使用JAX-WS(用于SOAP web服务)和JAX-RS(用于RESTful web服务) 这些是具有多个实现的标准。J

我上一次使用Java servlet和JSP进行Java web开发是在2004年。我从来没有真正的地方与EJB。我回忆起我在开发web服务\动态web站点时的经验,这些web服务的开发速度很慢(就开发时间而言),而且很痛苦(就易于部署而言)


现在大多数企业用什么来开发基于Java的网站?您是否使用AXIS或其他框架来执行web服务?前端是否使用JSP或其他技术?

当前的标准是使用JAX-WS(用于SOAP web服务)和JAX-RS(用于RESTful web服务)


这些是具有多个实现的标准。JAX-WS有Metro、CXF等。JAX-RS有Jersey、RESTEasy等。我会按顺序学习这些

  • 休息
  • XSD
  • WSDL
  • JAX-*
  • 替代品?(Thrift、Avro、协议缓冲区等)

    • 从2004年开始,工具支持和开发的便利性也有了长足的进步。随着人们越来越关注轻量级框架(部分归功于spring),用java实现web服务变得越来越容易

      在决定实现web服务之前,您需要回答一个简单的问题。肥皂还是休息。我建议你形成自己的观点,但这是我能想到的,在我的脑海里

      肥皂的优点:

    • 优秀的工具支持
    • 最流行的技术
    • JAX-WS标准非常成熟
    • 易于开发。(注释支持将POJO转换为webservice)
    • 例如地铁、安讯士
    • 肥皂的缺点。(问罗伊·菲尔丁……)

    • 臃肿的协议
    • 协议的定制是可能的,但很复杂。(使用wsdl绑定等)
    • 客户端需要复杂的库来序列化和反序列化soap消息
    • 像Android这样的平台本机不支持SOAP
    • 在Roy Fieldings对臃肿的web服务协议大发雷霆,并提出将internet的脊梁用于SOA的常识性论点之后,有一种逐渐走向REST的趋势。像谷歌和亚马逊这样更为敏捷的公司已经采用了REST,并且正在支持基于REST的web服务

      休息的好处:

    • 非常轻量级的协议
    • 主要基于HTTP,因此大多数客户端都知道如何使用。(但REST不必是HTTP)
    • 错误管理和缓存等理念都是基于成熟的互联网技术
    • Java拥有优秀的REST库。Sun自己的Jersey是一个优秀的Jax-RS参考实现,有Restlet、Jboss Rest框架和Spring Rest(尽管不符合Jax-RS)
    • 休息的缺点:

    • 相对较差的工具支持
    • REST中的安全实现有点困难
    • 面向资源的设计和实现对于一些传统的程序员和架构师来说可能是新的
    • 我更喜欢球衣。它是一个令人惊叹的框架,优秀的支持,优秀的文档,优秀的测试支持库

      无论哪种方式,我都将下载Netbeans IDE并使用它为REST或基于SOAP的web服务开发框架代码。Netbeans使入门变得非常容易。一旦您熟悉了代码,就可以切换到您最喜欢的IDE。(顺便说一句,除了原型设计之外,我不使用Netbeans,它做了很多事情,但大多数都做得很糟糕。

      我更喜欢Avro(在@Rodrigap的回答中提到)。在我现在工作的地方,我们有一个面向服务的体系结构,并将Avro用于内部服务。我们之所以选择它,是因为它快速、稳定,可以在http上运行(很容易从Tomcat中获得),可以自动生成客户机类,并且可以与多种语言一起使用。客户机类的生成对我们来说是一个很大的功能,因为这意味着我们只处理Java对象,而让Avro处理序列化和通过网络发送内容。不用处理很多不同的url也很好。avrowebservice由一个servlet托管,Avro负责将每个请求映射到实现类中的适当方法

      不过,为了再次引用@rodrigoap的答案,他在Avro之前列出了其他几个选项,对于外部访问的web服务,我同意这些是更好的选择,因为您的外部服务用户可能不会因为您选择了Avro而对使用Avro感兴趣


      如果您对一个示例感兴趣,下面是一个项目,您可以深入了解它的工作原理。

      您是指WSDL中的web服务还是狭义的REST驱动的服务,还是Java驱动的网站?