servlet和Web服务之间的区别

时间:2011-05-08 22:24:40

标签: java web-services spring rest terminology

这两个有什么区别?我在google上找到的结果很少,没有结论。

以下是一个跟进问题:

假设我创建了spring mvc web app,使用@Controller注释注释了几个类,并创建了一些可以从前端成功传输一些信息的东西 - >后端,反之亦然,也许某些数据库可能涉及后端。

你会怎么称呼它?休息Web服务或servlet或其他什么?

7 个答案:

答案 0 :(得分:83)

Web服务是一种服务,它使用REST编程范例或SOAP协议为其客户端提供服务方法。有几种方法可以实现Web服务。编写Web服务最简单的方法是编写一个类,并使用@WebService中的@WebMethodjavax.jws注释对其进行注释,然后从main启动它-method with:

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 Specification Version 4.0

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

要使用servlet技术编写Web服务,您可以使用例如JAX-WS(例如,用于SOAP)。为了编写RESTful服务,您可以使用JAX-RS(参考实现为 Jersey ),也可以使用 Spring WebMVC ,但是afaik不是这个框架的主要目的,而且泽西岛更容易使用。

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

旁边的注释,一个用@Controller注释的类还不是一个servlet,它只是一个bean。您如何使用servlet主要取决于您使用的框架。例如,当您使用Spring时,Servlet作业由Springs DispatcherServlet完成,而javax.servlet.http.HttpServlet又将请求转发给正确的bean。如果您使用Tomcat,那么您可以直接编写自己的servlet,只需子类化doGet类并覆盖必要的方法,例如{{1}},它们会响应浏览器的HTTP GET请求。

答案 1 :(得分:41)

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

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

servlet 是一种特定于Java的编写响应HTTP请求的软件的方式。 Spring MVC抽象了很多实现细节,使编写Web应用程序变得更容易,但是使用了servlet。

答案 2 :(得分:10)

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

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

@Controller可能与servlet有关,而不是servlet,这也是实现传输的一种方式。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

Web服务与一个或多或少严格的协议相关联:接口(API)定义了可用的方法及其参数和服务的返回值。

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

例如SOAP是一个Web服务协议: 维基百科的定义:

  

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

答案 5 :(得分: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之外什么都不是

答案 6 :(得分:2)

Web Service使用ServletContainer类,它又是一个Servlet类,它以干净和结构化的方式处理请求。 REST代表REpresentational STateless Protocol。这里请求不会存储任何数据。

REST Web服务支持HTTP方法

  1. GET - 通常用于获取数据。
  2. POST - 插入新对象。
  3. PUT - 更新现有对象。
  4. 删除 - 删除对象。
  5. 我们可以将任意数量的URL映射到Web Service类,它可以包含任何类型的HTTP方法。

    另一方面,每个servlet只能进行1次URL映射。 虽然最终要求可以通过请求参数条件来实现,但是现在使用servlet不会提供干净的方式。

    在网络服务中,我们可以定义类级别的网址路径以及方法级别,这样我们就可以采用更加结构化的方式进行编码。