Web服务是一种使用REST编程范例或SOAP协议为其客户端提供服务方法以进行通信的服务。有几种方法来实现Web服务。编写Web服务的最简单的方法是编写一个类并使用javax.jws中的@WebService和@WebMethod注释进行注释,然后从主方法中启动它:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
结果是,您可以在注册的URL查看WSDL,如果您有SoapUI或任何其他SOAP客户端,您还可以测试和使用您的Web服务。
另一方面,servlet用于传输HTTP请求和resonses。它可以用于编写具有JSP和HTML的Web应用程序,或者用于提供XML和JSON响应(如在RESTful服务中),当然也用于接收和返回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,但afaik不是这个框架和Jersey的主要目的是相当容易使用。
关于第二个问题:
@Controller注释是一个Spring特定的构造型注释,告诉Spring有关你的bean应该做什么。控制器返回的方法究竟取决于方法的实际实现,你可以配置Spring来返回纯文本,HTML,JSON,XML,二进制数据或任何你想要的。
注意在一边,用@Controller注释的类不是一个servlet,它只是一个bean。如何使用servlet主要取决于您使用的框架。例如,当您使用Spring时,servlet作业由Springs DispatcherServlet完成,后者又将请求转发到正确的bean。如果您使用Tomcat,那么您可以直接编写自己的servlet,方法是简单地对javax.servlet.http.HttpServlet类进行子类化,并覆盖必要的方法,例如响应来自浏览器的HTTP GET请求的doGet。