IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Технология Java  >

Введение в Eclipse Web Tools Platform V1.0

Создание J2EE-приложений с использованием WTP

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Скотт Ф. Делап, консультант по Desktop/Enterprise Java, IBM

21.02.2006

Eclipse Web Tools Platform (WTP) расширяет Eclipse IDE и позволяет легко разрабатывать J2EE-приложения (Java 2 Enterprise Edition). Изучите процесс установки WTP, его настройку для использования с сервером приложений и применение его инструментальных средств для создания J2EE-приложений.

Перед началом работы

Об этом учебнике

Этот учебник использует инструментальные средства, включенные в состав Web Tools Platform (WTP), подключаемые модули Eclipse базы данных Derby и сервер приложений JBoss для создания примера J2EE- приложения, содержащего JSP-страницы (JavaServer Pages), сервлет и сессионный компонент. Пример приложения представляет собой простую программу хранения закладок.

Предварительные условия

Для работы с этим учебником вы должны иметь базовые знания по J2EE, включая JSP, сервлеты и EJB-компоненты. Вы должны также знать Eclipse. Наконец, вы должны понимать Structured Query Language (SQL). Технологии, предоставленные в WTP, здесь не рассматриваются. Дополнительная информация приведена в разделе «Ресурсы».

Системные требования

Ваша система UNIX, Linux, Mac OS X или Microsoft Windows должна иметь:

  • Работающую виртуальную машину Java (Java Virtual Machine - JVM).
  • Достаточно свободного места на диске для хранения перечисленных ниже пакетов.
  • Место для создания рабочей области и проектов.
  • Место для создания новой базы данных и J2EE Enterprise Archive (EAR).
  • Достаточное количество свободной оперативной памяти для совместного запуска Eclipse, JBoss и Derby.

Перед началом работы с этим учебником вы должны установить на вашей системе несколько пакетов:

  1. Загрузите и установите версию 1.4.2 Java 2 Standard Edition (J2SE) Software Development Kit (SDK). При написании этой статьи использовался J2SE 1.4.2_10.
  2. Загрузите и извлеките в каталоги следующие пакеты для дальнейшего использования:
    • JBoss Application Server 3.2.3. Подойдет tgz или zip версия. Загрузите именно полную версию, а не версию jbossweb-tomcat*.
    • XDoclet-lib1.2.3. Подойдет tgz или zip версия.
  3. Загрузите WTP V1.0 и настройте Eclipse IDE на его использование. Если вы добавляете WTP к уже существующей платформе Eclipse, перед установкой убедитесь, что у вас установлены все необходимые пакеты. Другим вариантом является загрузка дистрибутива WTP «все в одном» для Linux или Windows. Этот дистрибутив содержит Eclipse IDE, все необходимое для WTP и сам WTP V1.0.
  4. Загрузите подключаемые модули Eclipse Apache Derby V10.1.2(derby_core_plugin_10.1.2.zip и derby_ui_plugin_1.1.0.zip). Установите каждый подключаемый модуль, разархивировав zip-файл в каталоге с установленным Eclipse IDE в папке Eclipse.

Основы Eclipse WTP

Пользователи Eclipse уже давно используют Java Development Tools (JDT), входящий в IDE, для разработки Java-классов и приложений. Хотя JDT достаточно для основных Java-приложений, он не предоставляет функциональных возможностей для разработки J2EE-приложений, содержащих JSP, сервлеты и компоненты Enterprise JavaBeans (EJB-компоненты). WTP как раз и был создан для добавления поддержки J2EE-разработки в Eclipse IDE.

Eclipse WTP расширяет Eclipse в двух основных направлениях. Во-первых, он добавляет поддержку J2EE-форматов и типов объектов в редактор и среду. К таким типам относятся JSP, сервлеты, сессионные компоненты и XML. WTP также расширяет в Eclipse поддержку запуска/отладки для таких задач как запуск/останов серверов приложений и выполнение страниц JSP.

Eclipse WTP также содержит определение платформы и API инструментальных средств, которые поставщики программного обеспечения могут использовать для создания J2EE-инструментов. WTP приняли такие поставщики J2EE как BEA Systems, Borland, IBM и JBoss. WTP V1.0 содержится в коммерческих продуктах BEA Workshop и IBM Rational Application Developer for WebSphere Software. В данном учебнике не рассматривается WTP как платформа инструментальных средств. Внимание уделяется использованию WTP для создания J2EE-приложений.

WTP-компоненты

