servlet和web服务的区别

这两个有什么区别? 我发现谷歌上的一些结果没有任何结论。

这是一个后续问题:

假设我使用@Controller注解创buildspring mvc web app注释类,并创build一些能够成功地从前端 – >后端传输一些信息的东西,反之亦然,也许某些数据库可能涉及到后端。

你会怎么称呼? 剩下的Web服务或servlet或其他东西?

Web服务是一种服务,它使用REST编程范例或SOAP协议进行通信,为其客户端提供服务方法。 有几种方法来实现一个Web服务。 编写Web服务最简单的方法是编写一个类,并使用来自javax.jws@WebService@WebMethod注释对其进行注释,然后使用main方法从以下位置启动它:

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

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

另一方面, servlet用于传输HTTP请求和响应。 它可用于使用JSP和HTML编写Web应用程序,或者提供XML和JSON响应(如在REST式服务中),当然也可用于接收和返回SOAP消息。 您可以将其视为Web服务下的一层 。 Servlet有其自己的标准,目前是Java Servlet Specification Version 3.1

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

要使用servlet技术编写Web服务,您可以使用JAX-WS(例如,用于SOAP)。 为了编写RESTful服务,你可以使用JAX-RS(参考实现是Jersey ),或者你也可以使用Spring WebMVC ,但是这个框架的主要目的并不在于这个框架,而Jersey是相当容易使用的。

关于第二个问题: @Controller注解是Spring特定的@Controller型注释,告诉Spring你的bean应该做什么。 控制器的一个方法将返回什么取决于你的方法的实际实现,你可以configurationSpring返回纯文本,HTML,JSON,XML,二进制数据或任何你想要的。

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

你所描述的是一个Web应用程序 ,一个人使用浏览器与软件系统进行交互。

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

一个servlet是Java特有的编写软件的方式,可以响应HTTP请求。 Spring MVC抽象出许多实现细节,使得编写Web应用程序更容易,但是使用servlet。

我认为Web服务定义了更高层次的抽象,比如某些业务特定的function。 而Servlet只是一个负责传输数据的软件实现组件。

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

@Controller可能更多地与Web服务相关,而不是servlet,这也是一种实现传输的方式。

一个servlet是一个HTTP查询处理程序。 你可以做你想要的传入查询。 在JVM上运行一个servlet。

Web服务绑定到一个或多或less僵化的协议:接口(API)是用可用的方法及其参数和服务的返回值定义的。

这个接口是使用协议机制公开的。 这些协议对于运行服务的主机是不可知的:您可以使用PHP,Java,C#或您自己的语言来定义相同的Web服务。 你只需要有一段代码能够理解协议的查询,并能够生成客户端可读的答案。

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

SOAP最初被定义为简单对象访问协议,是在计算机networking中实现Web服务时交换结构化信息的协议规范。

Web服务运行在比servlet更高的层次上。 Servlet是简单的API,提供了编写服务器端组件的function。

例如RESTfull是一个Web服务,它包含许多其他“function”以及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

Servlet和Web Service最明显的区别是:你通过HTTP访问Servlet,而通过SOAP(简单对象访问协议)访问Web Service。 但是,实际上,您不能直接调用一个servlet,如果调用者不在应用程序中,您只能打开URL连接并将一些参数放到servlet中。 而且你不能限制调用者可以放置的参数。 调用者不知道你的servlet可以接收什么参数。 所以,你最好使用web服务来为其他应用程序提供API,你的web服务的WSDL文件可以给调用者足够的信息来调用你的web服务。

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

REST Web服务支持HTTP方法

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

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

另一方面,每个servlet只能有1个URL映射。 虽然最终需求可以通过请求参数条件来实现,但是现在使用servlet不能提供清晰的方式。

在web服务中,我们可以在Class级别Method级别定义URLpath,这允许我们以更结构化的方式进行编码。