Programiranje

Pokličite metode JavaBean s strani JSP 2.0

Nova različica JavaServer Pages (JSP) vključuje izrazni jezik (EL), ki ga je uvedla standardna knjižnica oznak JSP (JSTL), da bi spletni oblikovalci izdelali JSP strani brez skriptov, ki ne vsebujejo kode Java. Ker JSP 2.0 omogoča povratno združljivost z JSP 1.x, lahko na svoje strani še vedno vključite delčke Java, toda obdelovalci oznak in komponente JavaBean so veliko boljša mesta za funkcionalnost, ki temelji na Javi.

JSP 2.0 ponuja nove funkcije za obdelovalce oznak, kot so dinamični atributi, protokol enostavnega klica in .oznaka datotek. Še vedno uporabljate stara standardna dejanja JSP 1.0 za ustvarjanje primerkov JavaBean in nastavljanje njihovih lastnosti, zdaj pa lahko z novim jezikom izraza dostopate do lastnosti graha, parametrov zahteve in atributov / spremenljivk JSP.

Vse te izboljšave tehnologije JSP vam omogočajo, da dosežete cilj ločevanja oznak JSP / HTML od kode Java. Manjka pa ena stvar. JSP 2.0 nima sintakse za klicanje javne nestatične metode JavaBean s strani JSP brez skriptov. Ta članek rešuje to težavo z zagotavljanjem preproste oznake JSP 2.0 z dinamičnimi atributi.

Opomba: Izvorno kodo tega članka lahko prenesete iz virov.

Potreben je izrazni jezik

Recimo, da imate java.util.List primer morate predstaviti kot seznam HTML. Tu je hitra rešitev, ki temelji na JSP 1.x:

Obstoječe spletne aplikacije, ki temeljijo na JSP, so sestavljene iz kode Java, pomešane z oznakami HTML, kot je zgornji fragment kode. Vzdrževanje na stotine takšnih strani je lahko nočna mora, če imate ločene ekipe za razvoj Jave in spletno oblikovanje. Rešitev je premakniti kodo Java v knjižnice oznak, tako da lahko razvijalci opravljajo svoja dela, ne da bi kodo Java prilepili na spletne strani, oblikovalci pa lahko urejajo svoje spletne strani, ne da bi se skrbeli, da bi zlomili kodo Java.

Vendar ima JSP 1.x več težav, ki vam ne omogočajo enostavno razvijati strani JSP brez skriptov. Do nedavnega ni obstajala nobena standardna metoda za dostop do predmetov Java s strani JSP brez uporabe kode Java. Poleg tega razredi za ravnanje s kodirnimi oznakami niso bili tako preprosti, kot bi lahko bili.

Naslednje vrstice kode temeljijo na JSTL 1.0, ki se lahko uporablja z JSP 1.2. The oznaka se ponovi nad elementi danega seznam in izvozi elem spremenljivka za vsak element. Namesto izjave elem kot lokalna spremenljivka tag ustvari atribut strani z pageContext.setAttribute (). Vrednost tega atributa je natisnjena z vrednostmi JSTL oznaka:

JSTL ponuja standardne oznake za obdelavo dokumentov XML in dostop do relacijskih baz podatkov, skupaj z oznakami za oblikovanje, oznakami za internacionalizacijo, pogojnimi oznakami, oznakami iteratorjev, oznakami, povezanimi z URL-ji, in drugimi splošnimi oznakami. JSTL je številne težave JSP 1.x rešil s pomočjo jezika izraza, ki omogoča dostop do predmetov Java s strani JSP brez uporabe kode Java. Na primer, namesto da bi iskali atribut ali dostopali do parametra zahteve z:

zdaj lahko uporabite:

$ {a} $ {param.p} 

Dostopate lahko do kontekstnih predmetov strani JSP, atributov strani / zahteve / seje / aplikacije (znane tudi kot spremenljivke JSP), lastnosti JavaBean, elementov zbirke, parametrov zahteve, parametrov inicializacije, piškotkov in glav HTTP.

Z JSP 1.2 je jezik izraza na voljo samo aplikacijam in knjižnicam oznak, ki temeljijo na JSTL. JSP 2.0 omogoča EL na voljo vsem aplikacijam JSP in vsem knjižnicam oznak (vključno s starimi taglibi, zasnovanimi za JSP 1.x). JSP 2.0 tudi poenostavlja razvoj knjižnice oznak, kot boste videli kasneje v tem članku.