WTP содержит две подсистемы: Web Standard Tools (WST) и J2EE Standard Tools (JST). WST обеспечивает общую инфраструктуру среды разработки Eclipse для Web-приложений. Сюда входит поддержка Hypertext Markup Language (HTML), Cascading Style Sheets (CSS) и др. WST не обеспечивает поддержки таких J2EE-концепций, как JSP-страницы и сервлеты. WST обеспечивает также базовую поддержку средств работы с данными, куда входят функции просмотра баз данных и выполнения SQL-запросов. JST обеспечивает поддержку J2EE-технологий - JSP и EJB.

Установка JBoss V3.2.3

В этом руководстве в качестве сервера приложений для запуска JSP, сервлетов и EJB используется JBoss V3.2.3. Для того чтобы продолжить работу с руководством, вы должны настроить WTP и Eclipse для использования JBoss во время разработки.

Настройка Java V1.4.2 JRE

Здесь используется комплект разработчика приложений на Java (Java software development kit - JDK) версии 1.4.2 с WTP и JBoss. Если у вас нет Eclipse с 1.4.2-совместимым JDK, вы должны настроить его в списке установленных в Eclipse исполняющих систем JRE (Java Runtime Environment ). Вы можете сделать это следующим образом:

  1. Выберите Window > Preferences из меню.
  2. В появившемся диалоговом окне выберите Java > Installed JREs.
  3. Выберите вариант Add. В диалоговом окне Add JRE просмотрите и выберите каталог, в котором установлена ваша среда 1.4.2 JRE.
  4. Укажите имя вашей JRE (например, Java 1.4.2 JDK) и нажмите OK.
  5. Отметьте флажок рядом с только что установленной JRE, для того чтобы сделать ее средой по умолчанию (см. рисунок 1).

Рисунок 1. Диалоговое окно Preferences после добавления 1.4.2 JDK
Диалоговое окно Preferences после добавления 1.4.2 JDK

Настройка JBoss Server Environment

Следующий шаг – настройка JBoss Server Environment (среды сервера JBoss):

  1. В древовидном списке в левой части диалогового окна Preferences выберите Server > Installed Runtimes.
  2. Нажмите кнопку Add, и выберите JBoss 3.2.3 из появившегося древовидного списка. Нажмите Next.
  3. На экране JBoss V3.2.3 Runtime выберите добавленную вами JRE. В поле "Application Server Directory" просмотрите и выберите каталог, в котором вы развернули JBoss. Нажмите Finish.
  4. Отметьте флажок возле только что созданного сервера JBoss V3.2.3, чтобы сделать его сервером по умолчанию (см. рисунок 2).

Рисунок 2. Диалоговое окно Preferences после добавления настройки сервера JBoss 3.2.3
Диалоговое окно Preferences после добавления настройки сервера JBoss 3.2.3

Теперь вы готовы настроить и протестировать экземпляр сервера JBoss:

  1. Перейдите в представление J2EE. Полезно переместить представление Servers в нижний правый угол, так чтобы оно отображалось поверх остальных закладок.
  2. Щелкните правой кнопкой мыши в представлении Servers и выберите New > Server.
  3. Выберите JBoss v3.2.3 и нажмите Finish.
  4. В представлении Servers появится запись для JBoss v3.2.3. Щелкните правой кнопкой мыши на этой записи и нажмите Start.
  5. Появится представление Console и в нем начнет отображаться выходная информация сервера JBoss (см. рисунок 3).

Рисунок 3. Консоль после старта JBoss
Консоль после старта JBoss

Настройка WTP-проекта

EJB-компоненты и JSP-страницы требуют создания проектов для своего хранения. В этом разделе мы создадим EJB-проект и динамический Web-проект, а также свяжем их с EAR-проектом, содержащим развертываемый EAR-архив, который используется сервером приложений JBoss.

Создание EJB-проекта

Для создания EJB-проекта выполните следующие действия:

  1. Перейдите в представление J2EE.
  2. В древовидном списке слева щелкните правой кнопкой мыши на папке EJB Projects и выберите New > EJB Project.
  3. В появившемся окне мастера введите BookmarkEJB в качестве имени.
  4. Выберите вариант Add project to EAR и введите BookmarkEAR в поле EAR Project Name. Нажмите Next.
  5. Выберите вариант ejbdoclet в следующем экране и нажмите Next.
  6. Снимите отметку с флажка Create EJB Client JAR и нажмите Finish для завершения работы мастера.
  7. Вы должны согласиться с лицензионным соглашением перед тем, как сгенерировать проект. В Project Explorer появится проект BookmarkEJB (см. рисунок 4).

