Programavimas

JSP šablonai

Nors žiniatinklio kūrimo įrankiai sparčiai tobulėja, jie vis tiek atsilieka nuo daugumos grafinių vartotojo sąsajų (GUI) rinkinių, tokių kaip „Swing“ arba „VisualWorks Smalltalk“. Pavyzdžiui, tradiciniai GUI įrankių rinkiniai pateikia išdėstymo tvarkykles vienoje ar kitoje formoje, leidžiančią išdėstymo algoritmus apjungti ir pakartotinai naudoti. Šiame straipsnyje nagrinėjamas „JavaServer Pages“ (JSP) šablonų mechanizmas, kuris, kaip ir maketavimo tvarkyklės, sujungia išdėstymą, kad jį būtų galima pakartotinai naudoti, o ne replikuoti.

Kadangi maketavimo metu vyksta daug pakeitimų, svarbu apimti tą funkcionalumą, kad jį būtų galima modifikuoti kuo mažiau paveikiant likusios programos. Tiesą sakant, maketavimo vadovai demonstruoja vieno iš objektinio dizaino principų pavyzdį: apima sąvoką, kuri skiriasi, kuri taip pat yra pagrindinė daugelio dizaino modelių tema.

JSP neteikia tiesioginio maketavimo palaikymo, todėl identiškų formatų tinklalapiai dažniausiai atkartoja maketo kodą; pavyzdžiui, 1 paveiksle rodomas tinklalapis, kuriame yra antraštės, poraštės, šoninės juostos ir pagrindinio turinio skyriai.

1 paveiksle parodyto puslapio išdėstymas įgyvendinamas naudojant HTML lentelių žymas:

1 pavyzdys. Turinio įtraukimas

JSP šablonai 
<%@include file="sidebar.html"%>
<%@include file="header.html"%>
<%@include file="introduction.html"%>
<%@include file="footer.html"%>

Aukščiau pateiktame pavyzdyje turinys yra įtrauktas į JSP įtraukti direktyva, leidžianti keisti puslapio turinį - keičiant įtrauktus failus - nekeičiant paties puslapio. Tačiau, kadangi maketas yra sunkiai koduojamas, dėl maketo pakeitimų reikia keisti puslapį. Jei svetainėje yra keli vienodo formato puslapiai, kas yra įprasta, net ir dėl paprastų išdėstymo pakeitimų reikia modifikuoti visus puslapius.

Kad sumažintume maketo pakeitimų poveikį, mums reikia mechanizmo, kaip maketą įtraukti be turinio; tokiu būdu tiek išdėstymas, tiek turinys gali skirtis nekeičiant juos naudojančių failų. Tas mechanizmas yra JSP šablonai.

Naudojant šablonus

Šablonai yra JSP failai, kuriuose yra parametruojamas turinys. Šiame straipsnyje aptarti šablonai įgyvendinami naudojant pasirinktinių žymų rinkinį: šablonas: gauti, šablonas: įdėtiir šablonas: įterpti. šablonas: gauti žyma pasiekia parametrinį turinį, kaip parodyta 2.a pavyzdyje, kuris sukuria tinklalapius, kurių formatas parodytas 1 paveiksle.

2.a.pavyzdys Šablonas

<šablonas: get name = "title"/>
<šablonas: gauti name = "antraštė" />

2.a pavyzdys yra beveik identiškas 1 pavyzdžiui, išskyrus atvejus, kai mes naudojame šablonas: gauti vietoj įtraukti direktyvą. Panagrinėkime, kaip šablonas: gauti veikia.

šablonas: gauti gauna „Java“ pupelę nurodytu vardu iš užklausos srities. Pupoje yra žiniatinklio komponento, kurį įtraukė, URI (vienodas išteklių identifikatorius) šablonas: gauti. Pavyzdžiui, šablone, pateiktame 2a pavyzdyje, šablonas: gauti gauna URI - header.html - iš pupelės, vardu antraštė pagal užklausos taikymo sritį. Vėliau šablonas: gauti apima header.html.

šablonas: įdėti nustato pupeles į užklausos taikymo sritį, kurią vėliau gauna šablonas: gauti. Šablonas pridedamas prie šablonas: įterpti. 2.b pavyzdys iliustruoja įdėti ir Įdėti žymos:

2.b pavyzdys. Naudojant šabloną iš 2.a pavyzdžio

<>Įdėti template = "/ ArticleTemplate.jsp"><>įdėti name = "title" content = "Šablonai" direct = "true" /><>įdėti name = "header" content = "/ header.html" /><>įdėti name = "šoninė juosta" content = "/ šoninė juosta.jsp" /><>įdėti name = "content" content = "/ introduction.html" /><>įdėti name = "footer" content = "/ footer.html" />

Įdėti pradžios žyma nurodo šabloną, kurį reikia įtraukti, šiuo atveju šabloną, nurodytą 2a pavyzdyje. Kiekvienas įdėti žymoje saugoma pupelė pagal užklausos taikymo sritį ir Įdėti pabaigos žymoje yra šablonas. Vėliau šablonas pasiekia pupeles, kaip aprašyta aukščiau.

A tiesioginis atributas gali būti nurodytas šablonas: įdėti; jei tiesioginis yra nustatytas į tiesa, su žyma susieto turinio neįtraukia šablonas: gauti, bet atspausdintas tiesiai į numanomą išėjo kintamasis. Pavyzdžiui, 2.b pavyzdyje lango pavadinime naudojamas pavadinimo turinys - JSP šablonai.

Svetainėse, kuriose yra keli identiško formato puslapiai, yra vienas šablonas, pvz., Išvardytas 2.a pavyzdyje, ir daug JSP puslapių, pvz., 2.b pavyzdys, kuriuose naudojamas šablonas. Jei formatas yra pakeistas, pakeitimai atliekami tik šablone.

Kitas šablonų ir apskritai turinio pranašumas yra modulinis dizainas. Pvz., Į Jb failą, nurodytą 2b pavyzdyje, galiausiai įtraukiama header.html, išvardyti 2.c pavyzdyje.

2.c pavyzdys header.html


Nes header.html yra įtrauktas turinys, jo nereikia pakartoti tarp puslapių, kuriuose rodoma antraštė. Be to, nors header.html yra HTML failas, jame nėra įprastos HTML žymų preambulės, pavyzdžiui, dėl to, kad tas žymas apibrėžia šablonas. Tai yra todėl, kad šablone yra header.html, šios žymos neturėtų būti kartojamos header.html.

Pastaba: JSP pateikia du būdus, kaip įtraukti turinį: statiškai, su įtraukti direktyvą ir dinamiškai su įtraukti veiksmas. įtraukti direktyva apima tikslinio puslapio šaltinį kompiliavimo metu ir yra lygiavertė C # įtraukti arba „Java“ importas. įtraukti veiksmas apima taikinio atsaką, sugeneruotą vykdymo metu.

Kaip ir JSP įtraukti šablonai dinamiškai įtraukia turinį. Taigi, nors 1 pavyzdžio ir 2b pavyzdžio JSP puslapiai yra funkciškai identiški, pirmieji statiškai apima turinį, o antrasis dinamiškai.

Neprivalomas turinys

Visas šablonų turinys yra neprivalomas, todėl vienas šablonas yra naudingas daugiau tinklalapių. Pvz., 2.a ir 2.b paveiksluose parodyti du puslapiai - prisijungimas ir atsargos -, kuriuose naudojamas tas pats šablonas. Abiejuose puslapiuose yra antraštė, poraštė ir pagrindinis turinys. Inventoriaus puslapyje yra redagavimo skydelis (kurio trūksta prisijungimo puslapyje), kad būtų galima atlikti atsargų pakeitimus.

Žemiau rasite šabloną, kurį bendrina prisijungimo ir atsargų puslapiai:

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

Inventoriaus puslapyje naudojamas aukščiau pateiktas šablonas ir nurodomas redagavimo skydelio turinys:

   ...  ...  

Priešingai, prisijungimo puslapyje nenurodomas redagavimo skydo turinys:

Kadangi prisijungimo puslapyje nenurodomas redagavimo skydelio turinys, jis neįtraukiamas.

Vaidinis turinys

