Ohjelmointi

JSP-mallit

Vaikka verkkokehitystyökalut etenevät nopeasti, ne ovat silti jäljessä useimmista graafisen käyttöliittymän (GUI) työkalupaketeista, kuten Swing tai VisualWorks Smalltalk. Esimerkiksi perinteiset graafisen käyttöliittymän työkalupaketit tarjoavat asettelupäällikköjä yhdessä tai toisessa muodossa, jotka mahdollistavat asettelualgoritmien kapseloinnin ja uudelleenkäytön. Tässä artikkelissa tarkastellaan JavaServer Pages (JSP) -mallimekanismia, joka asettelunhallinnan tapaan kapseloi asettelun, jotta sitä voidaan käyttää uudelleen replikoinnin sijaan.

Koska asettelussa tapahtuu monia muutoksia kehityksen aikana, on tärkeää sisällyttää toiminto, jotta sitä voidaan muokata mahdollisimman pienellä määrällä muuhun sovellukseen. Itse asiassa ulkoasupäälliköt esittävät esimerkin yhdestä objektisuuntautuneen suunnittelun periaatteista: kapseloida käsite, joka vaihtelee, joka on myös keskeinen teema monille suunnittelumalleille.

JSP ei tarjoa suoraa tukea asettelun kapseloinnille, joten identtisissä muodoissa olevat verkkosivut toistavat yleensä asettelukoodin; esimerkiksi kuvio 1 esittää verkkosivun, joka sisältää otsikko-, alatunniste-, sivupalkki- ja pääsisältöosuudet.

Kuvan 1 sivun asettelu on toteutettu HTML-taulukkotageilla:

Esimerkki 1. Sisältää sisällön

JSP-mallit 
<%@include file="sidebar.html"%>
<%@include file="header.html"%>
<%@include file="introduction.html"%>
<%@include file="footer.html"%>

Yllä olevassa esimerkissä sisältö sisältyy JSP: hen sisältää direktiivi, jonka avulla sivun sisältö voi vaihdella - muuttamalla mukana olevia tiedostoja - itse sivua muuttamatta. Koska asettelu on kovakoodattu, asettelun muutokset edellyttävät sivun muokkaamista. Jos verkkosivustolla on useita saman muotoisia sivuja, mikä on yleistä, jopa yksinkertaiset asettelumuutokset edellyttävät muutoksia kaikkiin sivuihin.

Asettelumuutosten vaikutusten minimoimiseksi tarvitsemme mekanismin asettelun sisällyttämiseksi sisällön lisäksi. tällä tavalla sekä asettelu että sisältö voivat vaihdella muokkaamatta niitä käyttäviä tiedostoja. Tämä mekanismi on JSP-malleja.

Mallien käyttäminen

Mallit ovat JSP-tiedostoja, jotka sisältävät parametrisoitua sisältöä. Tässä artikkelissa käsitellyt mallit toteutetaan joukolla mukautettuja tunnisteita: malli: hanki, malli: laitaja malli: lisää. malli: hanki tag käyttää parametrisoitua sisältöä, kuten esimerkissä 2.a on havainnollistettu, joka tuottaa verkkosivuja kuvassa 1 esitetyssä muodossa.

Esimerkki 2.a. Malli

<malli: get name = "title"/>
<malli: hanki name = "otsikko" />

Esimerkki 2.a on lähes identtinen esimerkin 1 kanssa, paitsi että käytämme malli: hanki sijasta sisältää direktiivi. Tarkastellaan miten malli: hanki toimii.

malli: hanki hakee määritetyn nimisen Java-pavun pyynnön laajuudesta. Papu sisältää verkkokomponentin URI: n (Uniform Resource Identifier), jonka se sisältää malli: hanki. Esimerkiksi esimerkissä 2.a luetellussa mallissa malli: hanki saa URI: n - header.html - nimisestä pavusta otsikko pyynnön laajuudessa. Myöhemmin, malli: hanki sisältää header.html.

malli: laita asettaa pavut pyynnön piiriin, jonka malli: hanki. Mallin mukana malli: lisää. Esimerkki 2.b havainnollistaa laittaa ja lisää Tunnisteet:

