Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Введение в технологию Java EE

Вступление

Java Enterprise Edition (или, сокращенно, Java EE) – набор спецификаций и документации ЯП Java для работы с сетевыми приложениями и технологиями, применяемый при решении задач для средних и крупных предприятий. Основная цель спецификаций – обеспечение мультиплатформенности и масштабируемости приложений. Технологии Java EE поддерживаются многими средами разработки, такими как Eclipse и NetBeans. Основные технологии, поставляемые Java EE:

· сервлеты (servlets);

· динамически генерируемые веб-страницы (Java Server Pages);

· веб-сервисы;

· компоненты повторного использования – Enterpirse Java Beans;

· сервис обмена сообщениями (Java Message Queue);

· прочие серверные технологии.

Для обеспечения работы модулей, работающих согласно технологиям, перечисленным выше, используются серверы приложений. На данный момент одним из самых распространенных является сервер приложений GlassFish, входящий в пакет разработчика Java EE SDK. Создаваемые программистами модули необходимо развернуть (deploy) на сервере приложений, для чего они компилируются в особый формат EAR (Enterprise ARchive), подобно тому, как приложения на Java можно компилировать в JAR-модули. Каждый веб-модуль после развертки становится доступным через протокол HTTP и образует отдельную директорию на сервере, имя которой совпадает с именем модуля. В случае локального сервера с настройками по умолчанию путь к корневой папке модуля будет выглядеть как http://localhost:8080/[имя модуля]/. В Eclipse компиляция в EAR и развертывание на сервере осуществляются автоматически.

НЕ нашли? Не то? Что вы ищете?

1. Веб-сервисы

Веб-сервис (также веб-служба) – программная система, идентифицируемая строкой URI (Unified Resource Identifier, универсальный идентификатор ресурсов), ресурсы которой (свойства и методы) описаны с помощью специального языка. Доступ к ресурсам такой системы осуществляется с помощью протокола SOAP (Simple Object Access Protocol, простой протокол доступа к объектам), который представляет собой особым образом сформулированные XML-запросы, передаваемые с помощью интернет-протокола высокого уровня (чаще всего HTTP). По своей архитектуре веб-сервисы напоминают классы объектно-ориентированных ЯП (и в рамках Java EE генерируются на основе классов), однако есть и некоторые различия. Ключевым понятием для веб-сервиса является сообщение (message), состоящее из одной или нескольких переменных. Вместо методов классов в веб-сервисах используются операции (operation), которые характеризуются входным и выходным сообщениями. После вызова операции переменные, входящие во входное сообщение, полученное по протоколу SOAP, интерпретируются как параметры соответствующего метода класса, лежащего в основе сервиса. После завершения работы метода формируется выходное сообщение, содержащее возвращаемое методом значение, которое затем с помощью SOAP отправляется клиенту. Такая архитектура сервиса позволяет вызывать его методы асинхронно.

1.1. Язык WSDL

Для описания общедоступных ресурсов веб-сервиса используется язык WSDL (Web Service Definition Language) на основе XML; среда программирования Eclipse позволяет автоматически создавать такие описания на основе классов Java. В языке определены следующие основные типы данных: строки (xsd:string), целые числа (xsd:int, xsd:long, xsd:short, xsd:integer, xsd:decimal), числа с плавающей запятой (xsd:float, xsd:double), логический тип (xsd:boolean), последовательности байт (xsd:base64Binary, xsd:hexBinary), дата и время (xsd:time, xsd:date, xsd:g), объекты (xsd:anySimpleType). В качестве переменных сообщений также можно использовать последовательности, образованные из фиксированного числа переменных простых типов (это соответствует методам с несколькими входными параметрами). Типичный WSDL-файл имеет структуру, как на рис. 1. Вначале объявляются типы, которые будут использоваться в сервисе. WSDL-описание, приведенное ниже, принадлежит веб-сервису SampleMath с методами

public int add(int x, int y),

public int subtract(int x, int y),

на основании чего было сгенерировано четыре типа данных, соответствующих входным и выходным аргументам метода. Эти типы применяются в описании addRequest и addResponse – входного и выходного сообщений для операции add, а также в соответствующих сообщениях для операции subtract. Операции объявляются в описании интерфейса сервиса (декларация wsdl:portType) и далее в описании привязки сервиса к SOAP (декларация wsdl:binding), причем во втором случае также оговаривается способ вызова (<wsdlsoap:body use="literal"/>). Это позволяет при вызове операции использовать те же имена параметров, что и в исходном методе. В конце WSDL-файла находится собственно декларация веб-сервиса (<wsdl:service>), в которой содержится информация о его местоположении (параметр location). Среда Eclipse поддерживает удобное графическое представление WSDL-файлов; файл, соответствующий веб-сервису SampleMath, показан на рис. 2.

