Использование Jakarta Struts и Tails
- Author: Igor Melnik, Web/Java Developer
Введение
В данной статье рассказывается как построить простое Struts Tiles приложение. Вы также научитесь установиливать и настраивать Struts Tiles.
Что такое Tiles?
Tiles это система темплейтов для разработки пользователских интерфейсов. Tiles позволяет собирать страницы приложения повторно используя некоторые части разметки. Темплейты позволяют оперативно изменять вид части страниц или же всего сайта.
С чего начать?
- Alias для Tiles Tag Library Descriptor
- Делим страницу на логические части
- Конфигурируем Struts
- Конфигурируем Tiles
Alias для Tiles Tag Library Descriptor
Tiles очень полезный фреймворк для разработки веб-приложений. Начнем с того что добавим поддержку tiles в наше Struts приложение:
Добавим Tiles Tag Library Descriptor (TLD) в файле web.xml.Делим страницу на логические части
Создадим основные части представления. У нас их будет четыре: Шапка, Меню, Зона с содержанием и Подвал.
/WEB-INF/layouts/template.jsp
<%@ page language="java" %> <%@ taglib uri="/tags/struts-tiles" prefix="tiles" %> <html> <head> <title><tiles:getAsString name="title" ignore="true"/></title> </head> <body> <table border="0" width="100%"> <tr> <td colspan="2" valign="top"> <tiles:insert attribute="header"/> </td> </tr> <tr valign="top"> <td height="200" width="20%"> <tiles:insert attribute="menu"/> </td> <td width="80%"> <tiles:insert attribute="body"/> </td> </tr> <tr> <td colspan="2" valign="top"> <tiles:insert attribute="bottom"/> </td> </tr> </table> </body> </html>
- <%@ taglib uri="/tags/struts-tiles" prefix="tiles" %> - подключили библиотеку тегов Tiles
- Используя тег выводим для HTML тега строковое значение. Если атрибут ignore установлен в true (ignore="true") Tiles игнорирует отсутсвующие параметр, иначе Tiles выдаст ошибку о том что такой параметр отсутствует.
- С помощью тега tiles:insert вставили содержимое других JSP страниц. Этот тег вставляет любые страницы или ресурсы которые могут быть определены в параметре.
Теперь подготовым все остальные части из которых будут составляться страницы. Содержание в них может быть статичним или динамичным, в зависимости от требований. В нашем приложении будет несколько страниц, поэтому частей выводящих содержание будет несколько:
/WEB-INF/layouts/welcome.jsp<h2>Welcome to the Title Tutorial</h2> <p>This is the content page</p>
<h2>Book List</h2> <ol> <li>Book name 1</li> <li>Book name 2</li> <li>Book name 3</li> </ol>
/WEB-INF/layouts/menu.jsp
/WEB-INF/layouts/header.jsp
/WEB-INF/layouts/footer.jsp
Конфигурируем Struts
Немного отвлечемся на Struts и добавим экшины и форварды, они нам пригодятся в дальнейшем:struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<global-forwards >
<forward name="welcome" path="/welcome.do" redirect="true" />
</global-forwards>
<action-mappings >
<action path="/welcome" type="tutorials.struts.action.WelcomeAction">
<forward name="showWelcome" path="page.welcome" />
</action>
<action path="/bookList" type="tutorials.struts.action.BookListAction">
<forward name="showBookList" path="page.booklist" />
</action>
</action-mappings>
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
<set-property property="moduleAware" value="true" />
</plug-in>
</struts-config>
В некоторых forward указаны непонятные пути? Мы выясним куда они ссылаются чуть ниже, когда будем строить содержание файла /WEB-INF/tiles-defs.xml. Здесь же мы описали в definitions-config расположение конфигурационного файла для Tiles.
Дальше классы экшинов:tutorials.struts.action.WelcomeAction.java
package tutorials.struts.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
public class WelcomeAction extends org.apache.struts.action.Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
return mapping.findForward("showWelcome");
}
}
package tutorials.struts.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
public class BookListAction extends org.apache.struts.action.Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
return mapping.findForward("showBookList");
}
}
Конфигурируем Tiles
Теперь создадим конфигурационный файл Tiles:/WEB-INF/tiles-defs.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>
<!-- Base Tiles Definition -->
<definition name="base.definition" path="/WEB-INF/layouts/template.jsp">
<put name="title" value="Base"/>
<put name="header" value="/WEB-INF/layouts/header.jsp" />
<put name="menu" value="/WEB-INF/layouts/menu.jsp" />
<put name="bottom" value="/WEB-INF/layouts/footer.jsp" />
</definition>
<!-- Pages -->
<definition name="page.welcome" extends="base.definition">
<put name="title" type="string" value="Welcome" />
<put name="body" value="/WEB-INF/layouts/welcome.jsp" />
</definition>
<definition name="page.booklist" extends="base.definition">
<put name="title" type="string" value="Book List" />
<put name="body" value="/WEB-INF/layouts/booklist.jsp" />
</definition>
</tiles-definitions>
Что в этом файле описано? Определение с именем "base.definition" задает базовые параметры с которыми собирается страница. Дальше определения (расширение базового) с именем "page.welcome" используем для основной страницы, а "page.booklist" для второй страницы - списка книг. Имена этих определений можно использовать в конфигурационном файле Struts, как ссылки на страницы.
И последние штрихи - создадим индексную страницу:/index.jsp
<%@ page language="java" %> <%@ taglib uri="/tags/struts-tiles" prefix="tiles" %> <tiles:insert definition="page.welcome" flush="true"/>
Теперь воспользуемся Ant для сборки и размещения нашего веб-приложения на сервере. Для теста перейдем по ссылке http://localhost:8080/struts_tiles/. Если все сделано правильно то увидим страницу.
Есть еще один способ задать значение параметра в определении.
Рассмотрим туже индексную страницу но с измененным параметром header:<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <tiles:insert definition="page.welcome" flush="true"> <tiles:put name="title" type="string"> <h3>Header Name</h3> </tiles:put> </tiles:insert>
Struts,Jakarta,Tiles,Templates,Template,темплейт,темплейты,framework,web-application,веб-приложение,приложение,веб