Od svoje prve različice je JSP zagotavljal standardne oznake za uporabo JavaBeans na straneh JSP. Primerke JavaBean lahko ustvarite ali poiščete z , nato pa lahko z njimi nastavite in nastavite njihove lastnosti in . Z JSP 2.0 lahko vrednost nepremičnine dobite tudi z:

$ {bean.property} 

Poleg lastnosti imajo komponente JavaBean javne metode, ki jih je pogosto treba poklicati s strani JSP. Preostanek tega članka bo predstavil tri načine za klicanje metod JavaBean brez uporabe kode Java. Ena temelji na podpori funkcij JSP 2.0, ki so EL konstrukti, ki vam omogočajo klicanje statičnih metod razredov Java. Druga rešitev uporablja oznake po meri, ki dobijo parametre metode kot atribute oznak. Tretji način temelji na splošni oznaki, ki vam omogoča, da na strani JSP pokličete katero koli javno metodo katerega koli razreda JavaBean.

Uporabite funkcije

Začetni JSTL 1.0 EL ni imel podpore za funkcije. JSP 2.0 EL vam omogoča, da pokličete javno statično metodo razreda Java z uporabo naslednje sintakse:

$ {predpona: methodName (param1, param2, ...)} 

Funkcijo JSP je treba prijaviti v deskriptorju knjižnice oznak (TLD):

 methodName className returnType methodName (param1Type, param2Type, ...) 

Razredu Java ni treba izvajati posebnega vmesnika. Edina zahteva je, da metodo Java naredite javno in statično.

Predavanje TestBean

The TestBean class ima javno metodo z imenom testMethod (), ki je poklican s strani JSP, predstavljenih v naslednjih oddelkih. JavaBean ima tri poimenovane lastnosti besedilo, številko, in logiko. Te lastnosti spreminja testMethod (), ki vrne niz, ki vsebuje spremenjene vrednosti treh lastnosti:

