servlet和Web服务之间的区别


88

这2和有什么区别?我在Google上发现的结果很少,没有定论。

这是一个后续问题:

假设我创建了带有@Controller注释的spring mvc Web应用程序注释了几个类,并创建了一些可以成功地从前端->后端传输某些信息(反之亦然)的信息,并且后端可能涉及某些数据库。

你会怎么称呼 其余的Web服务或servlet还是其他东西?


6
一个建议:如果您不知道什么是servlet,则可能会遇到spring mvc(带有批注)的问题。一个更简单的解决方案(香草Servlet + jdbc)可能会帮助您更快地学习基础知识。
biziclop 2011年

1
如果一个servlet仅具有一种有意义的行为,并且该servlet被映射到一个显式URL,我看不出为什么(1)无法将GET或POST参数发送到Servlet(2)Servlet的响应可能是返回一个负载。具有适当的MIME类型集(3)的XML,这在学术意义上不等于Web服务吗?
8bitjunkie 2014年

@GandalfStormCrow使用servlet传递的实际数据不是数据,而是html文档。html文档更适合诸如1)获取文档2)从人到计算机显示文档的请求。但是,需要以机器独立的方式进行应用程序之间的通信。因此,Web服务讨论使用HTTP上的xml进行数据的数据传输。
外汇兑换

Answers:


90

web服务是使用任一REST编程范例或用于通信的SOAP协议提供的服务的方法为客户的服务。有几种实现Web服务的方法。编写一个Web服务的最简单的办法是写一个类,并用其标注@WebService@WebMethod从注释javax.jws,然后从启动它main与-方法:

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

结果是,您可以在注册的URL上查看WSDL,并且如果您具有SoapUI或任何其他SOAP客户端,则还可以测试和使用Web服务。

一个servlet的,另一方面是用来运输HTTP请求和响应。它可以用于编写具有JSP和HTML的Web应用程序,或用于提供XML和JSON响应(如在RESTful服务中),当然也可以用于接收和返回SOAP消息。您可以将其视为Web服务之下的一层。Servlet有自己的标准,目前是Java Servlet规范版本4.0

一种更全面和实用的方法是使用框架编写Web服务,并将其发布在应用程序服务器或servlet容器(例如Tomcat或JBoss)上。在这种情况下,您将使用Servlet来处理传输您的SOAP或REST消息的HTTP请求的传输。

要使用Servlet技术编写Web服务,您可以使用例如JAX-WS(例如SOAP)。为了编写RESTful服务,可以使用JAX-RS(参考实现为Jersey),也可以使用Spring WebMVC,但据我所知,这并不是此框架的主要目的,并且Jersey相当重要更容易使用。

关于第二个问题:@Controller注释是特定于Spring的构造型注释,它告诉Spring有关您的bean应该做什么的一些信息。控制器的确切方法取决于您方法的实际实现,您可以将Spring配置为返回纯文本,HTML,JSON,XML,二进制数据或您想要的任何内容。

在旁边的注释中,带有注释的类@Controller还不是servlet,它只是一个bean。使用servlet的方式主要取决于您使用的框架。例如,当您使用Spring时,该servlet作业由Springs完成DispatcherServlet,然后将请求转发到正确的bean。如果您使用Tomcat,则可以通过简单地对该javax.servlet.http.HttpServlet类进行子类化并覆盖必要的方法(例如doGet响应来自浏览器的HTTP GET请求)来直接编写自己的servlet 。


3
“ REST或SOAP作为其协议” ...但是REST不是协议!
不是错误

3
严格来说,它不是编程范式。我已更正我的表述以反映这一点。
lanoxx

@lanoxx Web服务的目标是帮助一个企业应用程序轻松地与另一个企业应用程序集成,假设这些应用程序是新的,则需要彼此通信。企业应用程序集成
overexchange

上面的Java Servlet规范(现在为4.0)链接已失效,现在可以在javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy,

43

您要描述的是一个Web应用程序,人们在其中使用浏览器与软件系统进行交互。

一个Web服务是软件系统相互使用HTTP和XML或JSON通信,而无需任何人的方式。

一个servlet的是编写软件,响应HTTP请求的Java的具体方式。Spring MVC摘录了许多实现细节,以简化Web应用程序的编写,但在后台使用了servlet。


Web应用程序风格的编程也可以用于软件系统相互通信,但是我认为这不是结构化的编程方式,也不是IT行业中使用的标准。
Mohamed Iqzas '16

10

我认为Web服务定义了更高级别的抽象,例如某些特定于业务的功能。而Servlet只是负责数据传输的软件实现组件。

Web Service实现通常将依赖servlet来接收数据。但是,它也可以使用其自定义层来处理协议数据。

与Servlet相比,@Controller可能与Web Service更相关,后者也是一种实现传输的方式。


1
@Controller是Spring Web MVC框架(是C)的一部分,因此它绝对不是Web服务,但也与servlet无关。
biziclop 2011年

我同意,@ Controller本身绝不是Web服务。但是我个人倾向于将@Controller经常用作REST服务的终点。我怀疑这是Spring MVC不太流行的用法。
Alex Gitelman

3

Servlet和Web Service之间最明显的区别是:您通过HTTP访问servlet,而通过SOAP(简单对象访问协议)访问Web Service。但是,实际上,您不能直接调用Servlet,如果调用者不在您的应用程序中,则只能打开URL连接并在Servlet中添加一些参数。而且您不能限制调用者可以输入的参数。调用者不知道您的servlet可以接收哪些参数。因此,您最好使用Web服务向其他应用程序提供API,Web服务的WSDL文件可以为调用者提供足够的信息来调用您的Web服务。


2

Servlet是HTTP查询处理程序。您可以对传入的查询执行所需的操作。一个servlet在JVM上运行。

Web服务或多或少地与严格的协议绑定:使用可用方法及其参数和服务的返回值定义接口(API)。

使用协议机制公开此接口。这些协议与运行该服务的主机无关,您可以使用PHP,Java,C#或您自己的语言定义相同的Web服务。您只需要编写一段代码就能理解协议的查询,并能够生成客户端可读的答案。

例如,SOAP是一个Web服务协议:Wikipedia定义:

SOAP最初定义为“简单对象访问协议”,是一种协议规范,用于在计算机网络中的Web服务实现中交换结构化信息。


2

Web服务比Servlet具有更高的级别。Servlet是一种简单的API,并提供编写服务器端组件的功能。

例如,RESTfull是一个Web服务,其中包含许多其他“功能”以及Servlet。要进行部署,我们可以将web.xml定义为-

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>jersey.rest.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

就是一个servlet


2

Web Service使用ServletContainer类,它又是一个Servlet类,它以干净和结构化的方式处理请求。REST代表代表性的无状态协议。在此请求将不会存储任何数据。

REST Web服务支持HTTP方法

  1. GET-通常用于获取数据。
  2. POST-插入新对象。
  3. PUT- 更新现有对象。
  4. 删除-删除对象。

我们可以将任意数量的URL映射到可以具有任何HTTP方法类型的Web Service类。

另一方面,每个servlet只能进行1个URL映射。尽管可以通过请求参数条件来达到最终要求,但是如今使用servlet并不能提供干净的方法。

在网络服务中,我们可以在类级别以及方法级别定义URL路径,这使我们能够以更加结构化的方式进行编码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.