Веб - сервис это услуга , которая предоставляет методы обслуживания для своих клиентов , используя либо парадигму программирования REST или протокол SOAP для связи. Есть несколько способов реализовать веб-службу. Самый простой способ , чтобы написать веб - сервис будет написать класс и аннотировать его с @WebService
и @WebMethod
аннотациями из javax.jws
, а затем запустить его из main
-метода с:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
В результате вы можете просматривать WSDL по зарегистрированному URL-адресу, и если у вас есть SoapUI или любой другой клиент SOAP, вы также можете протестировать и использовать свою веб-службу.
С другой стороны, сервлет используется для передачи HTTP- запросов и ответов. Его можно использовать для написания веб-приложения с JSP и HTML или для обслуживания ответов XML и JSON (как в службе RESTful) и, конечно, также для получения и возврата сообщений SOAP. Вы можете думать об этом как о одном уровне ниже веб-сервисов . Сервлеты имеют свой собственный стандарт, который в настоящее время является Спецификацией сервлетов Java версии 4.0.
Более комплексный и практичный подход - написать веб-службу с фреймворком и опубликовать ее на сервере приложений или в контейнере сервлетов, таком как Tomcat или JBoss. В этом случае вы должны использовать сервлет для обработки HTTP-запросов, которые передают ваши сообщения SOAP или REST.
Чтобы написать веб-службу с технологией сервлетов, вы можете, например, использовать JAX-WS (например, для SOAP). Чтобы писать службы RESTful, вы можете либо использовать JAX-RS (эталонной реализацией является Джерси ), либо, в качестве альтернативы, вы можете использовать Spring WebMVC , но, насколько мне известно, это не основная цель этой структуры, и Джерси значительно проще в использовании.
Что касается второго вопроса: @Controller
аннотация представляет собой аннотацию стереотипа, специфичную для Spring, которая сообщает Spring что-то о том, что должен делать ваш bean-компонент. Какой именно метод контроллера вернет, зависит от фактической реализации ваших методов, вы можете настроить Spring для возврата простого текста, HTML, JSON, XML, двоичных данных или чего угодно.
Примечание сбоку: класс, который аннотирован, @Controller
еще не является сервлетом, это просто bean-компонент. Как вы используете сервлеты, в основном зависит от используемой вами платформы. Например, когда вы используете Spring, задание сервлета выполняется Springs, DispatcherServlet
который, в свою очередь, перенаправляет запросы правильным bean-компонентам. Если вы используете Tomcat, вы можете напрямую писать свои собственные сервлеты, просто создав подклассы javax.servlet.http.HttpServlet
класса и перезаписав необходимые методы, например, doGet
которые отвечают на HTTP-запросы GET из вашего браузера.