Programavimas

Kas yra JSP? Įvadas į „JavaServer“ puslapius

„JavaServer Pages“ (JSP) yra „Java“ standartinė technologija, leidžianti rašyti dinamiškus, duomenimis pagrįstus puslapius savo „Java“ žiniatinklio programoms. JSP sukurtas ant „Java Servlet“ specifikacijos. Šios dvi technologijos paprastai veikia kartu, ypač senesnėse „Java“ žiniatinklio programose. Žvelgiant iš kodavimo perspektyvos, akivaizdžiausias skirtumas tarp jų yra tas, kad naudodami servletus rašote „Java“ kodą ir tada į tą kodą įterpiate kliento pusės žymėjimą (pvz., HTML), o naudodami „JSP“ - pradedate nuo kliento pusės scenarijaus ar žymėjimo, tada įdėkite JSP žymos, kad jūsų puslapis būtų prijungtas prie „Java“ programos.

JSP taip pat yra glaudžiai susijęs su „JSF“ („JavaServer Faces“), „Java“ specifikacija, skirta kurti MVC (model-view-controller) žiniatinklio programas. JSP yra palyginti paprastesnė ir senesnė technologija nei JSF, kuri yra „Java“ žiniatinklio sistemų, tokių kaip „Eclipse Mojarra“, „MyFaces“ ir „PrimeFaces“, standartas. Nors neretai JSP naudojamas kaip senesnių JSF programų sąsaja, „Facelets“ yra pageidaujama šiuolaikinio JSF diegimo vaizdo technologija.

Nors JSP gali būti ne pirmas pasirinkimas kuriant dinamiškus tinklalapius, tai yra pagrindinė „Java“ interneto technologija. JSP puslapiai yra gana greitai ir lengvai kuriami, be to, jie sklandžiai sąveikauja su „Java“ servletais servetėlių talpykloje, tokioje kaip „Tomcat“. Su JSP susidursite senesnėse „Java“ žiniatinklio programose ir laikas nuo laiko gali būti naudinga kuriant paprastus, dinamiškus „Java“ tinklalapius. Kaip „Java“ kūrėjas, turėtumėte bent jau būti susipažinęs su JSP.

Šis straipsnis bus greitas „JavaServer Pages“, įskaitant „JSP Standard Tag Library“ (JSTL), įvadas. Pavyzdžiai rodo, kaip parašyti paprastą HTML puslapį, įdėti JSP žymas, kad būtų galima prisijungti prie „Java“ servleto, ir paleisti puslapį servleto sudėtiniame rodinyje.

Peržiūrėkite ankstesnius šios serijos straipsnius, kad sužinotumėte daugiau apie „Java“ servletus ir „JavaServer Faces“.

JSP Džakartoje EE

Išleidus „Java EE 8“, „Oracle“ perkėlė „Java Enterprise Edition“ („Java EE“) valdymą į „Eclipse Foundation“. Ateityje „Java“ įmonės platforma buvo pakeista į „Jakarta EE“. Kartu su „Java Servlet“ ir „JSF“ specifikacijomis, JSP yra viena iš „Java“ žiniatinklio technologijų, įtrauktų į nuolatinį palaikymą ir atnaujinimus Džakarta EE.

Rašyti JSP puslapius

Paprastą JSP puslapį (.jsp) sudaro HTML žymėjimas, įdėtas su JSP žymomis. Kai failas apdorojamas serveryje, HTML pateikiamas kaip programos rodinys, tinklalapis. Įterptosios JSP žymos bus naudojamos serverio kodui ir duomenims iškviesti. 1 paveiksle pateiktoje diagramoje parodoma HTML, JSP ir žiniatinklio programų serverio sąveika.

Matthew Tysonas

1 sąraše rodomas paprastas JSP puslapis.

Sąrašas 1. Paprastas JSP puslapis

$ {2 * 2} turėtų būti lygus 4

1 sąraše matote HTML bloką, kuriame yra JSP išraiška, kuri yra „Java“ serverio instrukcija, parašyta naudojant „Expression Language“ (EL) kalbą. Posakyje „${2 * 2}","${}"yra JSP sintaksė kodui interpoliuoti į HTML. Kai jis bus vykdomas, JSP pateiks rezultatus, vykdant viską, kas yra išraiškoje. Tokiu atveju išvestis bus skaičius 4.

JSP servleto indelyje

JSP puslapiai turi būti išdėstyti „Java“ servleto talpykloje. Norėdami įdiegti „Java“ žiniatinklio programą, pagrįstą JSP ir servletais, supakuosite .jsp failus, „Java“ kodą ir programos metaduomenis į .war failą, kuris yra paprastas .zip failas, turintis įprastą žiniatinklio programų struktūrą.

Įkėlę JSP į savo servleto konteinerį, jis bus sukompiliuotas į servletą. JSP ir „Java“ servletai turi panašias savybes, įskaitant galimybę pasiekti užklausos objektus ir atsakyti į juos. „Apache Tomcat 9x“ yra nuoroda į „Servlet 4.0“ ir „JSP 2.3“ specifikacijų įgyvendinimą. (Atkreipkite dėmesį, kad atnaujinimai tarp JSP 2.2 ir 2.3 yra palyginti nedideli.)

