Как обрабатываются HTTP-запросы в веб-службах Java?



Я новичок в веб-сервисах и просматриваю книгу Java Webservices Мартина Калина. Я прошел через первоначальную основную концепцию этого и у меня есть вопрос:



Say producer отправляет HTTP-запрос (содержащий конверт сообщения SOAP) веб-службе Java (consumer). Обрабатывается ли запрос внутренне сервлетом, который извлекает сообщение SOAP и преобразует его в соответствующий объект домена Java, а затем вызывается компонент реализации службы?



Этот вопрос generic независимо от любых готовых рамок, таких как Metro и Axis. Просто рассмотрим ниже код



 Endpoint.publish("webserviceURL", new CustomerServiceImpl())


Теперь, если потребитель отправляет запрос в webserviceURL, будет ли он обрабатываться сервлетом всегда в точке входа или обрабатываться каким-то другим способом? (Поскольку именно так веб-запрос обрабатывается в любом веб-приложении)

647   3  

3 ответов:

Запросы обрабатываются чем-то, что может обрабатывать запросы HTTP, точка.

Удобно использовать сервлеты или фильтры, потому что сантехника уже была написана для вас в виде контейнера сервлета / приложения, но это не является обязательным требованием. Например, службе, работающей на Netty, не нужно следовать спецификации сервлета. (Хотя, кажется, есть слой, который обеспечивает Нетти вызывать сервлеты напрямую.)

До тех пор, пока клиент и сервер разговаривают по протоколу HTTP, базовая реализация не имеет значения и не должна быть сервлетами–ей просто нужно говорить HTTP.

Сервлет-это класс Java, который может принимать HTTP-запрос и отправлять ответ, верно?

Как говорится, вы можете (если вы действительно очень хотите), кодировать полноценный веб-сервис, используя только сервлеты (используя его методы doGet() и doPost()).

Например, вы получите HTTP-запрос, байт за байтом, превратите его в 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

    Ничего не найдено.