Programování

Šablony JSP

Přestože nástroje pro vývoj webu rychle postupují, stále zaostávají za většinou sad nástrojů pro grafické uživatelské rozhraní, jako je Swing nebo VisualWorks Smalltalk. Například tradiční sady nástrojů GUI poskytují manažery rozložení v té či oné podobě, které umožňují zapouzdření a opětovné použití algoritmů rozložení. Tento článek zkoumá mechanismus šablon pro stránky JavaServer Pages (JSP), který stejně jako správci rozvržení zapouzdřuje rozvržení, takže jej lze místo replikace znovu použít.

Protože rozvržení v průběhu vývoje prochází mnoha změnami, je důležité zapouzdřit tuto funkcionalitu, aby ji bylo možné upravit s minimálním dopadem na zbytek aplikace. Ve skutečnosti správci rozvržení ukazují příklad jedné z principů objektově orientovaného designu: zapouzdřit koncept, který se liší, což je také základní téma pro mnoho návrhových vzorů.

JSP neposkytuje přímou podporu pro zapouzdření rozložení, takže webové stránky se stejnými formáty obvykle replikují kód rozložení; například obrázek 1 ukazuje webovou stránku obsahující sekce záhlaví, zápatí, postranního panelu a hlavního obsahu.

Rozložení stránky zobrazené na obrázku 1 je implementováno pomocí značek tabulky HTML:

Příklad 1. Včetně obsahu

Šablony JSP 
<%@include file="sidebar.html"%>
<%@include file="header.html"%>
<%@include file="introduction.html"%>
<%@include file="footer.html"%>

Ve výše uvedeném příkladu je obsah zahrnut do JSP zahrnout směrnice, která umožňuje měnit obsah stránky - změnou zahrnutých souborů - beze změny samotné stránky. Protože je však rozložení pevně zakódováno, vyžadují změny rozložení úpravy stránky. Pokud má web více stránek se stejnými formáty, což je běžné, vyžadují i ​​jednoduché změny rozvržení úpravy všech stránek.

Abychom minimalizovali dopad změn rozložení, potřebujeme mechanismus pro zahrnutí rozložení kromě obsahu; tímto způsobem se může rozvržení i obsah lišit bez úpravy souborů, které je používají. Tím mechanismem jsou šablony JSP.

Pomocí šablon

Šablony jsou soubory JSP, které obsahují parametrizovaný obsah. Šablony popisované v tomto článku jsou implementovány pomocí sady vlastních značek: šablona: získat, šablona: dát, a šablona: vložit. The šablona: získat značka přistupuje k parametrizovanému obsahu, jak je znázorněno v příkladu 2.a, který vytváří webové stránky ve formátu zobrazeném na obrázku 1.

Příklad 2.a. Šablona

<template: get name = "title"/>
<šablona: získat name = "hlavička" />

Příklad 2.a je téměř totožný s příkladem 1, kromě toho, že použijeme šablona: získat místo zahrnout směrnice. Podívejme se, jak šablona: získat funguje.

šablona: získat načte z rozsahu požadavku objekt Java bean se zadaným názvem. Fazole obsahuje URI (Uniform Resource Identifier) ​​webové komponenty, která je součástí šablona: získat. Například v šabloně uvedené v příkladu 2.a, šablona: získat získá URI - header.html - z fazole jménem záhlaví v rozsahu požadavku. Následně šablona: získat zahrnuje header.html.

šablona: dát vloží fazole do rozsahu požadavku, který následně načte šablona: získat. Šablona je součástí šablona: vložit. Příklad 2.b ilustruje použití dát a vložit tagy:

Příklad 2.b. Pomocí šablony z příkladu 2.a

<>vložit template = "/ articleTemplate.jsp"><>dát name = "title" content = "Šablony" direct = "true" /><>dát name = "header" content = "/ header.html" /><>dát name = "sidebar" content = "/ sidebar.jsp" /><>dát name = "content" content = "/ úvod.html" /><>dát name = "footer" content = "/ footer.html" />

The vložit počáteční značka určuje šablonu, která má být zahrnuta, v tomto případě šablona uvedená v příkladu 2.a. Každý dát značka ukládá fazole v rozsahu požadavku a vložit koncová značka obsahuje šablonu. Šablona následně přistupuje k fazolím, jak je popsáno výše.

A Přímo atribut lze zadat pro šablona: dát; -li Přímo je nastaven na skutečný, obsah přidružený ke značce není zahrnut do šablona: získat, ale je vytištěn přímo na implicitní ven proměnná. V příkladu 2.b se například pro nadpis okna používá obsah nadpisu - šablony JSP.

Webové stránky obsahující více stránek se stejnými formáty mají jednu šablonu, jako je ta uvedená v příkladu 2.a, a mnoho stránek JSP, jako je příklad 2.b, které tuto šablonu používají. Pokud je formát změněn, změny jsou omezeny na šablonu.

Další výhodou šablon a obecně obsahu je modulární design. Například soubor JSP uvedený v příkladu 2.b nakonec obsahuje header.html, uvedené v příkladu 2.c.

Příklad 2.c. header.html


Protože header.html je zahrnutý obsah, nemusí se replikovat mezi stránkami, které zobrazují záhlaví. Také však header.html je soubor HTML, neobsahuje obvyklou preambuli značek HTML, například proto, že tyto značky jsou definovány šablonou. To je proto, že šablona obsahuje header.html, tyto značky by se neměly opakovat header.html.