„Servlet“ sudėtinis rodinys ir programų serveris

„Java“ pasaulyje a servletų indas, dar vadinamas žiniatinklio serveriu, yra tarsi paprastoji (alaus) programų serverio versija. „Servlet“ sudėtinis rodinys tvarko užklausų ir atsakymų sąveiką ir leidžia šioms sąveikoms sąveikauti su „Java“ įmonės galimybių pogrupiu žiniatinklio programoms. „Java“ programų serveryje yra servleto sudėtinis rodinys, kuris yra viso „Java“ įmonės rietuvės dalis, įskaitant EJB, JPA, JMS ir kt.

JSP programos pavyzdys

Norėdami pradėti naudotis „JavaServer Pages“, naudosime programos „Tomcat“ pavyzdį. Jei dar neturite įdiegę „Tomcat“, naršykite „Tomcat“ atsisiuntimo puslapį ir pasirinkite savo operacinei sistemai skirtą „Tomcat“ diegimą. Šiuo metu „Tomcat 9“ yra dabartinis leidimas, suderinamas su „Servlet 4.0“ ir „JSP 2.3“.

Galite įdiegti „Tomcat“ kaip „Windows“ paslaugą arba paleisti ją iš komandinės eilutės naudodami /bin/catalina.sh pradžia arba /bin/catalina.bat. Bet kuriuo atveju paleiskite „Tomcat“, tada eikite į vietinis šeimininkas: 8080 norėdami pamatyti „Tomcat“ sveikinimo puslapį, parodytą 2 paveiksle.

Matthew Tysonas

Numanomi objektai „Tomcat“

„Tomcat“ sveikinimo puslapyje spustelėkite Pavyzdžiai nuorodą, tada spustelėkite JSP pavyzdžiai.

Tada atidarykite Numanomi objektai vykdomi interneto programa. 3 paveiksle parodyta šios programos išvestis. Skirkite minutę, kad ištirtumėte šį rezultatą.

Matthew Tysonas

Užklausos parametrai

Numanomi objektai yra įmontuoti objektai, pasiekiami per JSP puslapį. Kaip tinklalapio kūrėjas, naudosite šiuos objektus, kad sukurtumėte prieigą prie tokių dalykų kaip užklausos parametrai, kurie yra duomenys, persiųsti iš naršyklės išduodant HTTP užklausą. Apsvarstykite implicitinių objektų naršyklės URL:

 //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar 

Param ? foo = juosta, ir jūs galite pamatyti, kaip tai atsispindi tinklalapio išvestyje, kur lentelėje rodoma „EL Expression“, o vertė yra „bar“. Norėdami tai išbandyti, pakeiskite URL į //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, pataikė Įveskite, ir pamatysite, kad pokyčiai atsispindi išvestyje.

Šis pavyzdys yra labai paprastas įvadas, kaip naudoti JSP žymas norint pasiekti serverio pusės užklausos parametrus. Tokiu atveju JSP puslapyje naudojamas įmontuotas (numanomas) objektas, vadinamas param norėdami pasiekti žiniatinklio programos užklausos parametrus. param objektas yra JSP išraiškos sintaksėje, kurią matėte 1 sąraše.

Šiame pavyzdyje matematikai naudojome išraišką: ${2 * 2}, kuri išvestis 4.

Šiame pavyzdyje išraiška naudojama norint pasiekti objekto objektą ir lauką: $ {param.foo}.

JSP žiniatinklio programoje

Netiesioginių objektų puslapyje spustelėkite rodyklę atgal, po to - Šaltinis nuoroda. Tai nukreips jus į „Implicit Objects“ žiniatinklio programos JSP kodą, kuris rodomas 2 sąraše.

Sąrašas 2. JSP kodas „Implicit Objects“ žiniatinklio programai

     JSP 2.0 išraiškos kalba - implicitiniai objektai 
Šis pavyzdys iliustruoja kai kuriuos netiesioginius objektus, galimus išraiškos kalboje. Galimi šie numanomi objektai (ne visi čia pavaizduoti):
  • pageContext - objektas PageContext
  • pageScope - žemėlapis, kuriame pateikiami puslapių atributų pavadinimai pagal jų vertes
  • requestScope - žemėlapis, kuriame pateikiamos užklausos apimties atributų pavadinimai pagal jų vertes
  • sessionScope - žemėlapis, kuriame pateikiami seanso apimties atributų pavadinimai pagal jų vertes
  • „applicationScope“ - žemėlapis, kuriame pateikiami taikomųjų programų atributų pavadinimai pagal jų vertes
  • param - žemėlapis, kuriame parametrų pavadinimai susiejami su viena eilutės parametro reikšme
  • paramValues ​​- žemėlapis, kuriame parametrų pavadinimai susiejami su visų to parametro reikšmių eilute []
  • antraštė - žemėlapis, kuriame antraštės pavadinimai susiejami su viena eilutės antraštės verte
  • headerValues ​​- žemėlapis, kuris antraštės pavadinimus susieja su visų tos antraštės reikšmių eilute []
  • „initParam“ - žemėlapis, kuriame žemėlapio konteksto inicijavimo parametrų pavadinimai pateikiami pagal jų eilutės parametro vertę
  • slapukas - žemėlapis, kuriame slapukų pavadinimai susiejami su vienu slapuko objektu.