1.2. Протокол SOAP

Как упоминалось ранее, общение с веб-сервисом осуществляется с помощью протокола SOAP. Для вызова операций веб-сервиса, определенной в его WSDL-описании, используется XML-запрос, называемый SOAP-envelope, состоящий в общем случае из заголовка (SOAP-header; может быть пустым) и тела запроса (SOAP-body). Заголовок может содержать дополнительную информацию по запросу, такую как его приоритетность, срок обработки и т. п. В теле содержатся одна или несколько операций веб-сервиса с соответствующими им параметрами. Пример запроса, вызывающего операцию сервиса SampleMath.add(1, 2), приведен на рис. 3. Там же приведено SOAP-сообщение, возвращенное сервисом.

<wsdl:definitions targetNamespace="http://webservice. isofts. ">

<wsdl:types><schema elementFormDefault="qualified"

targetNamespace="http://webservice. isofts. ">

<element name="add"><complexType><sequence>

<element name="x" type="xsd:int"/>

<element name="y" type="xsd:int"/>

</sequence></complexType></element>

<element name="addResponse"><complexType><sequence>

<element name="addReturn" type="xsd:int"/>

</sequence></complexType></element>

<element name="subtract"><complexType><sequence>

<element name="x" type="xsd:int"/>

<element name="y" type="xsd:int"/>

</sequence></complexType></element>

<element name="subtractResponse"><complexType><sequence>

<element name="subtractReturn" type="xsd:int"/>

</sequence></complexType></element>

</schema></wsdl:types>

<wsdl:message name="addRequest">

<wsdl:part element="impl:add" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="subtractResponse">

<wsdl:part element="impl:subtractResponse" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="subtractRequest">

<wsdl:part element="impl:subtract" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="addResponse">

<wsdl:part element="impl:addResponse" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:portType name="SampleMath">

<wsdl:operation name="add">

<wsdl:input message="impl:addRequest" name="addRequest"></wsdl:input>

<wsdl:output message="impl:addResponse" name="addResponse"> </wsdl:output>

</wsdl:operation>

<wsdl:operation name="subtract">

<wsdl:input message="impl:subtractRequest" name="subtractRequest"></wsdl:input>

<wsdl:output message="impl:subtractResponse" name="subtractResponse">

</wsdl:output>

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="SampleMathSoapBinding" type="impl:SampleMath">

<wsdlsoap:binding style="document" transport="http://schemas. xmlsoap. org/soap/http"/>

<wsdl:operation name="add"><wsdlsoap:operation soapAction=""/>

<wsdl:input name="addRequest"><wsdlsoap:body use="literal"/></wsdl:input>

<wsdl:output name="addResponse"><wsdlsoap:body use="literal"/></wsdl:output>

</wsdl:operation>

<wsdl:operation name="subtract"><wsdlsoap:operation soapAction=""/>

<wsdl:input name="subtractRequest"><wsdlsoap:body use="literal"/></wsdl:input>

<wsdl:output name="subtractResponse"><wsdlsoap:body use="literal"/></wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="SampleMathService">

<wsdl:port binding="impl:SampleMathSoapBinding" name="SampleMath">

<wsdlsoap:address location="http://localhost:8080/webservice/services/SampleMath"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

Рисунок 1. WSDL-описание простого веб-сервиса

Рисунок 2. Схема сервиса, полученная с помощью Eclipse

<soapenv:Envelope xmlns:soapenv=http://schemas. xmlsoap. org/soap/envelope/

xmlns:q0=http://webservice. isofts.

xmlns:xsd=http://www. w3.org/2001/XMLSchema

xmlns:xsi="http://www. w3.org/2001/XMLSchema-instance">

<soapenv:Body>

<q0:add>

<q0:x>1</q0:x>

<q0:y>2</q0:y>

</q0:add>

</soapenv:Body>

</soapenv:Envelope>

<soapenv:Envelope xmlns:soapenv=http://schemas. xmlsoap. org/soap/envelope/

xmlns:xsd=http://www. w3.org/2001/XMLSchema

xmlns:xsi="http://www. w3.org/2001/XMLSchema-instance">

<soapenv:Body>

<addResponse xmlns="http://webservice. isofts. ">

<addReturn>3</addReturn>

</addResponse>

</soapenv:Body>

</soapenv:Envelope>

Рисунок 3. SOAP-запрос к сервису и возвращенное им XML-сообщение

2. Сервлеты

