Веб-служба - это служба, которая предоставляет методы обслуживания своим клиентам, используя для связи парадигму программирования 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 (эталонная реализация - Jersey), или вы можете использовать Spring WebMVC, но, насколько мне известно, это не основная цель этой структуры, и Джерси значительно проще в использовании.
Относительно второго вопроса: аннотация @Controller
- это стереотипная аннотация Spring, которая сообщает Spring что-то о том, что должен делать ваш bean-компонент. Какой именно метод контроллера вернет, зависит от фактической реализации ваших методов, вы можете настроить Spring для возврата простого текста, HTML, JSON, XML, двоичных данных или чего угодно.
Примечание сбоку: класс, помеченный знаком @Controller
, еще не является сервлетом, это просто bean-компонент. Как вы используете сервлеты, в основном зависит от используемой вами платформы. Например, когда вы используете Spring, задание сервлета выполняется Springs DispatcherServlet
, который, в свою очередь, перенаправляет запросы к правильным bean-компонентам. Если вы используете Tomcat, вы можете напрямую писать свои собственные сервлеты, просто создав подкласс класса javax.servlet.http.HttpServlet
и перезаписав необходимые методы, такие как doGet
, который отвечает на HTTP-запросы GET из вашего браузера.
person
lanoxx
schedule
13.12.2012