blob: 8c4d2f66ed8c44c140ce2b8ece3c77284e9dff83 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><link rel="stylesheet" href="../../../print.css" type="text/css" media="print">
<title>Начало работы с веб-службами RESTful - учебный курс по IDE NetBeans</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="KEYWORDS" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION, WEB SERVICE, WEB SERVICES, REST, RESTFUL">
<meta name="description"
content="This tutorial shows how to use NetBeans IDE
to work with RESTful web services.">
<link rel="stylesheet" href="../../../netbeans.css"></head>
<body>
<h1>Начало работы с веб-службами RESTful</h1>
<p>REST (REpresentational State Transfer, передача состояния представления) является архитектурным стилем для распределенных систем данных гипермедиа, например, World Wide Web. В основе архитектуры RESTful лежит принцип определения ресурсов по универсальным идентификаторам ресурсов (Universal Resource Identifiers, URI). Управление этими ресурсами осуществляется с помощью стандартного интерфейса, например HTTP, а обмен информацией происходит с помощью представлений этих ресурсов. В этом учебном руководстве сначала вкратце описывается REST, а затем описывается, как IDE NetBeans поддерживает этот стиль архитектуры.</p>
<p><b>Содержание</b></p>
<img alt="Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0">
<ul>
<!-- <li><a href="#introduction">Exercise 0: Install and configure the tutorial environment</a></li>-->
<li><a href="#introduction"> Введение</a></li>
<li><a href="#entity-classes">Веб-службы RESTful, сохранение состояния, классы сущностей </a></li>
<li><a href="#create-services-from-db">Создание веб-служб RESTful из базы данных</a>
<ul>
<li><a href="#create-project">Создание проекта</a></li>
<li><a href="#entities-and-services">Создание классов сущностей и служб RESTful</a></li>
</ul></li>
<li><a href="#test-rest">Тестирование веб-служб RESTful</a></li>
<!-- <li><a href="#add-google-map">
Adding a Google Map Feature</a></li>-->
<!-- <li><a href="#rest-spring">RESTful Web Services in the Spring Framework</a>
<ul>
<li><a href="#create-spring-webapp">Creating a Java Web Application
With the Spring Framework</a></li>
<li><a href="#add-aopalliance">Adding aopalliance.jar to the Project</a></li>
<li><a href="#create-spring-restful-services">Creating RESTful Services in
the Spring-enabled Project</a></li>
<li><a href="#spring-errors">Compilation Errors</a></li>
</ul>
</li>-->
</ul>
<p><b>Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Программное обеспечение или материал</th>
<th class="tblheader" scope="col">Требуемая версия</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html" target="_blank">IDE NetBeans</a></td>
<td class="tbltd1">Пакетная загрузка Java EE</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Комплект для разработчика на языке Java (JDK)</a></td>
<td class="tbltd1">версия 7 или 8</td>
</tr>
<tr>
<td class="tbltd1">Cервер приложений, совместимый с Java EE</td>
<td class="tbltd1"><p><a href="http://www.oracle.com/technetwork/middleware/weblogic/overview/index.html" target="_blank">Oracle WebLogic Server 11g-12c</a> <br> или GlassFish Server Open Source Edition 3.x или 4.x<br> (Не работает в Tomcat, если не установлен подключаемый модуль поддержки EJB)</p>
</tr>
<tr>
<td class="tbltd1"><p>База данных jdbc/sample на <br> сервере базы данных Java DB (Derby) или сервере базы данных MySQL. <br>сервер базы данных </p></td>
<td class="tbltd1"><p>В ДБ Java (Derby) база данных jdbc/образец базы данных создается IDE NetBeans <br> при установке IDE с сервером приложений GlassFish.</p>
<p>На MySQL среда IDE заполняет пример базы данных после создания его на сервере MySQL изнутри IDE. </p></td>
</tr>
</tbody>
</table>
<p class="notes">Сервер GlassFish можно установить через Интернет и пи распространении IDE NetBeans с помощью Java EE. Также можно воспользоваться <a href="https://glassfish.java.net/download.html">страницей загрузок сервера GlassFish</a>.</p>
<p class="alert"><strong>Важно! </strong>Для проектов Java EE 6 и Java EE 7 требуется GlassFish Server или Oracle WebLogic Server 12c.</p>
<!-- =========================================== -->
<h2><a name="introduction"></a> Введение</h2>
<p>Веб-службы RESTful представляют собой службы, созданные с помощью архитектурного стиля RESTful. Создание веб-служб с применением подхода RESTful становится популярной альтернативой использованию технологий развертывания служб в сети Интернет на основе SOAP, поскольку этот подход отличается простотой и удобством, а также предоставляет возможность передачи данных непосредственно по HTTP.</p>
<p>Среда IDE поддерживает быструю разработку веб-служб RESTful при помощи JSR 311 (интерфейса API Java для веб-служб RESTful (JAX-РТС)) и Jersey (примера реализации JAX-РТС).</p>
<p>Для получения более подробных данных обратитесь к разделу</p>
<ul>
<li><a href="http://jcp.org/en/jsr/detail?id=311" target="_blank">JSR 311: JAX-RS: интерфейс API Java для веб-служб RESTful</a>
<li><a href="http://jersey.dev.java.net/">Jersey, пример реализации JAX-RS (JSR 311) с открытым исходным кодом для создания веб-служб RESTful</a>
</ul>
<p>Помимо создания веб-служб RESTful среда IDE также поддерживает тестирование, создание клиентских приложений с возможностью доступа к веб-службам RESTful и создание кода для вызова веб-служб (как RESTful, так и служб на основе SOAP).</p>
<p>Ниже приведен список возможностей RESTful, предоставляемых средой IDE:</p>
<ol>
<li>быстрое создание веб-служб RESTful на основе классов объектов JPA и шаблонов;</li>
<li>быстрое создание кода для вызова веб-служб, таких как Карты Googlе, Yahoo! News Search и StrikeIron, путем перетаскивания компонентов из диспетчера веб-служб в окно служб;</li>
<li>создание клиентов Java RESTful для служб, зарегистрированных в диспетчере веб-служб;</li>
<li>создание тестовых клиентов для тестирования веб-служб RESTful;</li>
<li>логическое представление для удобного перехода по классам реализации веб-службы RESTful в проекте;</li>
<!--<li> Fully integrated Spring framework, providing Spring transaction handling.</li>-->
</ol>
<p>В этом учебном курсе рассматривается создание, реализация и тестирование веб-служб RESTful при помощи среды IDE.</p>
<!-- =========================================== -->
<h2><a name="entity-classes"></a>Веб-службы RESTful, сохранение состояния, классы сущностей </h2>
<p>Веб-службы RESTful в Java используют <a href="http://en.wikipedia.org/wiki/Java_Persistence_API" target="_blank">интерфейс API сохранения состояния Java</a> для связи с базами данных. Говоря конкретнее, веб-службы RESTful используют <em>классы сущностей</em> и <em>блок сохранения состояния</em> как они определены в интерфейсе API сохранения состояния. Классы сущностей &ndash; это классы Java, сопоставленные с объектами в реляционной базе данных. Согласно <a href="http://download.oracle.com/javaee/5/tutorial/doc/bnbqa.html" target="_blank">руководству по Java EE5</a>: &quot;Сущностью называется упрощенный объект области сохранения состояния. Как правило, сущность представляет таблицу в реляционной базе данных, и каждый экземпляр сущности соответствует строке в этой таблице. Блок сохранения состояния состоит из набора сущностных классов, источника данных, поставщика сохранения состояния и собственного имени блока сохранения состояния, как определено в файле <tt>persistence.xml</tt>. </p>
<p>IDE NetBeans можно использовать либо для создания классов логических объектов и веб-служб RESTful в одном процессе или среду IDE можно использовать для создания веб-служб RESTful на основе существующих классов логических объектов. В этом учебном курсе мы используем мастер создания служб RESTful из базы данных для автоматического создания классов сущностей и веб-служб RESTful в одном процессе. Мастер автоматически создаст блок сохранения состояния.</p>
<!-- =========================================== -->
<h2><a name="mysql"></a>Использование сервера баз данных MySQL </h2>
<p>Если использовать сервер базы данных MySQL вместо JavaDB (Derby), необходимо зарегистрировать сервер базы данных в среде IDE и добавить базу данных <tt>sample</tt> к серверу.</p>
<p><strong>Чтобы использовать сервер базы данных MySQL с этим учебным курсом, выполните следующие действия.</strong></p>
<ol>
<li>Зарегистрируйте сервер MySQL в среде IDE, если он еще не зарегистрирован. Для регистрации сервера MySQL перейдите в окно 'Службы' среды IDE, щелкните правой кнопкой мыши узел Databases и выберите 'Регистрация сервера MySQL'. <br> <img alt="Параметр &apos;Регистрация сервера MySQL&apos; в окне &apos;Службы&apos;" class="margin-around b-bottom" height="164" src="../../../images_www/articles/72/websvc/rest/register-mysql-server.png" width="248"></li>
<li>
<p>Откроется диалоговое окно, в которое следует ввести параметры своего сервера MySQL, включая имя и пароль пользователя, являющегося администратором. См. раздел &quot;Настройка свойств сервера MySQL&quot; в разделе <a href="../ide/install-and-configure-mysql-server.html">Подключение к базе данных MySQL</a>.</p>
<img alt="Базовые свойства сервера MySQL, регистрируемого в IDE" class="margin-around" height="264" src="../../../images_www/articles/72/websvc/rest/basic-mysql-properties.png" width="402"></li>
<li>Запустите сервер MySQL и подключитесь к нему. См. раздел &quot;Запуск сервера MySQL&quot; в разделе <a href="../ide/install-and-configure-mysql-server.html">Подключение к базе данных MySQL</a>. </li>
<li>Щелкните правой кнопкой мыши узел сервера MySQL и выберите Create Database (&quot;Создать базу данных&quot;). Откроется диалоговое окно создания базы данных MySQL. <br> <img alt="Создайте параметр контекстного меню базы данных" class="margin-around b-bottom" height="229" src="../../../images_www/articles/72/websvc/rest/create-database.png" width="261"> </li>
<li>Введите <tt>sample</tt> в качестве имени новой базы данных. Предоставьте полный доступ корневому пользователю или пользователю по своему выбору.<br> <img alt="Диалоговое окно &apos;Новое имя базы данных&apos; заполнено" class="margin-around" height="136" src="../../../images_www/articles/72/websvc/rest/new-database-name.png" width="404"> </li>
<li>Нажмите кнопку &quot;ОК&quot;. Откроется диалоговое окно, сообщающее, что именем примера базы данных является <tt>sample</tt> и спрашивающее, следует ли создать таблицы, объекты и данные для этой базы данных.<br><img alt="Запрос на заполнение базы данных образцами данных" class="margin-around" height="139" src="../../../images_www/articles/72/websvc/rest/create-sample-contents.png" width="543"> </li>
<li>Нажмите кнопку &quot;Да&quot;. Среда IDE создаст и заполнит базу данных, а также добавит подключение к ней.<br><img alt="Созданный образец базы данных и подключение к базе данных в окне &apos;Службы&apos;" class="margin-around b-bottom" height="130" src="../../../images_www/articles/72/websvc/rest/generated-db.png" width="383"> </li>
</ol>
<h2><a name="create-services-from-db"></a>Создание веб-служб RESTful из базы данных </h2>
<p>Целью данного упражнения является создание проекта, а затем создание классов сущностей и веб-служб RESTful из базы данных.</p>
<p>В данном разделе используется база данных JavaDB (Derby) и источник данных jdbc/sample. JavaDB входит в состав SDK. Источник данных jdbc/образец источника данных создается IDE NetBeans автоматически при установке IDE совместно с GlassFish.</p>
<div class="indent">
<!-- =========================================== -->
<h3><a name="create-project"></a>Создание проекта</h3>
<p>Для создания веб-служб RESTful нужен проект веб-приложения Java. </p>
<p><strong>Для создания проекта выполните следующие действия:</strong></p>
<ol>
<li><p>Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). В области &quot;Категории&quot; выберите &quot;Java Web&quot;. В области &quot;Projects&quot; выберите &quot;Web Application&quot;. Нажмите кнопку &quot;Далее&quot;. Откроется мастер создания веб-приложений.</p>
<p>Как вариант, можно создать веб-приложение Maven. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). В Categories (&quot;Категории) выберите Maven. В Projects (&quot;Проекты&quot;) выберите Maven Web Application (&quot;Веб-приложение Maven&quot;) и нажмите кнопку Next (&quot;Далее&quot;). </p>
</li>
<li>Введите в поле &quot;Имя проекта&quot; текст <tt>CustomerDB</tt>. Нажмите кнопку &quot;Далее&quot;.</li>
<li>Выберите Java EE 6 Web либо Java EE 7 Web. В списке 'Сервер' выберите нужный сервер, но помните, что для проектов Java EE требуется GlassFish Server 3.x или 4.x. Пропустите все последующие настройки и нажмите 'Готово'.
<p class="alert"><b>Важное замечание для проектов Maven. </b> В NetBeans IDE 7.2 при создании веб-приложения Maven невозможно указать сервер. Однако сервер должен быть указан до создания блока сохранения состояния. Поэтому после создания веб-приложения Maven откройте свойства проекта и установите сервер в Run Рroperties (&quot;Свойства выполнения&quot;). Чтобы открыть свойства проекта, щелкните правой кнопкой мыши в узле 'Проект' и выберите 'Свойства' в контекстном меню.</p>
</li>
</ol>
<!-- =========================================== -->
<h3><a name="entities-and-services"></a>Создание классов сущностей и служб RESTful</h3>
<p>Когда веб-приложение Java создано, добавьте к проекту классы сущностей и веб-службы RESTful.</p>
<p><strong>Для создания сущностных классов и веб-служб RESTful выполните следующие действия.</strong></p>
<ol>
<li>Щелкните правой кнопкой мыши узел <tt>CustomerDB</tt> и выберите New (&quot;Создать&quot;) &gt; Other (&quot;Другое&quot;) &gt; Web Services (&quot;Веб службы&quot;) &gt; RESTful Web Services from Database (&quot;Веб-службы RESTful из базы данных&quot;). На панели Database Tables (&quot;Таблицы базы данных&quot;) откроется мастер создания веб-службы RESTful.<br> <img alt="Веб-службы RESTful EE6 из параметра &apos;База данных&apos; в меню" class="margin-around" height="396" src="../../../images_www/articles/72/websvc/rest/open-wizard.png" width="600"> </li>
<li>При использовании сервера GlassFish выберите в раскрывающемся списке &quot;Источник данных&quot; на панели &quot;Таблицы&quot; источник данных <tt>jdbc/sample</tt>.
<p>При использовании сервера Tomcat выберите jdbc:derby://localhost:1527/sample. Если сервер базы данных Derby не запускается автоматически, необходимо запустить его на вкладке &quot;Базы данных&quot; в окне &quot;Службы&quot;.</p>
<p class="notes"><b>Примечание для пользователей MySQL.</b> Необходимо будет создать новый источник данных. Выберите New Data Source (&quot;Создать источник данных&quot;), дайте ему произвольное описательное имя и выберите подключение к базе данных <tt>jdbc:mysql://localhost:3306/sample</tt>. Это подключение было создано при создании примера базы данных в MySQL. <br><img alt="Новый источник данных, использующий подключение mysql" class="margin-around" height="402" src="../../../images_www/articles/72/websvc/rest/new-mysql-datasource.png" width="594"></p>
</li>
<li> Выберите в области &quot;Доступные таблицы&quot; таблицу CUSTOMER и нажмите кнопку &quot;Добавить&quot;. Таблица DISCOUNT_CODE, связанная с таблицей CUSTOMER, также добавляется в область &quot;Выбранные таблицы&quot; автоматически. Если вы используете базу данных MySQL или некоторые версии Derby, также добавляется таблица MICRO_MARKET. Теперь отображается следующее (версия Derby): <br> <br> <img alt="Панель &apos;Таблицы баз данных&apos; новых классов сущностей из мастера баз данных, в которых показаны выделенные таблицы CUSTOMER и DISCOUNT_CODE" border="1" class="margin-around" height="381" src="../../../images_www/articles/72/websvc/rest/select-tables.png" title="Панель &apos;Таблицы баз данных&apos; новых классов сущностей из мастера баз данных, в которых показаны выделенные таблицы CUSTOMER и DISCOUNT_CODE" width="556"></li>
<li>Нажмите кнопку &quot;Далее&quot;. Откроется страница Entity Classes (&quot;Классы сущностей&quot;). В поле 'Имя пакета' введите <tt>entities</tt>. Теперь отображается следующее (версия Derby).
<p class="notes"><b>Примечание.</b> Веб-службы RESTful из мастера баз данных автоматически создают аннотации JAXB. Если классы сущностей для приложения Java EE создаются при помощи мастера создания классов сущностей на основе базы данных и если впоследствии эти классы будут использоваться для создания веб-службы RESTful, убедитесь, что установлен флажок 'Создать аннотации JAXB'. Аннотации JAXB также можно вручную добавить к классам сущностей перед запуском мастера создания веб-служб RESTful из классов сущностей. Дополнительные сведения приведены в документе <a href="http://netbeans.dzone.com/nb-generate-simpler-rest" target="_blank">NetBeans to Generate Simpler RESTful Web Services (&quot;Использование NetBeans для создания более простых веб-служб RESTful&quot;) </a>. </p>
<img alt="Панель &apos;Классы сущностей&apos; веб-служб RESTful из мастера баз данных, на которой отображается имя пакета" class="margin-around" src="../../../images_www/articles/71/websvc/rest/entity-classes.png"></li>
<li>Нажмите кнопку &quot;Далее&quot;. Откроется панель, в которой можно задать имя и расположение созданных классов служб и пакеты. В проектах Java EE предусмотрена возможность изменения имени и местоположения класса конфигурации приложения REST.
<!-- <p class="alert"><strong>Spring framework applications:</strong> Register the RESTful resources in the <tt>web.xml</tt> deployment descriptor.
Do NOT use <tt>javax.ws.rs.core.Application</tt>.</p>-->
<p>Для этого учебного курса примите параметры по умолчанию и нажмите кнопку &quot;Готово&quot;. При на нажатии на кнопку 'Готово' IDE создает классы сущностей и служб. В проектах Java EE IDE также создает класс конфигурации приложения, который является подклассом для Application.</p>
<img alt="Созданные служба и классы конфигурации служб и пакеты" class="margin-around" src="../../../images_www/articles/72/websvc/rest/class-name-location.png">
</li>
</ol>
</div>
<p>Теперь среда IDE создаст веб-службы RESTful. Когда среда IDE выполнит это, загляните в окно Projects (&quot;Проекты&quot;). Созданные классы сущностей находятся в пакете <tt>entities</tt>, а классы служб - в пакете <tt>service</tt>. Веб-службы RESTful Java EE на основе базы данных создают экземпляр <tt>EntityManager</tt> в каждом классе службы. Это устраняет нужду в классах контроллеров JPA и упрощает код.</p>
<!-- ===================================================================================== -->
<h2><a name="test-rest"></a>Тестирование веб-служб RESTful</h2>
<p>Целью этого упражнения является тестирование приложения. Вы создадите новое веб-приложения для тестирования, затем с помощью мастера IDE создадите тесты в новом проекте.</p>
<ol>
<li>В главном меню выберите &quot;Файл&quot; &gt; &quot;Новый проект&quot;.</li>
<li>В списке 'Тип проекта' в категории 'Java Web' выберите 'Веб-приложение'. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В поле 'Имя проекта' введите <strong>WebServicesTest</strong>. Нажмите кнопку &quot;Далее&quot;.</li>
<li>В качестве целевого сервера выберите GlassFish Server, а в качестве версии Java EE - Java EE 6 Web или Java EE 7 Web. Нажмите 'Готово'.</li>
<li>Щелкните правой кнопкой мыши узел проекта <tt>CustomerDB</tt> и выберите 'Тестировать веб-службы RESTful'. Откроется диалоговое окно, запрашивающее, следует ли создать тестовый клиент внутри проекта службы или в другом веб-проекте Java. Это позволяет обойти ограничения безопасности в некоторых браузерах. Можно использовать любой веб-проект, если он настроен на развертывание в том же домене сервера, что и проект CustomerDB. <br><img alt="Диалоговое окно для подтверждения создания тестового клиента локально или в другом веб-проекте Java, развернутом в том же домене" class="margin-around" height="293" src="../../../images_www/articles/71/websvc/rest/configure-test-client.png" width="565"></li>
<li>Выберите <strong>Тестовый веб-клиент в проекте</strong> и нажмите 'Обзор'.</li>
<li>Выберите проект WebServiceTest в диалоговом окне 'Выбор проекта'. Нажмите кнопку &quot;ОК&quot;.
<p>IDE создает файл <tt>test-resbeans.html</tt> в проекте WebServiceTest. Кроме того, IDE автоматически запускает сервер и выполняет развертывание приложения CustomerDB. </p>
<p class="notes">Если в окне 'Результаты' появилось сообщение об ошибке, указывающее на отсутствие одного или нескольких классов и невозможность сборки проекта, добавьте в библиотеки компиляции библиотеки Jersey. Щелкните правой кнопкой мыши узел проекта и выберите команду &quot;Свойства&quot;. Выберите в меню дерева &quot;Свойства&quot; пункт &quot;Библиотеки&quot;. Щелкните &quot;Добавить библиотеку&quot; и перейдите к библиотекам Jersey.</p>
</li>
<li>Щелкните проект WebServiceTest правой кнопкой мыши и выберите 'Выполнить'.</li>
<li>В браузере откройте страницу <a href="http://localhost:8080/WebServicesTest/test-resbeans.html">http://localhost:8080/WebServicesTest/test-resbeans.html</a> <br> <img alt="Целевая страница средства тестирования веб-службы RESTful в браузере" border="1" class="margin-around" src="../../../images_www/articles/71/websvc/rest/test-rest1.png" title="Целевая страница средства тестирования веб-службы RESTful в браузере">
<p>Слева расположен набор корневых ресурсов. Здесь они названы <tt>entities.customer</tt>, <tt>entities.discountCodes</tt> и <tt>entities.microMarket</tt>.</p>
</li>
<li>Щелкните узел <tt>entities.customer</tt>. В поле "Выбрать метод для тестирования" выберите GET (приложение/json) или GET (приложение/xml). Нажмите кнопку тестирования. Тестируемый клиент отправляет запрос и выводит результат в разделе 'Результат тестирования'. Тестируемый клиент отображается по умолчанию в представлении необработанных данных На следующем изображении отображается отклик на запрос приложения/xml.<br> <img alt="Окно представления необработанных данных в средстве тестирования веб-службы RESTful" class="margin-around" src="../../../images_www/articles/72/websvc/rest/test-rest-raw.png"></li>
</ol>
<p>В разделе результатов тестирования отображается 5 вкладок. </p>
<ul>
<li>'Табличное представление' - это неструктурированное представление, в котором отображаются все URI в полученном документе. В настоящее время в этом представлении отображается только предупреждение о том, что связь контейнера и содержимого контейнера не допускается.</li>
<li>В представлении необработанных данных отображаются фактически возвращенные данные. В зависимости от выбранного типа MIME (<tt>application/xml</tt> или <tt>application/json</tt>) данные будут представлены в формате XML или JSON, соответственно. </li>
<li>На вкладке подресурсов отображаются URL-адреса корневого ресурса и подресурсов. Если веб-служба RESTful построена на основе базы данных, корневой ресурс представляет таблицу базы данных, а подресурсы &ndash; столбцы.</li>
<li>На вкладке заголовков представлены данные заголовка HTTP. </li>
<li>На вкладке монитора HTTP отображаются текущие запросы HTTP, а также отправленные и полученный ответы. </li>
</ul>
<p>Закройте браузер и вернитесь к среде IDE.</p>
<!-- ===================================================================================== -->
<!--
<h2><a name="add-google-map"></a>
Adding a Google Map Feature</h2>
<p>The goal of this exercise is to add Google map
functionality to our RESTful web services.</p>
<ol>
<li>Open the <tt>CustomerRESTFacade</tt> class (EE 5) or <tt>CustomerFacadeREST</tt> class (EE 6)
in the editor. </li>
<li><a name="add_method_step"></a>Add the following method to the class:
<pre>@GET
@Produces("text/html")
public String getGoogleMap() {
// Drag and drop the getGoogleMap operation here
return "";
}</pre>
</li>
<li><a name="get_google_map_key"></a>Sign up for a Google map key at <a target="_blank" href="http://www.google.com/apis/maps/signup.html">http://www.google.com/apis/maps/signup.html</a>. The Google map key request dialog has a field for your website's URL. Type <tt>http://localhost:8080</tt> in that field.</li>
<li>In the IDE, open the Services tab and expand the Web Services node. Under Web Services, expand Google. Under Google, expand Map Service.<br>
<br><img class="margin-around" alt="services view showing google map service" title="Services view showing Google map service" src="../../../images_www/articles/71/websvc/rest/google-saas.png"></li>
<li>Drag the getGoogleMap item and drop it into the body of the <tt>getGoogleMap</tt> method you created in <a href="#add_method_step">Step 2</a>, just before the <tt>return = &quot;&quot;;</tt> line. The Customize getGoogleMap SAAS dialog opens. Accept the defaults and click OK.
<p>The IDE adds the following <tt>try</tt> block to the <tt>getGoogleMap</tt> method.
<pre>@GET
@Produces("text/html")
public String getGoogleMap() {
// Drag and drop the getGoogleMap operation here
try {
String address = "16 Network Circle, Menlo Park";
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
//TODO - Uncomment the print Statement below to print result.
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
</pre>
<p>The IDE also creates the packages org.netbeans.saas and org.netbeans.saas.google, which contain the following classes and resources: </p>
<ul>
<li><tt>RestConnection</tt> - A wrapper around HttpUrlConnection </li>
<li><tt>RestResponse</tt> - A wrapper for the HTTP response</li>
<li><tt>googlemapservice.properties</tt> - A properties file that stores the API key </li>
<li><tt>GoogleMapService</tt> - A service wrapper containing the wrapper methods that uses RestConnection to make calls to the Google Map service.</li>
</ul>
<img src="../../../images_www/articles/71/websvc/rest/project-w-google-ee6.png" alt="Projects window showing packages added after get Google Map method is dropped into Customer Resource" class="margin-around">
<li>In the try block of getGoogleMap(), replace the commented-out print statement with the line <span class="examplecode"><tt>return result.getDataAsString();</tt></span>. The method now looks like this:
<pre>@GET
@Produces("text/html")
public String getGoogleMap() {
// Drag and drop the getGoogleMap operation here
try {
String address = "16 Network Circle, Menlo Park";
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
return result.getDataAsString();
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}</pre>
</li>
<li>Open <tt>googlemapservice.properties</tt>. Paste in the API key you got from Google in <a href="#get_google_map_key">Step 3</a>.
Save your changes. The IDE automatically redeploys your project.
<li>Refresh your browser window with the test client. </li>
<li>Click <tt>entities.customer</tt> in the left sidebar. The <code>GET (text/html)</code> method appears in the &quot;Choose method to test&quot; field. Click Test. The GoogleMap of 16 Network Circle, Menlo Park opens in the Raw View.
<br>
<img src="../../../images_www/articles/71/websvc/rest/menlo-park-map.png" alt="RESTful services test page showing Google map of Menlo Park" border="1" class="margin-around"> </li>
<li>
<p>The Google map of the Menlo Park address appears for all customers in the database. To display the Google maps of the actual addresses of the customers, create an instance of Customer and set the address equal to a concatenation of address variables for that instance of Customer. </p>
<p>Find an instance of Customer by calling the entity manager's <tt>find()</tt> method. In an EE5 service, the customer facade uses its own <code>find</code> method to call <code>CustomerJpaController</code>, which instantiates the entity manager. In an EE6 service, the customer facade uses the abstract facade to access the entity manager. The generic <tt>find()</tt> method requires explicit argument type casting to Object and an explicit entity id. The following code displays the map location of the customer with id number 1 (changes in bold):</p>
<p><b>EE5 service:</b></p>
<pre>@GET
@Produces("text/html")
public String getGoogleMap() {
try {
<b>Customer c = find(1);
String address = c.getAddressline1() + " " + c.getAddressline2() + " " +
c.getCity() + " " + c.getState() + " " + c.getZip();</b>
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
return result.getDataAsString();
} catch (Exception ex) {
ex.printStackTrace();
}
<b></b>
return &quot;&quot;;
}</pre>
<p><b>EE6 service:</b></p>
<pre>@GET
@Produces("text/html")
public String getGoogleMap() {
try {
<b>Customer c = getEntityManager().find(Customer.class, 1);
String address = c.getAddressline1() + " " + c.getAddressline2() + " " +
c.getCity() + " " + c.getState() + " " + c.getZip();</b>
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
return result.getDataAsString();
} catch (Exception ex) {
ex.printStackTrace();
}
<b></b>
return &quot;&quot;;
}</pre>
</li>
<li>Test the RESTful web services again. The customer id is specified as an argument for the <tt>find()</tt> method and the tester displays the raw view by default. For customer 1, the following map displays:
<p class="tips"><strong>Tip: </strong>Try to change the id number passed as an argument to <code>getEntityManager().find(Customer.class, id)</code>. A real world client would get the value of this argument from a UI form.</p>
<br><img border="1" src="../../../images_www/articles/70/websvc/rest/google-map-4.png" class="margin-around" alt="Google Map showing address of customer in database" title="Google Map showing address of customer in database">
<p class="notes"><b>Note: </b>If GoogleMaps cannot find an address, it shows a zoomed in view of the ocean.</p></li>
</ol>
-->
<!-- Spring Framework -->
<!-- <h2><a name="rest-spring"></a>RESTful Web Services in the Spring Framework</h2>
<p>Jersey is integrated into the Spring Framework. When you create a Java Web application with the Spring framework, a REST-aware servlet is automatically created. However, Spring 3 doesn't contain aopalliance.jar, which the RESTful web service requires to inject an EntityManager object.</p>
<div class="indent">
<h3><a name="create-spring-webapp"></a>Creating a Java Web Application With the Spring Framework</h3>
<p>When you create the Java Web application in the New Project wizard as described in <a href="#Exercise_1">Generating Entity Classes from a Database</a>, after you select the server, click Next instead of Finish
to open the Frameworks panel of the wizard. Select Spring Web MVC, then click Finish. </p>
<p class="notes"><strong>Note.</strong> If you already created your project you can add support for the
Spring Web MVC framework by right-clicking the project node in the Projects
window and choosing Properties in the popup menu.
In the Project Properties window, select the Frameworks category and then click Add and select
Spring Web MVC.</p>
<h3><a name="add-aopalliance"></a>Adding aopalliance.jar to the Project</h3>
<p>Spring 3 does not contain <tt>aopalliance.jar</tt>. The application requires this library to inject EntityManager. To fix the problem you need to download this jar and add it to your classpath. See <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=193626" title="https://netbeans.org/bugzilla/show_bug.cgi?id=193626">Issue 193626</a> and the <a target="_blank" href="http://forum.springsource.org/showthread.php?t=10511" title="http://forum.springsource.org/showthread.php?t=10511">Spring forums</a>. </p>
<p><strong>To add aopalliance.jar:</strong></p>
<ol>
<li>Download a zip archive of <tt>aopalliance.jar</tt> from <a target="_blank" href="http://sourceforge.net/projects/aopalliance/files/aopalliance/1.0/" title="http://sourceforge.net/projects/aopalliance/files/aopalliance/1.0/" rel="nofollow">http://sourceforge.net/projects/aopalliance/files/aopalliance/1.0/</a>.</li>
<li>Unzip the archive to the location of your choice.</li>
<li>Right-click your Spring RESTful Web Service project node in the Projects window and
choose Properties in the popup men and then select the Libraries category in the Project Properties window.<br>
<img src="../../../images_www/articles/72/websvc/rest/properties-node.png" height="537" width="340" alt="Context menu showing properties node" class="margin-around">
<p>Alternatively, you can right-click the Libraries node of the project in the
Projects window and choose Add JAR/Folder.</p></li>
<li>Click Add JAR/Folder and locate the <tt>aopalliance.jar</tt> in the file system browser. Click Open.
<p>You will want to use the absolute path reference.</p>
<img src="../../../images_www/articles/72/websvc/rest/browse-for-aopalliance.png" alt="Browsing for aopalliance.jar" height="404" width="586" class="margin-around"></li>
<li>The <tt>aopalliance.jar</tt> file is now included in your libraries. Click OK. <br>
<img src="../../../images_www/articles/72/websvc/rest/libraries.png" alt="Library properties showing added aopalliance.jar" height="461" width="600" class="margin-around"> </li>
</ol>
<h3><a name="create-spring-restful-services"></a>Creating RESTful Services in the Spring-enabled Project</h3>
<p>After you create a Java web application with the Spring framework and add <tt>aopalliance.jar</tt>
to the project's classpath, run the RESTful Web Service from Database wizard as described in <a href="#entities-and-services">Generating Entities and Services</a>. However, do NOT register RESTful resources with a subclass of <tt>javax.ws.rs.core.Application</tt>. Instead use the <tt>web.xml</tt> deployment descriptor. The Spring framework generates a <tt>web.xml</tt> deployment descriptor in all cases.</p>
<img src="../../../images_www/articles/72/websvc/rest/ee6-rest-configuration.png" alt="Options for registering RESTful resources, web.xml chosen" height="319" width="486" class="margin-around">
<p>For more about the features of Spring framework projects in NetBeans IDE, see <a href="../../docs/web/quickstart-webapps-spring.html">Introduction to the Spring Framework</a>.</p>
<h3><a name="spring-errors"></a>Compilation Errors</h3>
<p>You might have compilation errors in the generated service classes. You see these errors if you create the RESTful services before you add <tt>aopalliance.jar</tt> to the classpath. </p>
<p><strong>To fix compilation errors in service classes:</strong></p>
<ol>
<li>Make certain that you add <tt>aopalliance.jar</tt> to the classpath, as described in <a href="#add-aopalliance">Adding aopalliance.jar to the Project</a>.</li>
<li>In the IDE's top menu bar, click Edit and select Find in Projects...</li>
<li>Search for all occurrences of the <tt>@Error</tt> annotation in the project.<br>
<img src="../../../images_www/articles/72/websvc/rest/find-error.png" alt="Find in Projects dialog showing search for the @Error annotation" height="307" width="431" class="margin-around"></li>
<li>Delete every <tt>@Error</tt> line from the code.<br>
<img src="../../../images_www/articles/72/websvc/rest/error-lines.png" alt="Search results for @Error, with one line highlighted and about to be deleted" height="558" width="590" class="margin-around"></li>
</ol>
</div>-->
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Getting%20Started%20with%20REST%20Services%20in%20NetBeans%20IDE%20">Отправить отзыв по этому учебному курсу</a></div>
<br style="clear:both;">
<h2><a name="seealso"></a>Дополнительные сведения</h2>
<p>Дополнительные сведения об использовании IDE NetBeans для разработки приложений Java EE см. следующие ресурсы:
</p>
<ul>
<li><a href="http://netbeans.dzone.com/nb-generate-simpler-rest" target="_blank">Использование NetBeans для создания упрощенных веб-служб RESTful</a></li>
<li><a href="../../trails/web.html">Учебная карта по веб-службам</a></li>
<li>Youtube: <a href="http://www.youtube.com/watch?v=cDdfVMro99s" target="_blank" title="Веб-службы RESTful, сборка и развертывание (Часть 1)">Веб-службы RESTful, сборка и развертывание (Часть 1)</a></li>
<li>Youtube: <a href="http://www.youtube.com/watch?v=_c-CCVy4_Eo" target="_blank" title="Тестирование RESTful NetBeans и вызов ресурсов RESTful (Часть 2)">Тестирование RESTful NetBeans и вызов ресурсов RESTful (Часть 2)</a></li>
</ul>
<p>Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с Java EE IDE NetBeans <a href="../../../community/lists/top.html">присоединяйтесь к списку рассылки nbj2ee@netbeans.org</a>.</p>
</body>