Esimerkki 2.b. Käyttämällä esimerkin 2.a mallia

<>lisää template = "/ ArticleTemplate.jsp"><>laittaa name = "title" content = "Mallit" direct = "true" /><>laittaa name = "header" content = "/ header.html" /><>laittaa name = "sivupalkki" content = "/ sidebar.jsp" /><>laittaa name = "content" content = "/ käyttöönotto.html" /><>laittaa name = "footer" content = "/ footer.html" />

lisää start tag määrittelee sisällytettävän mallin, tässä tapauksessa esimerkissä 2.a luetellun mallin. Jokainen laittaa -tunniste tallentaa pavun pyynnön laajuuteen ja lisää lopputunniste sisältää mallin. Malli pääsee myöhemmin papuihin edellä kuvatulla tavalla.

A suoraan määritteelle voidaan määrittää malli: laita; jos suoraan on asetettu totta, tunnisteeseen liittyvää sisältöä ei sisällytetä malli: hanki, mutta se tulostetaan suoraan implisiittiseen ulos muuttuja. Esimerkiksi esimerkissä 2.b ikkunan otsikkona käytetään otsikon sisältöä - JSP-malleja.

Verkkosivustoilla, jotka sisältävät useita saman muotoisia sivuja, on yksi malli, kuten esimerkissä 2.a lueteltu, ja monilla JSP-sivuilla, kuten esimerkissä 2.b, jotka käyttävät mallia. Jos muotoa muokataan, muutokset rajoitetaan malliin.

Toinen mallien etu ja sisällön sisällyttäminen yleensä on modulaarinen suunnittelu. Esimerkiksi esimerkissä 2.b lueteltu JSP-tiedosto sisältää viime kädessä header.html, lueteltu esimerkissä 2.c.

Esimerkki 2.c. header.html


Koska header.html on sisällytetty sisältö, sitä ei tarvitse kopioida sivuilla, joissa on otsikko. Myös, vaikka header.html on HTML-tiedosto, se ei sisällä tavallista HTML-tagien johdantoa, kuten tai koska kyseiset tunnisteet on määritelty mallilla. Eli koska malli sisältää header.html, näitä tunnisteita ei tule toistaa header.html.

merkintä: JSP tarjoaa kaksi tapaa sisällyttää sisältöä: staattisesti sisältää - ja dynaamisesti - sisältää toiminta. sisältää direktiivi sisältää kohdesivun lähteen kokoamisajankohtana ja vastaa C: tä #sisältää tai Java tuonti. sisältää toiminto sisältää kohteen vasteen, joka on luotu ajon aikana.

Kuten JSP sisältää toiminto, mallit sisältävät sisältöä dynaamisesti. Joten vaikka JSP-sivut esimerkeissä 1 ja 2.b ovat toiminnallisesti identtisiä, edelliset sisältävät staattisesti sisältöä, kun taas jälkimmäiset sisältävät dynaamisesti.

Valinnainen sisältö

Kaikki mallipohjat ovat valinnaisia, mikä tekee yhdestä mallista hyödyllisen useammalle verkkosivulle. Esimerkiksi kuvissa 2.a ja 2.b on kaksi sivua - sisäänkirjautuminen ja luettelo -, jotka käyttävät samaa mallia. Molemmilla sivuilla on otsikko, alatunniste ja pääsisältö. Varastosivulla on muokkauspaneeli (josta puuttuu kirjautumissivu) varastomuutosten tekemiseksi.

Alta löydät kirjautumis- ja mainosjakaumasivujen jakaman mallin:

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

Mainosjakaumasivu käyttää yllä lueteltua mallia ja määrittelee muokkauspaneelin sisällön:

   ...  ...  

Sitä vastoin kirjautumissivu ei määritä sisältöä muokkauspaneelille:

Koska kirjautumissivu ei määritä sisältöä muokkauspaneelille, sitä ei sisälly.

Roolipohjainen sisältö