Poznámka: JSP poskytuje dva způsoby, jak zahrnout obsah: staticky s zahrnout směrnice a dynamicky s zahrnout akce. The zahrnout Direktiva zahrnuje zdroj cílové stránky v době kompilace a je ekvivalentní s C. #zahrnout nebo Java import. The zahrnout akce zahrnuje odpověď cíle generovanou za běhu.

Jako JSP zahrnout akce, šablony zahrnují obsah dynamicky. Přestože jsou stránky JSP v příkladu 1 a příkladu 2.b funkčně identické, první staticky zahrnuje obsah, zatímco druhý jej dynamicky zahrnuje.

Volitelný obsah

Veškerý obsah šablony je volitelný, díky čemuž je jedna šablona užitečná pro více webových stránek. Například obrázek 2.a a obrázek 2.b ukazují dvě stránky - přihlášení a inventář -, které používají stejnou šablonu. Obě stránky mají záhlaví, zápatí a hlavní obsah. Stránka inventáře má panel úprav (který na přihlašovací stránce chybí) pro provádění změn inventáře.

Níže najdete šablonu sdílenou stránkami pro přihlášení a inventář:

 ... 
name = 'editPanel'/>
...

Stránka inventáře používá výše uvedenou šablonu a určuje obsah panelu úprav:

   ...  ...  

Naproti tomu přihlašovací stránka neurčuje obsah panelu úprav:

Protože přihlašovací stránka neurčuje obsah panelu úprav, není zahrnuta.

Obsah založený na rolích

Webové aplikace často rozlišují obsah na základě role uživatele. Například stejná šablona JSP, která obsahuje panel úprav pouze v případě, že je rolí uživatele kurátor, vytvoří dvě stránky zobrazené na obrázcích 3.aa 3.b.

Šablona použitá na obrázcích 3.a a 3.b používá šablona: získatje role atribut:

 ...  ...  ... 
role = 'kurátor'/>
...

The dostat značka obsahuje obsah, pouze pokud se role uživatele shoduje s role atribut. Pojďme se podívat na to, jak obslužná rutina značky funguje šablona: získat používá role atribut:

public class GetTag extends TagSupport {private String name = null, role = null; ... public void setRole (String role) {this.role = role; } ... public int doStartTag () hodí JspException {... if (param! = null) {if (roleIsValid ()) { // zahrnout nebo vytisknout obsah ... }} ...} soukromý boolean roleIsValid ()  } 

Implementace šablon

Šablony popsané v tomto článku jsou implementovány se třemi vlastními značkami:

  • šablona: vložit
  • šablona: dát
  • šablona: získat

The vložit značka obsahuje šablonu, ale předtím, dát tagy ukládají informace - název, URI a booleovskou hodnotu určující, zda má být obsah zahrnut nebo vytištěn přímo - o obsahu, který šablona obsahuje. šablona: získat, který zahrnuje (nebo tiskne) zadaný obsah, následně přistupuje k informacím.

šablona: dát ukládá fazole v rozsahu požadavku, ale ne přímo protože pokud dvě šablony používají stejné názvy obsahu, vnořená šablona by mohla přepsat obsah přiložené šablony.

Chcete-li zajistit, aby každá šablona měla přístup pouze ke svým vlastním informacím, šablona: vložit udržuje hromadu hashtables. Každý vložit start tag vytvoří hashtable a vloží jej do zásobníku. Uzavřený dát tagy vytvářejí fazole a ukládají je do nově vytvořené hashtable. Následně dostat značky v zahrnuté šabloně přistupují k fazolím v hashtable. Obrázek 4 ukazuje, jak je zásobník udržován pro vnořené šablony.

Každá šablona na obrázku 4 přistupuje ke správné zápatí; footer.html pro template_1.jsp a footer_2.html pro template_2.jsp. Pokud by fazole byla uložena přímo v rozsahu požadavku, krok 5 na obrázku 4 by přepsal fazole zápatí uvedená v kroku 2.

Implementace značky šablony

Zbývající část tohoto článku zkoumá implementaci tří značek šablon: vložit, dát, a dostat. Začínáme sekvenčními diagramy, počínaje obrázkem 5. Ilustruje sled událostí pro vložit a dát značky při použití šablony.

Pokud zásobník šablon ještě neexistuje, vložit počáteční značka vytvoří jednu a umístí ji do rozsahu požadavku. Následně se vytvoří a zatlačí se na zásobník hashtable.

Každý dát počáteční značka vytvoří PageParameter fazole, uložená v hashtable vytvořeném v příloze vložit štítek.

Vložka konec značka obsahuje šablonu. Šablona používá dostat značky pro přístup k fazolím vytvořeným dát značky. Po zpracování šablony se hashtable vytvořený souborem vložit počáteční značka je vyskočena ze zásobníku.

Obrázek 6 ukazuje sekvenční diagram pro šablona: získat.

Výpisy značek šablony

Implementace obslužných rutin značek pro značky šablon se ukázala jako přímočará. Příklad 3.a uvádí seznam Vložte značku třída - obslužná rutina značky pro šablona: vložit.

Příklad 3.a. InsertTag.java