这2和有什么区别?我在Google上发现的结果很少,没有定论。
这是一个后续问题:
假设我创建了带有@Controller注释的spring mvc Web应用程序注释了几个类,并创建了一些可以成功地从前端->后端传输某些信息(反之亦然)的信息,并且后端可能涉及某些数据库。
你会怎么称呼 其余的Web服务或servlet还是其他东西?
这2和有什么区别?我在Google上发现的结果很少,没有定论。
这是一个后续问题:
假设我创建了带有@Controller注释的spring mvc Web应用程序注释了几个类,并创建了一些可以成功地从前端->后端传输某些信息(反之亦然)的信息,并且后端可能涉及某些数据库。
你会怎么称呼 其余的Web服务或servlet还是其他东西?
Answers:
甲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 。
您要描述的是一个Web应用程序,人们在其中使用浏览器与软件系统进行交互。
一个Web服务是软件系统相互使用HTTP和XML或JSON通信,而无需任何人的方式。
一个servlet的是编写软件,响应HTTP请求的Java的具体方式。Spring MVC摘录了许多实现细节,以简化Web应用程序的编写,但在后台使用了servlet。
我认为Web服务定义了更高级别的抽象,例如某些特定于业务的功能。而Servlet只是负责数据传输的软件实现组件。
Web Service实现通常将依赖servlet来接收数据。但是,它也可以使用其自定义层来处理协议数据。
与Servlet相比,@Controller可能与Web Service更相关,后者也是一种实现传输的方式。
@Controller
是Spring Web MVC框架(是C)的一部分,因此它绝对不是Web服务,但也与servlet无关。
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
Web Service使用ServletContainer类,它又是一个Servlet类,它以干净和结构化的方式处理请求。REST代表代表性的无状态协议。在此请求将不会存储任何数据。
REST Web服务支持HTTP方法
我们可以将任意数量的URL映射到可以具有任何HTTP方法类型的Web Service类。
另一方面,每个servlet只能进行1个URL映射。尽管可以通过请求参数条件来达到最终要求,但是如今使用servlet并不能提供干净的方法。
在网络服务中,我们可以在类级别以及方法级别定义URL路径,这使我们能够以更加结构化的方式进行编码。