Tagu bibliotēkas

Mērķi

Tagu pārskats

Marķēšanas nolūkiem (HTML, XML) lietotos tagus sauc arī par birkām (angliski gan vieni, gan otri ir tags)

Kas ir tagu bibliotēka

Sākot ar JSP 1.1. ir iespēja lietot īpaštagus JSP lapās. Īpaštagi ir labs veids abstrahēt biznesa loģiku no Web lapu prezentācijas. Tos ir viegli lietot Web'a autoriem un dod iespēju Web'a dizaineriem piekļut sarežģītai funkcionalitātei, izmantojot vienkāršu tagu interfeisu. Web'a izstrādes rīki palīdz izveidot prezentāciju, ko var papildināt ar īpaštegu radīto dinamisko saturu. Tomcat 4 pilnībā atbalsta tagu bibliotēkas (JSP 1.2. specifikācija).

Kādēļ lietot tagus?

Tagu priekšrocības:

Tagu iespējas:

Tagus pieraksta XML sintaksē. Lapu dizaineri parasti ir pazīstami ar HTML vai XML sintaksi; viņiem ir viegli pierast pie tagu bibliotēkām un izmantot tajās pieejamos tagus.

Tagi un Web'a izstrāde

Tagi palīdz Web'a aplikāciju izstrādes darba dalīšanā:

Javas programmētāji
Implementē tagus (programmē tagu uzvedību) un nodrošina piekļuvi datubāzēm un citiem korporatīviem servisiem
Satura veidotāji
Izmanto tagus datu attēlošanai, lietotāja saskarnei un aplikācijas dizaina veidošanai

Aplikāciju veidošanas gaitā Javas programmētājiem ir jānoskaidro JSP lapās veicamie uzdevumi. Tad var izveidot tagus un padarīt zināmu satura veidotājiem tagu API.

Tagu saturs/ķermenis (body)

Tagam ar ķermeni ir atverošā un aizverošā birka

<myTagLib:myTag>
   ... taga ķermenis, kurā var būt JSP, HTML un citi tagi ...
</myTagLib:myTag>

Tagam bez ķermeņa ir jābeidzas ar daļsvītru (/) - XML sintakse:

<myTagLib:myTag

Lapas saziņa ar tagiem - I

Informāciju tagam var nodot kā atribūtus un/vai taga ķermenī

Atribūtus raksta taga atverošajā birkā:

<myTagLib:myTag param1="val1" param2="<%=jspExpression1%>"/>

Taga ķermenis arī ir pieejams taga implementācijai:

<myTagLib:myTag param1="val1" param2="<%=jspExpression1%>">
    ...
    <%=jspExpression2%>
    ...
</myTagLib:myTag>

Ievērojiet, ka minētajā piemērā param2 izmanto JSP izteiksmi kā savu vērtību. Izteiksmi tagu interpretators var saņemt vai nu kā String vērtību, vai arī kā to datu tipu, kuru atgriež JSP izteiksme. To var konfigurēt tagu bibiotēkas deskriptorfailā (elementā, kuru sauc rtexprvalue). Kā lietot tagu bibliotēkas deskriptorus, būs rakstīts vēlāk.

Lapas saziņa ar tagiem - II

Tagi var sazināties arī ar...

Piemērs tagam, kurš rada jaunu mainīgo tran:

<myTagLib:getTransaction transactionName="tran"/>
<%  tran.begin(); %>
...

Tagu savstarpējā sadarbība

Viens otrā iekļauti tagi var sadarboties caur kopīgiem objektiem, kuri...

Tagu interfeisi

Jaunu JSP tagu var implementēt, uzrakstot Javas klasi, ko sauc par taga apstrādātāju. To raksta, implementējot vienu no diviem interfeisiem - Tag vai BodyTag, kuri deklarē metodes, kuras tiek izsauktas taga dzīves laikā. Var arī mantot no kādas abstraktas bāzes klases, kura implementē kādu no šiem interfeisiem. Mantojot no abstraktas bāzes klases, izpaliek vajadzība implementēt visas metodes, kuras ir interfeisos, ir arī citas ērtības. Klases TagSupport un BodyTagSupport implementē šos interfeisus un ir iekļautas API.

Viens vai vairāki JSP tagi veido Tagu bibliotēku. Tagu bibliotēku definē TLD-deskriptors (Tag Library Descriptor (TLD)). TLD apraksta katra taga sintaksi un piesaista to Javas klasēm, kuras nodrošina tā funkcionalitāti.

UML diagramma (sk. augstāk) parāda interfeisus, kādi tie bija JSP 1.1. specifikācijā. JSP 1.2. specifikācija ieviesa jaunu interfeisu IterationTag, kurš ir starp šiem diviem interfeisiem. Šāds interfeiss ir tikai tagiem, kuri vēlas taga ķermeņa saturu rakstīt JSP lapas izvadē atkārtoti. Visu, ko var izdarīt ar IterationTag, var izdarīt arī ar BodyTag, tādēļ mēs šeit neaplūkojam IterationTag.

...

...

...

exercise52: Tegu bibliotēka

Mērķis:

Darbības:

Par "include" un "jsp:include" direktīvām sk. JSP mācību līdzekli: http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

Piezīme: Navigācijas problēmai ir izplatīts alternatīvs risinājums. Dokumentus var glabāt datubāzē kā tīra HTML BLOBus un ielasīt tos vienā - "universālajā" JSP lapā, kurai kā parametru padod dokumenta id'u.