Obsah
Používání nástrojů a technologií, které dokáží zjednodušit práci, je nedílná součást vývoje software. Aplikační rámec Sitemesh [2] je ve zkratce nástroj, který minimalizuje psaní a údržbu HTML kódu prezentační vrstvy na nutné minimum a nejen to. Tento nástroj si nyní představíme.
SiteMesh je aplikační rámec poskytující prostředky pro snadnější tvorbu a správu vzhledu (layout) webových aplikací. V podstatě jde o aplikaci založenou na technologii filtrů ze specifikace servletů jazyka Java [6], která dokáže odekorovat jednotlivé HTML stránky a tím docílit jejich jednotný vzhled.
SiteMesh je aplikace s volně šířitelným zdrojovým kódem, která je vyvíjena v rámci projektu OpenSymphony [3] známém to distributoru dalších špičkových JEE komponent. Z neoficiálních zdrojů vyplývá, že jeho vývoj byl v rámci projektu OpenSymphony zastaven a přesunut na adresu java.net [4], kde si ho v současnosti můžeme stáhnout v aktuální stabilní verzi 2.3.
Pro jednoduchost zde uvedeme a dále bude počítat s tím, že SiteMesh je schopen dekorovat především HTML stránky. Jak si ukážeme později, toto vyjádření je poněkud nepřesné, nicméně pro tuto chvíli naprosto dostačující pro pochopení následujícícho textu.
Jelikož SiteMesh pracuje pouze s výstupy uživatelských požadavků na aplikaci, můžeme jej snadno zaintegrovat do již běžících projektů. Pro jeho nasazení a používání není nutná žádná úprava zdrojových kódů existující aplikace. Další bezespornou výhodou aplikačního rámce SiteMesh je, že není vázaný na žádnou technologii tak, jako je vázáno použití konkurenční technologie Tiles [5] na rámec Jakarta Struts [6].
SiteMesh je také vhodný pro integraci více různých aplikací, zvláště pak, klademe-li důraz na jejich společný vzhled.
Jeho instalaci si nyní ukážeme na naší aplikaci.
Aplikační rámec SiteMesh je reprezentován implementací rozhraní
Filter nazvané PageFilter.
V podkapitole 2.2. se seznámíme s architekturou tohoto rámce podrobněji.
Pro potřeby instalace je tato informace dostačující.
Instalaci třídy PageFilter provedeme ve
web.xml naší aplikace. Nastavíme ho tak, aby byl
aktivován v případě libovolného požadavku na naši aplikaci.
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Dále vytvoříme soubor
, kde uvedeme jména dekorátorů používaných naší
aplikací./WEB-INF/decorators.xml
<decorators defaultdir="/WEB-INF/decorators">
...
<decorator name="public" page="public.jsp">
<pattern>/*</pattern>
</decorator>
...
</decorators>
Na ukázce vidíme definovaný dekorátor se jménem
public reprezentovaný souborem
public.jsp, který bude aplikován na všechny
požadavky na naši aplikaci v případě, že by
decorators.xml neobsahoval žádné další definice
dekorátorů. Naše aplikace obsahuje více dekorátorů, se kterými se
seznámíme v podkapitole 2.3.
Nyní potřebujeme vytvořit vlastní dekorátor. Dekorátor je JSP stránka obsahující speciální
uživatelské značky aplikačního rámce SiteMesh. Soubor nazveme
public.jsp a uložíme do
/WEB-INF/decorators/.
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator"
prefix="decorator" %>
<%@ page session="true" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" %>
<html>
<head>
<title><decorator:title /></title>
<decorator:head />
</head>
<body>
<h1>Sportovní portál<h1>
<decorator:body /></td>
</body>
</html>
Na názorném příkladu vidíte jednoduchý dekorátor. V naší aplikaci
obsahuje dekorátor public.jsp složitější
HTML konstrukce, jak se můžete sami přesvědčit, proto
není vhodný pro tento ilustrační příklad.
Dekorátor obsahuje uživatelskou značku
<decorator:title /> a
<decorator:body />, které slouží pro nahrazení
obsahem elementu <title> a
<body> dekorované stránky. Více se o
uživatelských značkách dozvíte v podkapitole 2.4.
Nyní máme vše nakonfigurované, a tedy můžeme zkusit přistoupit k nějaké běžné stránce v naší aplikaci. Vidíme, že stránka je dekorovaná podle našich představ.
Samotnou funkcionalitu tohoto rámce lze jednoduše charakterizovat několika slovy. Rámec je schopen zachytit příchozí požadavek na aplikaci, rozebrat původně odkazovanou stránku a získat z ní potřebná data. Tuto stránku je schopen poté odekorovat vybraným dekorátorem a jako celek vrátit uživateli.