Рисунок 4. Project Explorer после создания проекта BookmarkEJB
Project Explorer после создания проекта BookmarkEJB

Создание динамического Web-проекта

Создание динамического Web-проекта очень похоже на создание EJB-проекта. Следуйте следующему алгоритму:

  1. Щелкните правой кнопкой мыши на папке Dynamic Web Project в Project Explorer и выберите New > Dynamic Web Project.
  2. В появившемся мастере введите BookmarkWeb в качестве имени проекта.
  3. Выберите вариант Add Project to EAR и укажите тот же проект BookmarkEAR, который использовался в мастере EJB Project. Нажмите Next.
  4. Выберите вариант webdoclet и нажмите Finish для завершения работы мастера.

Ваш раскрытый Project Explorer должен выглядеть примерно так, как показано на рисунке 5.


Рисунок 5. Project Explorer после создания проекта BookmarkWeb
Project Explorer после создания проекта BookmarkWeb

Настройка базы данных

В этом руководстве в качестве базы данных используется Apache Derby V10.1.2. В данном разделе мы настроим подключаемый модуль Derby Eclipse, добавим Derby как источник данных JBoss и используем инструментальные средства WTP для создания таблицы хранения закладок.

Установка подключаемого модуля Derby

Подключаемый модуль Derby добавляет базу данных Derby как основу проекта для использования в Eclipse IDE. Это облегчает разработку в Eclipse приложений, использующих Derby. Разрешите Derby для проекта BookmarkEJB. Для этого щелкните правой кнопкой мыши на проекте BookmarkEJB и выберите меню Apache Derby > Add Apache Derby nature. К проекту будут добавлены несколько JAR-файлов для Derby.

Затем нужно запустить сервер Derby Network. Для этого щелкните правой кнопкой мыши по проекту BookmarkEJB и выберите меню Apache Derby > Start Derby Network Server. В окне консоли вы увидите информацию, изображенную на рисунке 6.


Рисунок 6. Консоль во время запуска Derby
Консоль во время запуска Derby

Настройка инструментальных средств WTP

Как уже упоминалось, WTP-проект содержит инструментальные средства базы данных, которые вы можете использовать для просмотра баз данных и выполнения основных SQL-команд. Сейчас мы настроим эти инструментальные средства на работу с только что запущенным сервером Derby. Выполните следующие действия:

  1. Откройте представление Data Explorer путем выбора Window > Show View > Other.
  2. В появившемся диалоговом окне выберите Data Explorer в категории Data и нажмите OK.
  3. Теперь вы готовы добавить соединение. Нажмите правой кнопкой мыши на элементе Connections в новом окне Data Explorer и выберите New Connection.
  4. В появившемся окне мастера выберите вариант Derby 10.1 в левом древовидном списке.
  5. В качестве JDBC-драйвера укажите Derby Client JDBC Driver.
  6. В качестве базы данных укажите wtp.
  7. Укажите APP в качестве имени пользователя и password в качестве пароля.
  8. Теперь вы должны указать месторасположение класса JDBC-драйвера Derby. Просмотрите папку с установленным Eclipse; в каталоге plugins\org.apache.derby.core_10.1.2 выберите файл derbyclient.jar. Нажмите Next для отображения страницы фильтров.
  9. Снимите отметку варианта Disable filter и введите APP в текстовом поле рядом с ниспадающим списком, содержащим фразу Starts with characters.
  10. Нажмите Finish для завершения работы мастера.

На данном этапе развернутый древовидный список в Database Explorer будет выглядеть примерно так, как показано на рисунке 7.


Рисунок 7. Развернутое представление Database Explorer
Развернутое представление Database Explorer

Создание таблицы и данных для разработки

С настроенной базой данных вы можете использовать инструментальные средства WTP для создания таблицы закладок. Выполните следующие действия:

  1. Щелкните правой кнопкой мыши на папке Tables в древовидном списке окна Database Explorer и выберите New > With SQL Editor.
  2. Очистите появившееся окно редактора и скопируйте в него синтаксис команды CREATE TABLE из листинга 1.
  3. Щелкните правой кнопкой мыши в SQL Editor и выберите Run SQL. Появится представление Data Output, как показано на рисунке 8.

Рисунок 8. Представление Database Output
Представление Database Output
  1. Очистите SQL Editor и скопируйте две команды insert из листинга 2.
  2. Опять щелкните правой кнопкой мыши в SQL Editor и выберите Run SQL.
  3. Перейдите обратно в представление Database Explorer, нажмите правой кнопкой мыши на папке Tables и выберите Refresh. Вы увидите таблицу закладок.
  4. Щелкните правой кнопкой мыши на таблице и выберите Data > Sample Contents. Вы должны увидеть две строки, как показано на рисунке 9.

