Здравствуйте, уважаемые читатели. Суровый челябинский программист все еще жив, он по прежнему очень суровый и временами даже челябинский.
Сегодня мы поговорим о том, как развернуть простое Tapestry-приложение в эклипсе и как вообще работать в этой замечательной среде с Tapestry-фрэймворком.
Вообще есть плагин под эклипс для работы с Tapestry, но плагин очень старый, для 3й версии фреймворка. Соответственно, никаких преимуществ в его использовании я не вижу, поэтому работать будем без специальных tapestry-плагинов.
Начнем с того, что определимся с инструментарием. Итак, будем иметь:
- Eclipse 3.4 (впрочем не принципиально, 3.2 и 3.3 тоже подойдут) с установленным WTP
- Tapestry 5.0.15
- Tomcat 6 (хотя работать будет и на 5-й версии)
Для тестового приложения я создаю отдельный воркспэйс. Также устанавливаю томкат, просто распаковывая zip-архив в отдельную папку (это под Windows). Папка с томкатом находится, естественно, вне воркспэйса.
Запускаем эклипс, переключаемся в перспективу J2EE. Вообще книги и туториалы по Tapestry про перспективу J2EE ничего не говорят, вероятно из-за того, что не у всех установлен WTP. Но, использование данной перспективы помогает работать с серверами, деплоем приложения и прочими вкусностями. Естественно, соответствующие виды можно открыть и вручную изспользуя меню Window -> Show View, но какой в этом смысл?
Теперь создаем новый проект Web -> Dynamic Web Project:
Запускается мастер нового проекта. В нем задаем имя проекта и самое интересное - Target Runtime. Т.е. а на чем собственно все это будет работать. Можно нажать кнопку New и выбрать сервлет-контейнер или сервер-приложения для нашей программы. Список поддерживаемых сервером очень большой. Выбираем Apache Tomcat v6.0, жмем Next в появившемся окне выбираем путь к установленному серверу и указываем используемый JRE. Жмем Finish, теперь наше приложение будет деплоится на Apache Tomcat v6.0
Далее можно выбрать поддерживаемую версию Servlet API - поле Dynamic Web Module version. Я обычно выбираю 2.4, для Tapestry этого достаточно.
Поле Configuration служит для указания конфигурации веб-приложения. Суть в том, что Eclipse умеет автоматически генерировать окружения для JSF, XDoclet и т.д. Я так понимаю можно настроить и другие (например указать совместимость с Java 1.4, использование JPA и т.д.), но с этим моментом не разбирался. Единственное, что скажу - набор опций зависит от используемого сервера и поддерживаемых им технологий.
В итоге имеем:
Жмем Next - получаем окошко настройки приложения, здесь можно задать каталог в котором будет лежать приложение, каталог в котором будут находится WEB-INF и другие файлы приложения (я обычно называю его web) и каталог для исходников Java-классов.
Окошко выглядит следующим образом:
Все, финиш. Итак, что мы имеем - вот такое дерево проекта:
Интересным тут является Deployment-descriptor, здесь мы можем визуальными средствами добавлять сервлеты, фильтры, контекст-листенеры, настройки безопастности и т.д. Естественно - все это лишь возможности визуального (т.е. Visual Studio/Delphi style) редактирования файла web.xml
Кстати, вот такой вот web.xml нам сгенерировали:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
tapestry-demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
tapestry-demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Теперь необходимо сделать 2 вещи: настроить проект и настроить деплой проекта. Деплой проекта настраивается на вкладке Servers. Если щелкнуть в этой вкладке правой кнопкой мыши - будет меню из одного пункта New. Выбираем New -> Server. Появляется мастер добавления нового сервера, выбираем Apache Tomcat v6.0. Т.к. мы его настраивали при создании проекта - то пути уже указывать ненужно, можно лишь прописать желаемое название, которое будет отображаться на вкладке Servers.
Нажимаем Next - получаем список всех проектов в системе. ВНИМАНИЕ! В списке отображаются только проекты типа Dynamic Web Project, отдеплоить просто Java Project так не получится.
Выбираем нужный проект, жмем Finish. Все, проект отдеплоен.
Собственно, все что было выше - это было, так сказать, введение. Данные этапы общие для разворачивания нового веб-проекта, независимо от используемого фреймворка. Теперь попробуем развернуть веб-приложение, которое будет использовать tapestry. Для этого необходимо:
- Скопировать нужные библиотеки в папку web/WEB-INF/lib - чтобы они были доступны в рантайме
- Подключить нужные библиотеки к проекту, чтобы их можно было использовать при компиляции
- Настроить дескриптор развертывания, создать сервлеты, фильтры, параметры контекста.
- Создать страницу и ее обработчик - для теста
Какие нам нужны библиотеки. Естественно прежде всего - servlet-api.jar (с версией не ниже 2.4) Впринципе в рантайме эта библиотека уже есть и в папку; lib ее копировать ненадо, подключить к проекту же необходимо.
Далее - сам Tapestry, по минимуму это:
- tapestry5-annotations-5.0.15.jar
- tapestry-core-5.0.15.jar
- tapestry-ioc-5.0.15.jar (в девичестве - hivemind 2)
И библиотеки, необходимые для работы Tapestry (с точностью до версии):
- slf4j-api-1.5.2.jar
- slf4j-log4j12-1.5.2.jar
- log4j-1.2.14.jar
- javassist-3.8.0GA.jar
- commons-io-1.3.jar
- commons-codec-1.3.jar
Эти файлы надо скопировать в web/WEB-INF/lib К проекту они подключатся автоматически (по крайней мере в Eclipse 3.4 и будут находится в библиотеке Web App Libraries.
В свойствах Java Build Path проекта, на вкладке Source указываем путь для компиляции: tapestry-demo/web/WEB-INF/classes
Собственно, уже можно писать код. Но чтобы все заработало надо настроить дескриптор развертывания проекта. Здесь есть 2 пути: отредактировать web.xml вручную или воспользоваться визуальными средствами эклипса. Давайте попробуем второй путь.
Прежде всего необходимо задать фильтр, который будет перехватывать все http-запросы и диспатчить их внутрь Tapestry. Для этого можно щелкнуть правой кнопкой по Deployment Descriptor -> Filters. В меню выбрать New -> Filter. Появится мастер создания фильтра запросов. Ставим галочку Use existing Filter class, в поле Class name выбираем (с помощью кнопки Browse) TapestryFilter. Жмем Next, появляется окно настройки мэпинга для фильтра. Т.е. тех урлов, при обращении к которым данный фильтр будет срабатывать. По-умолчанию там находится /TapestryFilter, меняем это на /*
Фильтр подключен, теперь Tapestry будет получать все HTTP-запросы. Но запросы надо обрабатывать, для этого необходимо создать страницы и компоненты (Tapestry - компонентно-ориентированный фреймворк). В Tapestry5 принято, что java-код страниц хранится в app-package.pages, а компонентов - app-package.components, где app-package - главный пакет приложения. Этот пакет нужно указать тейпестри-фильтру, для чего необходимо установить параметр tapestry.app-package в контексте приложения (в web.xml это тег context-param). Визуальных средств для этого нет (все таки WTP еще не до конца допилен), поэтому придется руками в web.xml прописать:
<context-param>
<param-name>tapestry.app-package</param-name>
<param-value>org.beq.tapestry5</param-value>
</context-param>
<param-name>tapestry.app-package</param-name>
<param-value>org.beq.tapestry5</param-value>
</context-param>
В итоге получается вот такой дескриптор развертывания:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>tapestry-demo</display-name>
<context-param>
<param-name>tapestry.app-package</param-name>
<param-value>org.beq.tapestry5</param-value>
</context-param>
<filter>
<description>
</description>
<display-name>
TapestryFilter</display-name>
<filter-name>TapestryFilter</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TapestryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>tapestry-demo</display-name>
<context-param>
<param-name>tapestry.app-package</param-name>
<param-value>org.beq.tapestry5</param-value>
</context-param>
<filter>
<description>
</description>
<display-name>
TapestryFilter</display-name>
<filter-name>TapestryFilter</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TapestryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Теперь попробуем написать простую страницу. Создаем пэкэдж org.beq.tapestry5.pages и класс org.beq.tapestry5.pages.Hello, вот такого содержания:
package org.beq.tapestry5.pages;
public class Hello {
}
public class Hello {
}
Ну и конечно надо созать файл с разметкой страницы - Hello.tml Файлы tml хранятся в каталоге web (т.е. в том же каталоге, что и WEB-INF приложения). Для удобства работы с tml-файлами можно настроить для них html-редактор и создать шаблоны.
Наш Hello.tml будет следующего содержания:
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<h1>Tapestry 5 first page</h1>
<p>Hello, world.</p>
</html>
<h1>Tapestry 5 first page</h1>
<p>Hello, world.</p>
</html>
Компилируем проект, идем на вкладку Servers, выбираем наш сервер Tomcat v6.0 и нажимаем кнопку Start The Server. Сервер стартует, во вкладке консоль появляется лог.
Запускаем браузер, вводим в адресную строку http://localhost:8080/tapestry-demo/Hello
Наслаждаемся:
Статья получилась несколько длинная, но я буду очень рад если кому-то это поможет настроить свой первый Tapestry проект и приобщиться к разработке, с использованием этого замечательного фреймворка.
Понравилось сообщение - подпишись на блог
З.Ы. Если Вы есть во Вконтакте - вступайте в группу Russian Eclipse Community.
7 комментариев:
Хорошая статья. С tapestry только осваиваюсь, да и в джаве опыту пока не много.
По началу не запускалась страничка, томкат выдавал 404, посмотрел логи, оказалось нужна была ещё hibernate3.jar, у вас про неё не написано..
Всё равно спасибо..
Если вы используете hibernate, то естественно, что вам нужен jar с этой библиотекой. Я же показывал самое минимальное приложение, где hibernate не нужен. У меня все стартовало и работало без него.
А вот было бы интересно все тоже самое но через maven. В частности насколько вкусности WTP интегрированы с maven.
Статья то что надо!
Спасибо большое!
Наконец получилосс первое tapestry-приложение :)
Пожалуйста. Как, кстати, впечатления от Tapestry?
доходчиво) thanx a lot!
Отправить комментарий
Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!