Для доступа к веб-сервисам используются сервлеты – Java-программы, выполняемые на стороне сервера и расширяющие его функциональность. Сервлеты широко применяются в технологии Java EE, в частности, в них преобразуются страницы на языке JSP. Базовая функциональность сервлетов заложена в возможности обработки ими HTTP-запросов GET и/или POST. Согласно спецификации веб-приложений, возможно задавать (с помощью конфигурационных XML-файлов) области действия определенных сервлетов (servlet mapping). Решение, какой из доступных сервлетов будет задействован, принимается на основании анализа URL-адреса запроса. Например, веб-сервисы, которые по умолчанию располагаются в папке /services проекта, обрабатываются стандартным сервлетом Apache Axis. С помощью него, в частности, можно получить WSDL-описание сервиса, расположенное по адресу /services/[название сервиса]?wsdl. Этот же сервлет осуществляет парсинг посылаемых на сервер SOAP-сообщений, их передачу соответствующему Java-классу и составление SOAP-сообщений с результатами работы. Таким образом Axis обеспечивает полную функциональность веб-сервиса.

3. Взаимодействие с веб-сервисами

Среда программирования, предназначенные для работы с сетевыми приложениями, такие как Java и , предоставляют возможность создания клиентов для веб-сервисов на основе их WSDL-описания. При этом скрывается большая часть черновой работы по обеспечению работы клиента, например, составление корректных SOAP-запросов и парсинг возвращаемых сервисом SOAP-сообщений – эти действия осуществляются клиентской частью технологии Apache Axis.

3.1. Взаимодействие с веб-сервисами в ЯП Java

В среде Eclipse есть удобный инструмент для создания клиентских программ, использующих веб-сервисы. После задания адреса сервиса на основании его WSDL-описания для обеспечения работы клиента создаются 5 Java-файлов:

1. локатор сервиса (service locator), осуществляющий нахождение веб-сервиса;

2. интерфейс локатора;

3. стаб для SOAP-привязки (SOAP binding stub) – клиентский стаб, предназначенный для составления и парсинга SOAP-сообщений;

4. интерфейс сервиса;

5. прокси-класс, реализующий этот интерфейс; использует клиентский стаб и локатор для доступа к операциям веб-сервиса.

Например, для вышеописанного сервиса SampleMath автоматически созданные классы и интерфейсы будут называться SampleMathServiceLocator, SampleMathService, SampleMathSoapBindingStub, SampleMath, SampleMath-Proxy (в порядке их описания выше). Обращение к операции SampleMath.add будет выглядеть подобным образом:

SampleMath svc = new SampleMathProxy();

try {

System.out.println(svc. add(2, 3));

} catch (RemoteException e) {

System.err.println("Error occurred while accessing the web service");

e.printStackTrace();

}

3.2. Взаимодействие с веб-сервисами в среде MS.NET

В.NET также существует утилита для создания клиентских программ, работающих с веб-сервисами, называющаяся wsdl. exe. Она создает файлы на любом из доступных языков. NET, которые можно подключить к проекту и использовать веб-сервис, как локальный класс:

SampleMathService _service = new SampleMathService();

try

{

int result = 0;

switch (idx)

{

case 0: result = _service. add(arg0, arg1);

break;

case 1: result = _service. subtract(arg0, arg1);

break;

}

}

catch (Exception exc)

{

MessageBox. Show(exc. Message, "Error",

MessageBoxButtons. OK, MessageBoxIcon. Error);

}

Инструкция по использованию графического интерфейса примера

Работа с веб-сервисами рассматривается на примере вышеописанного сервиса SampleMath.

Рисунок 4. Вид главного окна интерфейса

1. Для запуска главной формы примера достаточно выбрать в меню сайта пункт «Технологии → Веб-сервисы → Пример» и действовать в соответствии с приведенной там инструкцией. Должно появиться главное окно графического интерфейса, вид которого изображен на рис. 4. Для запуска серверной части программы нужно нажать кнопку «Запустить» в верхней части окна; после этого отчет о запуске будет отображаться в окне. Сервер можно в любой момент остановить, нажав на соответствующую кнопку. Для того чтобы проверить, был ли развернут модуль на сервере программ, можно открыть в браузере адрес http://localhost:8080/webservice/ – там должна отображаться страница, как на рис. 5.

Рисунок 5. Вид главной страницы веб-модуля

2. Для запуска клиентской части (см. рис. 6) следует нажать кнопку «Запустить» в нижней части окна. Количество клиентских программ не ограничено.

Рисунок 6. Вид клиентской части программы

3. Для проверки работы веб-сервиса следует в клиентской части программы ввести аргументы для функции сложения или отрицания, поставляемые сервисом, и нажать на кнопку «Вызвать». Результаты должны отобразиться как у клиентской части программы, так и в логе доступа к сервису на главной странице веб-модуля. Методы веб-сервиса можно также тестировать непосредственно из веб-модуля (см. рис. 7) – для этого достаточно перейти по соответствующей ссылке на главной странице.

Рисунок 7. Тестирование сервиса из веб-страницы