Рисунок 9. Содержимое таблицы закладок
Содержимое таблицы закладок

Листинг 1. CREATE TABLE SQL для таблицы закладок
					
CREATE TABLE APP.bookmarks (
url VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
PRIMARY KEY(url) );
 					  


Листинг 2. INSERT SQL для таблицы закладок
					
insert into bookmarks values('http://www.ibm.com', 'IBM United States');
insert into bookmarks values('http://www.eclipse.org', 'Eclipse.org home');
					

Настройка источника данных JBoss

Для того чтобы использовать базу данных Derby в контейнере сервера приложений JBoss, вы должны настроить источник данных для Derby:

  1. Остановите сервер JBoss (если он работает), щелкнув правой кнопкой мыши на его изображении в представлении Servers и выбрав Stop.
  2. В вашем каталоге установки JBoss есть папка {$jboss_install_dir}\server\default\deploy. Создайте файл с именем derby-ds.xml и вставьте в него содержимое листинга 3.

Листинг 3. Конфигурация источника данных для использования в derby-ds.xml
						
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>DerbyDS</jndi-name>
    <connection-url>jdbc:derby://localhost:1527/wtp;create=
     true</connection-url>
    <driver-class>org.apache.derby.jdbc.ClientDriver</driver-class>
    <user-name>APP</user-name>
    <password>password</password>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <idle-timeout-minutes>5</idle-timeout-minutes>
    <track-statements/>
  </local-tx-datasource>
</datasources>
					

  1. Скопируйте derbyclient.jar из папки {$eclipse_installation_dir}\plugins\org.apache.derby.core_10.1.2 в каталог {$jboss_install_dir}\server\default\lib. При этом в classpath сервера JBoss добавятся файлы JDBC-драйвера Derby.
  2. Запустите экземпляр сервера JBoss из представления Servers, как было описано выше. В консоли отобразится информация, приведенная в листинге 4.

Листинг 4. Консоль JBoss после настройки источника данных Derby
						
15:51:10,649 INFO [MainDeployer] Starting deployment of package:\
file:/C:/wtp/jboss-3.2.3/server/default/deploy/derby-ds.xml
15:51:10,719 INFO [RARDeployment] Started\
jboss.jca:service=ManagedConnectionFactory,name=DerbyDS
15:51:10,739 INFO [JBossManagedConnectionPool] Started\
jboss.jca:service=ManagedConnectionPool,name=DerbyDS
					

Пример приложения хранения закладок

В остальных разделах данного учебника инструментальные средства WTP будут использоваться для создания J2EE-приложения, которое сохраняет и извлекает закладки. Приложение использует стандартный трехуровневый дизайн, показанный на рисунке 10.


Рисунок 10. Три уровня примера приложения
Три уровня примера приложения

Представление состоит из набора JSP страниц; контроллер – это сервлет. Для хранения и извлечения данных из базы данных используется не сохраняющий состояния сессионный EJB-компонент.

Создание сессионного компонента для хранения и извлечения закладок

В данном разделе мы создадим не сохраняющий состояния сессионный компонент для хранения и извлечения закладок из базы данных Derby.

Настройка XDoclet

WTP использует XDoclet-аннотации для разработки EJB и сервлетов. Поэтому в Eclipse необходимо указать месторасположение XDoclet перед созданием сессионного компонента:

  1. Откройте диалоговое окно Preferences и выберите слева категорию XDoclet. Укажите версию 1.2.3.
  2. Просмотрите файловую систему и выберите каталог, в котором вы ранее развернули дистрибутив библиотек XDoclet. Диалоговое окно изменится, указывая на то, что все библиотеки были найдены (см. рисунок 11).

Рисунок 11. Настройка XDoclet
Настройка XDoclet
  1. Вы должны также разрешить для ejbdoclet и webdoclet генерирование J2EE-дескрипторов для JBoss. В категории XDoclet выберите вариант ejbdoclet.
  2. Отметьте флажок рядом с полем задачи JBoss.
  3. Выберите подкатегорию webdoclet и тоже выберите задачу JBoss в списке. На рисунках 12 и 13 показаны диалоговые окна с соответствующими настройками.
  4. Нажмите OK для закрытия диалогового окна Preferences.

Рисунок 12. Настройка webdoclet
Настройка webdoclet

Рисунок 13. Настройка ejbdoclet
Настройка ejbdoclet