Interneto programos dažnai diskriminuoja turinį pagal vartotojo vaidmenį. Pavyzdžiui, tas pats JSP šablonas, kuriame yra redagavimo skydelis tik tada, kai vartotojo vaidmuo yra kuratorius, sukuria du puslapius, parodytus 3.a ir 3.b paveiksluose.

Naudojamas šablonas, naudojamas 3.a ir 3.b paveiksluose šablonas: gauti's vaidmuo atributas:

 ...  ...  ... 
role = 'kuratorius'/>
...

gauti žyma apima turinį tik tuo atveju, jei vartotojo vaidmuo atitinka vaidmuo atributas. Pažvelkime, kaip skirtas žymenų tvarkytuvas šablonas: gauti naudoja vaidmuo atributas:

viešoji klasė „GetTag“ išplečia TagSupport {privačios eilutės pavadinimą = null, role = null; ... public void setRole (String role) {this.role = role; } ... public int doStartTag () meta JspException {... if (param! = null) {if (roleIsValid ()) { // įtraukti arba spausdinti turinį ... }} ...} privatus loginis roleIsValid ()  } 

Šablonų įgyvendinimas

Šablonai, aptarti šiame straipsnyje, įgyvendinami naudojant tris tinkintas žymas:

  • šablonas: įterpti
  • šablonas: įdėti
  • šablonas: gauti

Įdėti žymoje yra šablonas, bet prieš tai įdėti žymos saugo informaciją - pavadinimą, URI ir loginę vertę, nurodančią, ar turinį reikia įtraukti, ar spausdinti tiesiogiai, - apie šablono turinį. šablonas: gauti, kuris apima (arba spausdina) nurodytą turinį, vėliau pasiekia informaciją.

šablonas: įdėti saugo pupeles pagal užklausą, bet ne tiesiogiai nes jei du šablonai naudoja tuos pačius turinio pavadinimus, įdėtas šablonas gali perrašyti pridedamo šablono turinį.

Norėdami užtikrinti, kad kiekvienas šablonas turėtų prieigą tik prie savo informacijos, šablonas: įterpti prižiūri šūsnį „hashtables“. Kiekvienas Įdėti pradžios žyma sukuria „hashtable“ ir stumia ją į rietuvę. Uždaras įdėti žymos sukuria pupeles ir saugo jas naujai sukurtoje „hashtable“. Vėliau gauti Įtraukto šablono žymos prieina prie grotelių pupelių. 4 paveiksle parodyta, kaip palaikomas įdėtų šablonų kaminas.

Kiekvienas 4 paveiksle pateiktas šablonas pasiekia teisingą poraštę; poraštė.html template_1.jsp ir footer_2.html template_2.jsp. Jei pupelės būtų laikomos tiesiogiai pagal užklausos sritį, 4 paveikslo 5 veiksmas perrašytų poraštės pupeles, nurodytas 2 veiksme.

Šablonų žymų diegimas

Likusioje šio straipsnio dalyje nagrinėjamas trijų šablonų žymų įgyvendinimas: Įdėti, įdėtiir gauti. Mes pradedame sekos schemomis, pradedant 5 paveikslu. Tai iliustruoja įvykių seką Įdėti ir įdėti žymos, kai naudojamas šablonas.

Jei šablono kamino dar nėra, Įdėti pradžios žyma sukuria ir įtraukia ją į užklausos sritį. Vėliau sukuriamas hashtable ir stumiamas ant kamino.

Kiekvienas įdėti pradžios žyma sukuria Puslapio parametras pupelės, saugomos gaubiamajame faile, kurį sukuria aptvaras Įdėti žyma.

Įdėklas galas žymoje yra šablonas. Šablonas naudoja gauti žymeles, kad galėtumėte pasiekti pupeles, kurias sukūrė įdėti žymos. Apdorojus šabloną, Įdėti pradinė žyma iššokama iš kamino.

6 paveiksle parodyta sekos schema šablonas: gauti.

Šablonų žymų sąrašai

Žymų tvarkytuvų šablonų žymių įgyvendinimas yra paprastas. 3.a pavyzdyje pateikiami „InsertTag“ klasė - žymenų tvarkytuvas šablonas: įterpti.

3.a pavyzdys InsertTag.java