Verkkosovellukset erottavat usein sisältöä käyttäjän roolin perusteella. Esimerkiksi sama JSP-malli, joka sisältää muokkauspaneelin vain, kun käyttäjän rooli on kuraattori, tuottaa kaksi sivua, jotka on esitetty kuvissa 3.a ja 3.b.

Kuvioissa 3.a ja 3.b käytetty malli käyttää malli: hankion rooli attribuutti:

 ...  ...  ... 
role = 'kuraattori'/>
...

saada -tagi sisältää sisältöä vain, jos käyttäjän rooli vastaa rooli määritteen. Katsotaanpa, miten tunnisteiden käsittelijä on malli: hanki käyttää rooli attribuutti:

julkinen luokka GetTag laajentaa TagSupport {private String name = null, role = null; ... public void setRole (Merkkijono) {this.role = role; } ... public int doStartTag () heittää JspException {... if (param! = null) {if (roleIsValid ()) { // sisällytä tai tulosta sisältöä ... }} ...} yksityinen totuusarvo roleIsValid ()  } 

Mallien toteuttaminen

Tässä artikkelissa käsitellyt mallit on toteutettu kolmella mukautetulla tagilla:

  • malli: lisää
  • malli: laita
  • malli: hanki

lisää tag sisältää mallin, mutta ennen kuin se laittaa Tunnisteet tallentavat tietoja - nimi, URI ja Boolen-arvo, jotka määrittelevät sisällön sisällyttämisen vai tulostamisen suoraan - mallin sisältämästä sisällöstä. malli: hanki, joka sisältää (tai tulostaa) määritetyn sisällön, käyttää myöhemmin tietoja.

malli: laita varastoi pavut pyynnöstä, mutta ei suoraan koska jos kaksi mallipohjaa käyttää samoja sisältönimiä, sisäkkäinen malli voisi korvata oheisen mallin sisällön.

Varmistaaksesi, että jokaisella mallilla on pääsy vain omiin tietoihinsa, malli: lisää ylläpitää pino hashtableja. Jokainen lisää start-tunniste luo hashtabelin ja työntää sen pinoon. Mukana laittaa tunnisteet luovat papuja ja tallentavat ne vasta luotuun hashtableen. Myöhemmin, saada Mukana olevan mallin tagit käyttävät hashtabelin papuja. Kuvassa 4 näkyy, kuinka pinoa ylläpidetään sisäkkäisissä malleissa.

Jokainen kuvion 4 malli käyttää oikeaa alatunnistetta; footer.html malli_1.jsp ja alatunniste_2.html verkkotunnukselle malli_2.jsp. Jos pavut varastoidaan suoraan pyynnön laajuuteen, kuvan 4 vaihe 5 korvaa vaiheessa 2 määritetyn alatunnistepapun.

Mallimerkkien toteutukset

Tämän artikkelin loppuosassa tarkastellaan kolmen mallipohjan käyttöönottoa: lisää, laittaaja saada. Aloitetaan sekvenssikaavioilla alkaen kuvasta 5. Se kuvaa tapahtuman järjestystä lisää ja laittaa tunnisteita, kun mallia käytetään.

Jos mallipinoa ei vielä ole olemassa, lisää start-tunniste luo sellaisen ja sijoittaa sen pyyntöalueeseen. Tämän jälkeen luodaan hashtable ja työnnetään pinoon.

Jokainen laittaa aloitustunniste luo a Sivuparametri papu, joka on tallennettu liitteen luomaan hashtableen lisää tag.

Lisäosa loppuun tag sisältää mallin. Malli käyttää saada tunnisteet, joiden avulla pääset käyttämään laittaa tunnisteet. Kun malli on käsitelty, sen luoma hashtable lisää aloitustunniste ponnahtaa pois pinosta.

Kuvassa 6 on esitetty sekvenssikaavio malli: hanki.

Mallimerkkiluettelot

Mallikoodien tunnistekäsittelijän toteutus osoittautuu suoraviivaiseksi. Esimerkissä 3.a luetellaan InsertTag luokka - tunnisteen käsittelijä malli: lisää.

Esimerkki 3.a. InsertTag.java