Keisti parametrą foo =

EL ekspresijaRezultatas
\ $ {param.foo}$ {fn: escapeXml (param ["foo"])}
\ $ {param ["foo"]}$ {fn: escapeXml (param ["foo"])}
\ $ {header ["host"]}$ {fn: escapeXml (antraštė ["host"])}
\ $ {header ["accept"]}$ {fn: escapeXml (antraštė ["priimti"])}
\ $ {header ["user-agent"]}$ {fn: escapeXml (antraštė ["user-agent"])}

JSP funkcijos

Jei esate susipažinę su HTML, 2 sąrašas turėtų atrodyti gana gerai. Turite numatytą HTML elementai, po jų - ${ } JSP išraiškos sintaksė, įvesta sąraše 1. Tačiau atkreipkite dėmesį į vertė dėl param.foo: $ {fn: escapeXml (param ["foo"])} . „fn: escapeXML ()"yra JSP funkcija.

A JSP funkcija apima daugkartinio naudojimo funkciją. Šiuo atveju funkcionalumas yra išvengti XML. JSP siūlo daugybę funkcijų, be to, funkcijas galite susikurti patys. Norėdami naudoti funkciją, importuojate jos biblioteką į savo JSP puslapį, tada iškviečiate funkciją.

2 sąraše escapeXML funkcija įtraukta į eilutę:

Sintaksė yra gana aiški: ji importuoja reikalingas funkcijas ir priskiria joms priešdėlį (šiuo atveju „fn“), kurį galima naudoti visose tolesnėse išraiškose.

JSP standartinė žymų biblioteka (JSTL)

importas 2 skambučių sąraše taglib, kuris yra trumpas žymių bibliotekaarba (šiuo atveju) „JSP Standard Tag Library“ (JSTL). Žymų bibliotekos apibrėžia daugkartinius JSP funkcionalumo bitus. JSTL yra standartinė žymų biblioteka, kurioje yra taglibų rinkinys, pristatomas kartu su kiekviena servletu ir JSP diegimu, įskaitant „Tomcat“.

„Funkcijų“ biblioteka yra tik vienas iš taglibų, įtrauktų į JSTL. Kitas paplitęs taglibas yra šerdis biblioteka, kurią importuojate paskambinę:

Kaip ir „fn“, „c“ žymėjimas yra įprastas ir jį pamatysite daugelyje JSP puslapių.

Apsaugoti JSP puslapius

Pagrindinės bibliotekos žymos pavyzdys yra

kuris išleidžia žyma su XML jau pabėgo. Ši funkcija yra svarbi, nes turinio išleidimas tiesiai į tinklalapį per $ {kintamasis} atveria duris į scenarijaus injekcijas. Ši paprasta funkcija naudojama siekiant apsaugoti tinklalapius nuo tokių išpuolių.

Pagrindinėje bibliotekoje taip pat yra įvairių iteracijos ir srauto valdymo žymių (pvz., IF / ELSE tvarkymas).

JSTL žymenų klasifikacijos

Į JSTL yra penki žymų rinkiniai, kurių kiekvienas skirtas konkrečiai žiniatinklio programų funkcijų sričiai:

  • JSTL šerdis: logika ir vykdymo eiga; įprasta žyma: "c"
  • JSTL formatavimas: formatavimas (pvz., Datos) ir internacionalizavimas; įprasta žyma: "fmt".
  • JSTL SQL: Užklausos SQL duomenų bazėse nagrinėjimas (tai dažniausiai nerekomenduojama rodinio sluoksnyje); įprasta žyma: "kv".
  • JSTL XML: darbas su XML dokumentais; įprasta žyma: "x".
  • JSTL funkcijos: pirmiausia susidoroti su stygų manipuliacijomis; įprasta žyma: "fn".

Skambinimas taglibs JSP puslapiuose

Dabar, kai turite JSP pagrindų tvarkyklę, pakeiskime programos pavyzdį. Norėdami pradėti, „Tomcat“ diegime raskite „Implicit Object“ programą. Kelias yra: apache-tomcat-8.5.33 / webapps / pavyzdžiai / jsp / jsp2 / el.

Atidarykite šį failą ir suraskite funkcijos apima:

tiesiai po šia eilute pridėkite naują eilutę:

Paspauskite „Return“ ir pridėkite dar vieną naują eilutę:

Dabar perkraukite puslapį adresu //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

Turėtumėte matyti, kad jūsų naujiniai atsispindi išvestyje.