Deprecated: Function split() is deprecated in /home/adiodomcom/domains/adiodom.com/public_html/melnik/WEB-INF/classes/actions/base.class.php on line 52
Использование Jakarta Struts и Tails
title

Использование 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.
<taglib> <taglib-uri>/tags/struts-tiles</taglib-uri> <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location> </taglib>

Делим страницу на логические части

Создадим основные части представления. У нас их будет четыре: Шапка, Меню, Зона с содержанием и Подвал.
Основные части деления страницы
Но сначала сделаем темплейт которые будет включать в себя все эти части. Итак основной темплейт:
/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>

Мы определили структуру каждой страницы веб-приложения используя 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>
/WEB-INF/layouts/booklist.jsp
<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
<%@ taglib uri="/tags/struts-html" prefix="html" %> Navigation <br /> <html:link action="welcome">Goto welcome page</html:link> <br /> <html:link action="bookList">Goto book list page</html:link> <br />
Код страницы для шапки:
/WEB-INF/layouts/header.jsp
<div style="background-color : #F5F0F5; widht:100%; height:120px;"> </div>
Код страницы для подвала:
/WEB-INF/layouts/footer.jsp
<div style="background-color : #F5F0F5; widht:100%; height:20px;"> </div>

Конфигурируем 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");
    }
}

tutorials.struts.action.BookListAction.java

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>
Файл проекта (архив ZIP)

Struts,Jakarta,Tiles,Templates,Template,темплейт,темплейты,framework,web-application,веб-приложение,приложение,веб