Как обрабатываются HTTP-запросы в веб-службах Java?
Я новичок в веб-сервисах и просматриваю книгу Java Webservices Мартина Калина. Я прошел через первоначальную основную концепцию этого и у меня есть вопрос:
Say producer отправляет HTTP-запрос (содержащий конверт сообщения SOAP) веб-службе Java (consumer). Обрабатывается ли запрос внутренне сервлетом, который извлекает сообщение SOAP и преобразует его в соответствующий объект домена Java, а затем вызывается компонент реализации службы?
Этот вопрос generic независимо от любых готовых рамок, таких как Metro и Axis. Просто рассмотрим ниже код
Endpoint.publish("webserviceURL", new CustomerServiceImpl())
Теперь, если потребитель отправляет запрос в webserviceURL, будет ли он обрабатываться сервлетом всегда в точке входа или обрабатываться каким-то другим способом? (Поскольку именно так веб-запрос обрабатывается в любом веб-приложении)
3 ответов:
Запросы обрабатываются чем-то, что может обрабатывать запросы HTTP, точка.
Удобно использовать сервлеты или фильтры, потому что сантехника уже была написана для вас в виде контейнера сервлета / приложения, но это не является обязательным требованием. Например, службе, работающей на Netty, не нужно следовать спецификации сервлета. (Хотя, кажется, есть слой, который обеспечивает Нетти вызывать сервлеты напрямую.)
До тех пор, пока клиент и сервер разговаривают по протоколу HTTP, базовая реализация не имеет значения и не должна быть сервлетами–ей просто нужно говорить HTTP.
Сервлет-это класс Java, который может принимать HTTP-запрос и отправлять ответ, верно?
Как говорится, вы можете (если вы действительно очень хотите), кодировать полноценный веб-сервис, используя только сервлеты (используя его методы
Например, вы получите HTTP-запрос, байт за байтом, превратите его вdoGet()иdoPost()).String, проанализируете его в XML-файл и затем интерпретируете его как конверт SOAP (назовем это " сантехнические работы "), и только тогда начнете обработка фактического запроса (то, что вы действительно хотели в первую очередь).После обработки фактического запроса вам придется проделать некоторые дополнительные работы по преобразованию объектов обратно в XML и SOAP-конверты (и не забывайте о хлопотах обработки возможных ошибок/исключений).
Вы спрашиваете:
является ли запрос внутренне обработанным сервлетом, который извлекает сообщение soap и преобразует его в соответствующий java объект домена (...)
Ответ: нет . Сервлеты не делают ничего, кроме получения байтов и позволяют вам манипулировать ими в Java-методе (например,
doGet()илиdoPost()). Вы можете сделать это вручную, но преобразование данных в доменные объекты обычно выполняется платформой веб-служб .теперь, если потребитель отправляет запрос на WebService URL, он будет обрабатываться сервлетом всегда в точке входа или обрабатываться в какой-то другой путь?
Первый. Он всегда будет обрабатываться Сервлетами в точке входа. Но вы можете спросить:
Ну, тогда в чем смысл API веб-сервиса, такого как JAX-RS, Spring-WS или JAX-RS?
Все известные API веб-служб Java построены сверху API сервлета.
Сервлеты действительно первыми обрабатывают запрос, но эта" обработка " производится очень мало: как я уже сказал, они получают только HTTP-запрос биты и позволяют работать с ними как с методом Java.
После этого фреймворки WS могут сделать для вас кучу других сантехнические работы. Например, они могут получить запрос HTTP POST и сделать все преобразования
Bytes<->XML<->SOAP Envelope<->Objectsдля вас прозрачным способом. Они также помогут вам определить стандартные конверты ошибок, автоматически создавать файлы WSDL и все остальное.Итог:
Вы можете сделать все это самостоятельно, используя только сервлеты, но с веб-сервисом фреймворк, вам не придется беспокоиться обо всех сантехнических работах, необходимых, и вы можете просто создать методы для обработки фактических запросов.
Правка:
Просто чтобы было понятно: сервлеты не являются случайно единственным способом обработки HTTP-запросов с Java.
Они, однако, несколько стандартный способ сделать это в Java EE, поскольку они являются одним из наиболее стабильных и бесспорных Java EE APIs , но есть и другие способы, конечно - они всегда есть.
То, что я сказал, это самые известные фреймворки построены поверх API сервлета, просто чтобы указать несколько:
И это, как я уже сказал, лишь для того, чтобы указать на некоторые из них.
- JAX-RS:
- метро
- ось
- Axis2
- CXF
- JBossWS
- JAX-RS:
- Джерси,
- отдых;
- CXF,
- Restlet (название говорит само все...)
- другие:
- Spring-WS,
- Весна MVC.
Все веб-сервисы работают поверх сервлетов, будь то SOAP или REST. В зависимости от того, какой фреймворк веб-службы вы используете, будет настроено отображение сервлетов, таких как jersey, resteasy и т. д.
Comments