paket com.devsphere.articles.calltag; javni razred TestBean {private String text; zasebna int številka; zasebna logična logika; javni TestBean () {text = ""; število = 0; logika = napačno; } javni String getText () {vrnitev besedila; } javna void setText (besedilo v nizu) {this.text = text; } public int getNumber () {povratna številka; } public void setNumber (int number) {this.number = število; } public boolean getLogic () {return logika; } public void setLogic (logična logika) {this.logic = logic; } public String testMethod (besedilo niza, int številka, logična logika) setText (getText () + besedilo); setNumber (getNumber () + število); setLogic (getLogic ()} 

Razred TestFunction

Ker JSP 2.0 EL omogoča samo klice statičnih metod, TestBeanje testMethod () mora biti zavit v statično metodo. The TestFunction class ponuja tak statični ovoj, ki ima enake parametre kot metoda bean in objekt bean, katerega metoda mora biti poklicana:

paket com.devsphere.articles.calltag; javni razred TestFunction {javni statični niz testMethod (objekt TestBean, besedilo niza, int številka, logična logika) {return object.testMethod (besedilo, številka, logika); }} 

Sestavljeno TestFunction.class datoteko je treba dati skupaj z TestBean.class v spletno aplikacijo / WEB-INF / razredi imenik. Kot drugo datoteko lahko dve datoteki razredov zapakirate v datoteko jar in shranite v / WEB-INF / lib.

JSP TestFunction

Pred klicem testMethod () funkcija, TestFunction.jsp stran mora vsebovati predpono funkcije in enotni identifikator vira (URI) knjižnice:

The tag ustvari primerek datoteke TestBean razred:

The testMethod () funkcija se pokliče dvakrat. Prvi klic dobi nekaj konstantnih parametrov, drugi klic pa kot lastnosti parametrov:

  $ {tf: testMethod (obj, "abc", 123, true)} 
$ {tf: testMethod (obj, obj.text, obj.number, obj.logic)}

The TestFunction.jsp stran ustvari naslednji HTML izhod:

  abc 123 res 
abcabc 246 res

TLD TestFunction

Kot smo že omenili, je treba funkcijo JSP prijaviti v deskriptorju knjižnice oznak. The TestFunction.tld datoteka določa številko različice, tf kratko ime, uporabljeno na straneh JSP kot predpona za testMethod (), URI knjižnice, ime funkcije, ime razreda, ki vsebuje statično metodo, in podpis metode. URI-ju ni treba kazati na obstoječi spletni vir, vendar mora biti enoličen. Ne smete uporabljati istega URI-ja za dve različni knjižnici oznak.

Tukaj je TestFunction.tld vsebina datoteke:

  1.0 tf //devsphere.com/articles/calltag/TestFunction.tld testMethod com.devsphere.articles.calltag.TestFunction java.lang.String testMethod (com.devsphere.articles.calltag.TestBean, java.lang.String, int, logično) 

The TestFunction.tld Datoteka mora biti nameščena v spletni aplikaciji / WEB-INF imenik. Isti imenik vsebuje tudi web.xml deskriptor aplikacije, ki razglasi knjižnico v element. URI, ki identificira knjižnico na straneh JSP, in lokacijo datoteke TLD sta določena v dveh ločenih elementih XML, in :

  //devsphere.com/articles/calltag/TestFunction.tld /WEB-INF/TestFunction.tld 

Uporabite oznake po meri

Knjižnice oznak je predstavil JSP 1.1, ki je opredelil Oznaka in BodyTag vmesniki. Dodan JSP 1.2 IterationTag in podporo za lovljenje izjem. Ti vmesniki imajo metode obdelave, kot so doStartTag (), doInitBody (), doAfterBody (), in doEndTag (). Ko enkrat razumete, kako je treba te metode izvajati, je enostavno zgraditi knjižnice oznak. Vendar pa so mnogi razvijalci menili, da je mehanizem za upravljanje oznak JSP 1.x nepotrebno zapleten.

JSP 2.0 je predstavil precej preprostejši protokol za upravljanje oznak. Če podaljšate SimpleTagSupport razred, morate samo implementirati doTag () metoda za obdelavo oznake JSP.

Razred TestMethodTag

The TestMethodTag.jsp strani pokliče testMethod () Metoda JavaBean z uporabo naslednje sintakse:

Ko aplikacijski strežnik prevede stran JSP v strežniški programček, se zgornja oznaka nadomesti s fragmentom kode Java, ki pokliče metode TestMethodTag primerek, ustvarjen za obdelavo oznake.

Obdelovalec oznak razširja API-je JSP 2.0 SimpleTagSupport razred in za vsak atribut definira eno polje. Ta polja bodo ohranila vrednosti atributov oznak:

paket com.devsphere.articles.calltag; uvoz javax.servlet.jsp.JspException; uvoz javax.servlet.jsp.JspWriter; uvoz javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; javni razred TestMethodTag razširi SimpleTagSupport {zasebni objekt TestBean; besedilo zasebnega niza; zasebna int številka; zasebna logična logika; 

Za vsak atribut oznake mora obstajati nastavljena metoda, ki dobi vrednost atributa in jo shrani v polje, tako da jo lahko obdelovalec oznak uporabi pozneje:

 javna praznina setObject (objekt TestBean) {this.object = object; } javna void setText (besedilo v nizu) {this.text = text; } public void setNumber (int number) {this.number = število; } public void setLogic (logična logika) {this.logic = logic; } 

Po nastavitvi atributov obdelovalca oznak fragment Java (ki izhaja iz oznake JSP) prikliče doTag () metoda, ki prikliče bean metodo. The doTag () metoda natisne vrednost niza, ki jo vrne testMethod (). Zato izhod JSP vsebuje vrnjeno vrednost:

 public void doTag () vrže JspException, IOException {String ret = object.testMethod (besedilo, številka, logika); JspWriter out = getJspContext (). GetOut (); out.println (ret); }} 

Razred TestMethodTag2

Recimo, da želite uporabiti vrednost, ki jo vrne metoda bean v JSP. Na primer, morda ga boste morali prenesti kot vrednost atributa drugi oznaki. Ali pa boste morda želeli nadzirati njegov izhod na strani JSP:

 ... $ {ret} ... 
$config[zx-auto] not found$config[zx-overlay] not found