Использование мастера WTP Wizard для создания сессионного компонента

Теперь вы можете использовать WTP Enterprise для создания не сохраняющего состояния сессионного компонента:

  1. Щелкните правой кнопкой мыши проект BookmarkEJB и выберите New > Other.
  2. В диалоговом окне Select a Wizard выберите XDoclet Enterprise JavaBean в категории EJB и нажмите Next.
  3. Нажмите Next на следующем экране; отобразится страница для указания имени пакета и класса EJB. Введите ejbs в качестве пакета и BookmarkSessionBean в качестве имени класса.
  4. Нажмите Finish для завершения работы мастера. Процесс XDoclet выполнится и создаст необходимые для EJB файлы, которые появятся в Project Explorer, как показано на рисунке 14.

Рисунок 14. Сгенерированные EJB-классы
Сгенерированные EJB-классы

Реализация BookmarkSessionBean

Созданный WTP компонент BookmarkSessionBean является только базовым скелетом компонента. Вы должны предоставить XDoclet-теги и методы, необходимые для реализации его функций сохранения и извлечения данных. Прежде всего, вы должны добавить конфигурационную информацию, которая разрешит доступ BookmarkSessionBean к настроенному вами ранее источнику данных DerbyDS. Перейдите в представление Java и откройте класс BookmarkSessionBean. Ниже объявления @ejb.bean.. добавьте тег XDoclet из листинга 5 для настройки DerbyDS в качестве ресурса, используемого компонентом BookmarkSessionBean.


Листинг 4. Консоль JBoss после настройки источника данных Derby
					
* @ejb.resource-ref res-name="DerbyDS"
* 		res-ref-name="DerbyDS"
* 		description = "DerbyResource"
* 		type = "javax.sql.DataSource"
* 		res-auth = "Container"
* 		jndi-name="DerbyDS"
*
* @jboss.resource-ref res-ref-name="DerbyDS"
              jndi-name="DerbyDS"
				

Окно вашего редактора должно выглядеть примерно так, как показано на рисунке 15.


Рисунок 15. Добавление тегов XDoclet к EJB
Настройка ejbdoclet

Вам необходим класс BookmarkValueObject для передачи между представлением и компонентом BookmarkSessionBean для поддержки персистентности. Создайте этот класс следующим образом:

  1. Щелкните правой кнопкой мыши по пакету ejbs в представлении Java и выберите New > Class.
  2. Укажите BookmarkValueObject в качестве имени класса и добавьте java.io.Serializable в качестве интерфейса, как показано на рисунке 16.
  3. Нажмите Finish для завершения работы мастера.
  4. Скопируйте реализацию из листинга 6 в класс BookmarkValueObject и сохранитесь.

Рисунок 16. Создание BookmarkValueObject
Создание BookmarkValueObject

Листинг 6. Код реализации для BookmarkValueObject
					
private String url;
private String title;

public BookmarkValueObject(String url, String title) {
  this.url = url;
  this.title = title;
}

public String getTitle() {
  return title;
}

public void setTitle(String title) {
  this.title = title;
}

public String getUrl() {
  return url;
}

public void setUrl(String url) {
  this.url = url;
}

С созданным объектом вы можете реализовать оставшуюся логику, необходимую для BookmarkSessionBean. Удалите метод getFoo() и связанные с ним комментарии XDoclet из класса BookmarkSessionBean и скопируйте реализации методов из листинга 7. Затем запустите Edit > Organize Imports для добавления необходимых импортируемых классов.


Листинг 7. Персистентные методы компонента BookmarkSessionBean
					
/**
 * @ejb.interface-method view-type="both"
 */
public List getBookmarks() {
  try {
      DataSource dataSource = getDerbyDataSource();
      Connection connection = dataSource.getConnection();
      Statement statement = connection.createStatement();
      ResultSet result = statement 
      		.executeQuery("select * from bookmarks");
      List bookmarks = new ArrayList();
      while (result.next()) {
          BookmarkValueObject bvo = new BookmarkValueObject(result
       	.getString(1), result.getString(2));
       bookmarks.add(bvo);
       }
       return bookmarks;
  } catch (SQLException e) {
		e.printStackTrace();
  }
  return null;
}

  /**
   * @ejb.interface-method view-type="both"
   */
  public void saveBookmark(BookmarkValueObject bvo) {
    try {
  	DataSource dataSource = getDerbyDataSource();
  	Connection connection = dataSource.getConnection();
  	PreparedStatement pstmt = connection
 	     .prepareStatement("insert into bookmarks
 		  VALUES(?, ?)");
        pstmt.setString(1, bvo.getUrl());
        pstmt.setString(2, bvo.getTitle());
        pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

   private DataSource getDerbyDataSource() {
	DataSource dataSource = null;
	try {
	  Context context = new InitialContext();
	  Object obj = context.lookup("java:DerbyDS");
	  dataSource = (DataSource)
			PortableRemoteObject.narrow(obj,
		DataSource.class);
} catch (NamingException e) {
 	 // TODO Auto-generated catch block
	  e.printStackTrace();
	}
	return dataSource;
    }
				

Создание сервлета контроллера

Необходимая функциональность для хранения закладок реализована. Следующий шаг – реализация сервлета контроллера, который выполняет проверку и использует компонент BookmarkSessionBean для сохранения BookmarkValueObjects.

Использование мастера WTP Wizard для создания сервлета

WTP предоставляет мастера для автоматизации создания сервлетов. Выполните следующие действия:

  1. Перейдите обратно в представление J2EE и откройте проект BookmarkWeb.
  2. Щелкните правой кнопкой мыши на сервлетах в древовидном списке и выберите New > Servlet.
  3. В появившемся окне мастера укажите пакет servlets и имя класса BookmarkController.
  4. Нажмите Finish для завершения работы мастера. Сгенерированный сервлет откроется в окне редактора.

Для того чтобы использовать BookmarkSessionBean в BookmarkController, вы должны настроить BookmarkEJB.jar так, чтобы он зависел от проекта BookmarkWeb:

  1. Щелкните правой кнопкой мыши проект BookmarkWeb и выберите Properties.
  2. Выберите категорию J2EE Module Dependencies (как показано на рисунке 17) и отметьте флажок рядом с BookmarkEJB.jar.
  3. Закройте диалоговое окно Properties, нажав кнопку OK.

Рисунок 17. Настройка зависимостей проекта BookmarkWeb
Настройка зависимостей проекта BookmarkWeb

Реализация сервлета BookmarkController

Первым шагом для реализации сервлета BookmarkController является добавление XDoclet-аннотации для указания BookmarkSessionBean в качестве ресурса. Скопируйте код из листинга 8 в область XDoclet-аннотации класса сервлета BookmarkController ниже свойства @web.servlet.mapping.


Листинг 8. XDoclet-аннотации для добавления BookmarkSessionBean EJB-ссылок
					
* @web.ejb-local-ref home="ejbs.BookmarkSessionLocalHome"
* 		local="ejbs.BookmarkSessionLocal"
* 		name="ejb/BookmarkSession" type="Session"
* 		link="BookmarkSession"
*
* @jboss.ejb-local-ref ref-name="BookmarkSession"
* 		jndi-name="ejb/ejbs/BookmarkSessionHome"
*

Имея указанную ссылку сессионного компонента, необходимо добавить метод для поиска экземпляра компонента. Скопируйте код из листинга 9 в сервлет.


Листинг 9. Метод lookup BookmarkSessionBean
					
private BookmarkSessionLocalHome bookmarkSessionLocalHome;

private BookmarkSessionLocal getBookmarkSession() {
  if (null == bookmarkSessionLocalHome) {
    try {
	Context context = new InitialContext();
	Object obj = context
			.lookup("java:comp/env/ejb/BookmarkSession");
	bookmarkSessionLocalHome =
  		(BookmarkSessionLocalHome) PortableRemoteObject
			.narrow(obj, BookmarkSessionLocalHome.class);
    } catch (NamingException e) {
	e.printStackTrace();
    }
  }
  try {
    return bookmarkSessionLocalHome.create();
  } catch (CreateException e) {
    e.printStackTrace();
  }
  return null;
}

Этот метод просматривает локальное месторасположение объекта BookmarkSessionBean и возвращает объект, реализующий интерфейс BookmarkSessionLocal .

Последним шагом для завершения BookmarkController является реализация его метода doPost(). Скопируйте код из листинга 10 для реализации и выполните Edit > Organize Imports для добавления необходимых операторов import для классов.


Листинг 10. Реализация doPost()
					
	response.setContentType("text/plain");
PrintWriter out = response.getWriter();


if (request.getParameterMap().size() > 0) {
  String url = request.getParameter("url");
  String title = request.getParameter("title");

  StringBuffer errors = new StringBuffer();
  if (url == null || url.length() < 12) {
    errors.append("The url must be at least 12 characters long.<br>");
  }
  if (title == null || title.length() < 5) {
    errors.append("The title must be at least 5 characters long.<br>");
  }

  String redirectPage;
  if (errors.length() > 0) {
    request.setAttribute("errors", errors);
    redirectPage = "/SaveBookmarkError.jsp";
  } else {
    getBookmarkSession().saveBookmark(new
BookmarkValueObject(url, title));
    request.setAttribute("bookmarks",
getBookmarkSession().getBookmarks());
    redirectPage = "/ShowAllBookmarks.jsp";
  }
  ServletContext sc = getServletContext();
  RequestDispatcher rd =
    sc.getRequestDispatcher(redirectPage);
  rd.forward(request, response);
} else {
  out.println("<html>Invalid Request</html>");
}

Этот код проверяет значения, полученные для URL закладки и для названия. Если были найдены ошибки, контроллер выполняет перенаправление на JSP-страницу ошибок. В противном случае закладка сохраняется. Затем контроллер извлекает все закладки и выполняет перенаправление в JSP для их отображения.

Раздел 9. Создание представления JSP-страниц

Последней частью приложения Bookmark, которую вам необходимо реализовать – это представление. Оно состоит из трех JSP-страниц:

  • CreateNewBookmark.jsp
  • SaveBookmarkError.jsp
  • ShowAllBookmarks.jsp

Использование мастера WTP Wizard для создания CreateNewBookmark.jsp

Нажмите правой кнопкой мыши на папке WebContent проекта BookmarkWeb и выберите New >JSP. В мастере New JavaServerPage Wizard введите имя файла CreateNewBookmark.jsp и нажмите кнопку Finish для завершения работы мастера. Откроется редактор с содержимым сгенерированной JSP-страницы. Введите заголовок для этой новой JSP-страницы.

Следующая страница, CreateNewBookmark.jsp, используется для ввода URL и заголовка для закладки. Затем эта информация передается в сервлет BookmarkController. Скопируйте HTML-код реализации из листинга 11 и поместите его между тегами <body></body> JSP-страницы.


Листинг 11. HTML-реализация CreateNewBookmark.jsp
					
<form action="/BookmarkWeb/BookmarkController" method="post">
Url: <input type="text" name="url"><br>
Title: <input type="text" name="title"><br>
<input type="submit" value="Save">
</form>

Создание SaveBookmarkError.jsp

Для создания SaveBookmarkError.jsp при помощи мастера WTP JSP Wizard следуйте указаниям из предыдущего раздела. Эта страница отображает ошибки, установленные в объекте request контроллером BookmarkController. В листинге 12 приведен фрагмент кода из метода doPost() контроллера. Этот код проверяет ошибки в переданных URL и строке заголовка. Если они найдены – устанавливается атрибут errors, и сервлет выполняет перенаправление на SaveBookmarkError.jsp.


Листинг 12. Фрагмент из BookmarkController
					
String url = request.getParameter("url");
String title = request.getParameter("title");

StringBuffer errors = new StringBuffer();
if (url == null || url.length() < 12) {
  errors.append("The url must be at least 12 characters long.<br>");
}
if (title == null || title.length() < 5) {
  errors.append("The title must be at least 5 characters long.<br>");
}

String redirectPage;
if (errors.length() > 0) {
  request.setAttribute("errors", errors);
  redirectPage = "/SaveBookmarkError.jsp";
} else {
  ...
}
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(redirectPage);
rd.forward(request, response);

Листинг 13 содержит код реализации, который вы должны поместить между тегами <body></body> страницы SaveBookmarkError.jsp. Этот код отображает строку errors, установленную контроллером BookmarkController.


Листинг 13. Реализация SaveBookmarkError.jsp
					
The following errors were found attempting to save your bookmark:<p>
<%
  out.println(request.getAttribute("errors"));
%>
<p>Please press your browser's back button and fix the errors.

Создание ShowAllBookmarks.jsp

Для создания ShowAllBookmarks.jsp при помощи мастера WTP JSP Wizard следуйте указаниям из предыдущего раздела. Эта страница отображает все закладки, содержащиеся в таблице bookmarks. В листинге 14 приведен другой фрагмент кода из метода doPost() контроллера. После сохранения переданной закладки список всех закладок базы данных устанавливается в атрибуте bookmarks объекта request. Затем сервлет выполняет перенаправление на эту страницу.


Листинг 14. Фрагмент из BookmarkController
					
	if (errors.length() > 0) {
  ...
} else {
  getBookmarkSession().saveBookmark(new
    BookmarkValueObject(url, title));
  request.setAttribute("bookmarks",
    getBookmarkSession().getBookmarks());
  redirectPage = "/ShowAllBookmarks.jsp";
}
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(redirectPage);
rd.forward(request, response);

Листинг 15 содержит реализацию страницы ShowAllBookmarks.jsp. Этот код проходит по списку ArrayList и отображает каждую закладку.


Листинг 15. Реализация ShowAllBookmarks.jsp
					
	<%@ page language="java" \
contentType="text/html; charset=ISO-8859-1" \
import="java.util.ArrayList, ejbs.BookmarkValueObject"
  pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>All Bookmarks</title>
</head>
<body>
Bookmarks:<br>
<%
  ArrayList bookmarks = (ArrayList) request.getAttribute("bookmarks");
  for (int i = 0; i < bookmarks.size(); i++) {
    BookmarkValueObject bvo = (BookmarkValueObject) bookmarks.get(i);
    out.println("<a href=\"" + bvo.getUrl()+ "\">" + bvo.getTitle() + "</a><br>");
  }
%>
<br>
<a href="CreateNewBookmark.jsp">Create Another Bookmark</a>
</body>
</html>

Развертывание и тестирование

Вы реализовали все части приложения хранения закладок. Последним шагом в этом учебнике является тестирование приложения с использованием настроенного экземпляра сервера JBoss.

Развертывание приложения

Щелкните правой кнопкой мыши по CreateNewBookmark.jsp в Project Explorer и выберите Run As > Run on Server. В появившемся мастере будет выделен экземпляр JBoss Server.

Нажмите кнопку Finish для завершения работы мастера и начните публикацию приложения. Откроется браузер, который может выглядеть аналогично изображенному на рисунке 18. В этом случае Bookmark EAR находится в процессе развертывания.


Рисунок 18. Ошибки, генерируемые тогда, когда J2EE-приложение не закончило развертывание
Ошибки, генерируемые тогда, когда J2EE-приложение не закончило развертывание

Подождите, пока консоль не отобразит информацию, аналогичную приведенной в листинге 16. Это указывает на то, что JBoss завершил развертывание файла BookmarkEAR.ear.


Листинг 16. Консоль JBoss с информацией об успешном развертывании
					
					00:24:03,286 INFO [Engine] StandardManager[/BookmarkWeb]:
 Seeding random number generator class java.security.SecureRandom
00:24:03,286 INFO [Engine] StandardManager[/BookmarkWeb]:
 Seeding of random number generator has been completed
00:24:03,296 INFO [Engine] StandardWrapper[/BookmarkWeb:default]:
 Loading container servlet default
00:24:03,296 INFO [Engine] StandardWrapper[/BookmarkWeb:invoker]:
 Loading container servlet invoker
00:24:05,750 INFO [EARDeployer] Started J2EE application:
 file:/C:/wtp/jboss-3.2.3/server/default/deploy/BookmarkEAR.ear
00:24:05,750 INFO [MainDeployer] Deployed package:
 file:/C:/wtp/jboss-3.2.3/server/default/deploy/BookmarkEAR.ear
				

Тестирование приложения

Обновите окно браузера, чтобы увидеть новую форму для ввода закладок. Нажатие кнопки Save без заполнения какого-либо поля приведет к отображению страницы, изображенной на рисунке 19 – SaveBookmarkErrors.jsp.


Рисунок 19. Вид SaveBookmarkErrors JSP-страницы
Вид SaveBookmarkErrors JSP-страницы

Нажмите кнопку возврата на предыдущий экран и введите правильный URL и заголовок. Нажмите кнопку Save, и вы увидите список закладок из базы данных, как показано на рисунке 20.


Рисунок 20. Вид ShowAllBookmarks JSP-страницы
Вид ShowAllBookmarks JSP-страницы

Заключение

В этом учебнике использовались многие инструментальные средства, входящие в Eclipse WTP, для создания примера J2EE-приложения Bookmark. Вы должны настроить WTP для использования с сервером приложений JBoss, базой данных Derby и аннотациями XDoclet. Вы использовали мастера и редакторы, включенные в WTP, для создания EJB-компонента, сервлета и нескольких JSP-страниц. Наконец, вы использовали механизмы развертывания, предоставляемые WTP для тестирования вашего приложения.

Теперь вы знаете основы WTP и входящих в него инструментальных средств разработки приложений для Web, J2EE и баз данных.



Ресурсы

Научиться

Получить продукты и технологии

Обсудить


Об авторе

Работает консультантом по Desktop/Enterprise Java.




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



ДаНетНе знаю
 


 


12345
 


В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.


    IBM в РоссииКонфиденциальностьКонтакты