JavaServer Pages (JSP) on Java-vakiotekniikka, jonka avulla voit kirjoittaa dynaamisia, dataohjattuja sivuja Java-verkkosovelluksiisi. JSP on rakennettu Java Servlet -määrityksen päälle. Nämä kaksi tekniikkaa toimivat tyypillisesti yhdessä, erityisesti vanhemmissa Java-verkkosovelluksissa. Koodauksen näkökulmasta ilmeisin ero niiden välillä on se, että servletien avulla kirjoitat Java-koodin ja upotat sitten asiakaspuolen merkinnät (kuten HTML) kyseiseen koodiin, kun taas JSP: n kanssa aloitat asiakaspuolen komentosarjalla tai merkinnällä ja upotat sitten JSP-tunnisteet yhdistää sivusi Java-taustajärjestelmään.
JSP liittyy läheisesti myös JSF: ään (JavaServer Faces), Java-spesifikaatioon MVC (model-view-controller) -sovellusten rakentamiseen. JSP on suhteellisen yksinkertaisempi ja vanhempi tekniikka kuin JSF, joka on standardi Java-verkkokehyksille, kuten Eclipse Mojarra, MyFaces ja PrimeFaces. Vaikka ei ole harvinaista nähdä JSP: tä käytetyksi käyttöliittymäksi vanhemmille JSF-sovelluksille, Facelets on ensisijainen katselutekniikka nykyaikaisille JSF-toteutuksille.
Vaikka JSP ei ehkä ole ensimmäinen valinta dynaamisten verkkosivujen luomisessa, se on Java-ydinteknologia. JSP-sivut ovat suhteellisen nopeita ja helppoja rakentaa, ja ne ovat saumattomasti Java-servletien kanssa servlet-säilössä, kuten Tomcat. Löydät JSP: n vanhemmissa Java-verkkosovelluksissa, ja joskus saatat löytää siitä hyödyllisen yksinkertaisten, dynaamisten Java-verkkosivujen rakentamiseen. Java-kehittäjänä sinun tulisi ainakin tuntea JSP.
Tämä artikkeli on nopea esittely JavaServer-sivuille, mukaan lukien JSP Standard Tag Library (JSTL). Esimerkit osoittavat, kuinka voit kirjoittaa yksinkertaisen HTML-sivun, upottaa JSP-tunnisteet yhteyden muodostamiseksi Java-servletiin ja ajaa sivu servlet-säilössä.
Tämän sarjan edellisistä artikkeleista saat lisätietoja Java-palvelinsovelluksista ja JavaServer-kasvoista.
JSP Jakartassa EE
Java EE 8: n julkaisun jälkeen Oracle siirsi Java Enterprise Editionin (Java EE) hallinnon Eclipse Foundationille. Jatkossa Java-yritysympäristö on nimetty uudelleen Jakarta EE: ksi. Java Servlet- ja JSF-määritysten lisäksi JSP on yksi Java-verkkoteknologioista, joka sisältyy jatkuvaan tukeen ja päivityksiin Jakarta EE: ssä.
JSP-sivujen kirjoittaminen
Yksinkertainen JSP-sivu (.jsp) koostuu HTML-merkinnöistä, jotka on upotettu JSP-tunnisteisiin. Kun tiedosto käsitellään palvelimella, HTML hahmonnetaan sovellusnäkymänä, verkkosivuna. Upotettuja JSP-tunnisteita käytetään palvelupuolen koodin ja datan soittamiseen. Kuvan 1 kaavio näyttää HTML: n, JSP: n ja verkkosovelluspalvelimen välisen vuorovaikutuksen.
Matthew TysonListaus 1 näyttää yksinkertaisen JSP-sivun.
Listaus 1. Yksinkertainen JSP-sivu
$ {2 * 2}: n on oltava 4
Luettelossa 1 näet HTML-lohkon, joka sisältää a JSP-lauseke, joka on Java-palvelimelle annettu ohje, joka on kirjoitettu Expression Language (EL) -kielellä. Lausekkeessa "${2 * 2}
","${}
"on JSP-syntaksi koodin interpoloimiseksi HTML: ksi. Suoritettuaan JSP tuottaa tulokset suorittamalla mitä tahansa lausekkeen sisällä. Tässä tapauksessa lähtö on numero 4.
JSP servlet-pakkauksessa
JSP-sivut on otettava käyttöön Java-servlet-säilössä. JSP: n ja palvelinsovelluksiin perustuvan Java-verkkosovelluksen asentamiseksi pakkaa .jsp-tiedostosi, Java-koodisi ja sovelluksen metatiedot .war-tiedostoon, joka on yksinkertainen .zip-tiedosto, jolla on tavanomainen rakenne verkkosovelluksille.
Kun olet ladannut JSP: n servlet-säilöön, se kootaan servlet-sovellukseksi. JSP: llä ja Java-palvelimilla on samanlaiset ominaisuudet, mukaan lukien mahdollisuus käyttää pyyntöobjekteja ja vastata niihin. Apache Tomcat 9x on Servlet 4.0- ja JSP 2.3 -määritysten viitetoteutus. (Huomaa, että päivitykset JSP 2.2: n ja 2.3: n välillä ovat suhteellisen vähäisiä.)
Servlet-kontti vs. sovelluspalvelin
Java-maailmassa a servlet-pakkaus, joka tunnetaan myös nimellä Web-palvelin, on kuin sovelluspalvelimen lite (beer) -versio. Servlet-säilö käsittelee pyyntö-vastaus-vuorovaikutuksia ja antaa näiden vuorovaikutusten olla yhteydessä Java-yritysominaisuuksien osajoukkoon verkkosovelluksia varten. Java-sovelluspalvelin sisältää servlet-säilön osana täydellistä Java-yrityspinoa, mukaan lukien EJB, JPA, JMS ja paljon muuta.
Esimerkkisovellus JSP: lle
Käytämme Tomcatin esimerkkisovellusta aloittaaksesi JavaServer Pagesin käytön. Jos sinulla ei vielä ole asennettuna Tomcatia, siirry Tomcatin lataussivulle ja valitse käyttöjärjestelmällesi tarkoitettu Tomcat-asennus. Tämän kirjoituksen jälkeen Tomcat 9 on nykyinen julkaisu, yhteensopiva Servlet 4.0: n ja JSP 2.3: n kanssa.
Voit asentaa Tomcatin Windows-palveluna tai suorittaa sen komentoriviltä /bin/catalina.sh alku
tai /bin/catalina.bat
. Joko niin, käynnistä Tomcat ja siirry sitten paikallinen isäntä: 8080
nähdäksesi kuvassa 2 esitetyn Tomcatin tervetulosivun.
Implisiittiset objektit Tomcatissa
Napsauta Tomcatin tervetulosivulla Esimerkkejä -linkkiä ja napsauta sitten JSP-esimerkkejä.
Avaa seuraavaksi Implisiittiset objektit suoritetaan verkkosovellus. Kuvassa 3 on esitetty tämän sovelluksen tulos. Ota minuutti tutkia tätä tulosta.
Matthew TysonPyydä parametreja
Implisiittiset objektit ovat sisäänrakennettuja objekteja, joihin pääsee JSP-sivun kautta. Verkkosivun kehittäjänä käytät näitä objekteja luodaksesi pääsyn esimerkiksi pyyntöparametrit, jotka ovat tietoja, jotka lähetetään selaimelta HTTP-pyyntöä lähetettäessä. Harkitse implisiittisten objektien selaimen URL-osoitetta:
//localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar
Parammi on ? foo = baari
, ja näet sen heijastuvan verkkosivun tulosteeseen, jossa taulukossa näkyy "EL-lauseke" ja arvo on "palkki". Voit testata tämän vaihtamalla URL-osoitteeksi //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, osui Tulla sisään, ja näet muutoksen heijastuvan tulokseen.
Tämä esimerkki on hyvin yksinkertainen esittely JSP-tunnisteiden käyttämisestä palvelinpuolen pyyntöparametrien käyttämiseen. Tässä tapauksessa JSP-sivu käyttää sisäänrakennettua (implisiittistä) objektia, jota kutsutaan param
päästäksesi verkkosovelluksen pyyntöparametreihin. param
objekti on käytettävissä luettelossa 1 näkemäsi JSP-lausekkeen syntaksissa.
Tässä esimerkissä käytimme lauseketta matematiikan tekemiseen: ${2 * 2}
, joka tuottaa 4
.
Tässä esimerkissä lauseketta käytetään objektin ja kentän käyttämiseen: $ {param.foo}
.
JSP verkkosovelluksessa
Napsauta implisiittisten objektien sivulla takanuolta ja sen jälkeen Lähde linkki. Tämä johtaa sinut Implicit Objects -verkkosovelluksen JSP-koodiin, joka näkyy luettelossa 2.
Luettelo 2. JSP-koodi Implicit Objects -verkkosovellukselle
JSP 2.0 -lausekekieli - implisiittiset objektit
Tämä esimerkki kuvaa joitain ilmaisukielessä käytettävissä olevia implisiittisiä objekteja. Seuraavia implisiittisiä objekteja on saatavana (kaikkia ei ole kuvattu tässä): - pageContext - PageContext-objekti
- pageScope - Kartta, joka kartoittaa sivuluokitellun määritteen nimet niiden arvoihin
- requestScope - Kartta, joka kartoittaa pyynnön kattavat määritteiden nimet niiden arvoihin
- sessionScope - kartta, joka kartoittaa istunnon laajuisten määritteiden nimet niiden arvoihin
- applicationScope - kartta, joka kartoittaa sovelluksen laajuisten määritteiden nimet niiden arvoihin
- param - Kartta, joka kartoittaa parametrien nimet yhteen String-parametriarvoon
- paramValues - kartta, joka yhdistää parametrinimet merkkijonoon [] kaikista kyseisen parametrin arvoista
- otsikko - kartta, joka yhdistää otsikkojen nimet yhteen merkkijonon otsikkoarvoon
- headerValues - kartta, joka yhdistää otsikkojen nimet merkkijonoon [] kaikista kyseisen otsikon arvoista
- initParam - kartta, joka kartoittaa kontekstin alustusparametrien nimet merkkijonoparametriarvoonsa
- eväste - kartta, joka kartoittaa evästeiden nimet yhteen evästeobjektiin.
Vaihda parametri foo =EL-lauseke Tulos \ $ {param.foo} $ {fn: escapeXml (param ["foo"])} \ $ {param ["foo"]} $ {fn: escapeXml (param ["foo"])}} \ $ {header ["host"]} $ {fn: escapeXml (otsikko ["isäntä"])} \ $ {header ["accept"]} $ {fn: escapeXml (otsikko ["hyväksy"])} \ $ {header ["user-agent"]} $ {fn: escapeXml (otsikko ["user-agent"])}
JSP-toiminnot
Jos olet perehtynyt HTML: ään, Listing 2: n pitäisi näyttää melko tutulta. Sinulla on odotettu HTML
elementit, joita seuraa ${ }
JSP-lausekkeen syntaksin käyttöönotto Listing 1: ssä. Huomaa kuitenkin arvo varten param.foo
:
. "$ {fn: escapeXml (param ["foo"])}} fn: paetaXML ()
"on JSP-toiminto.
A JSP-toiminto kapseloi osan uudelleenkäytettävistä toiminnoista. Tässä tapauksessa toiminto on välttää XML. JSP tarjoaa erilaisia toimintoja, ja voit myös luoda toimintoja itse. Voit käyttää toimintoa tuomalla sen kirjaston JSP-sivullesi ja kutsumalla sitten funktion.
Luettelossa 2 escapeXML
toiminto sisältyy riviin:
Syntaksi on melko selkeä: se tuo tarvittavat toiminnot ja antaa niille etuliitteen (tässä tapauksessa "fn"), jota voidaan käyttää kaikissa seuraavissa lausekkeissa.
JSP Standard Tag Library (JSTL) -tunnistekirjasto
tuonti
2 puhelua taglib
, joka on lyhenne sanoista tag-kirjastotai (tässä tapauksessa) JSP Standard Tag Library (JSTL). Tag-kirjastot määrittelevät JSP: n uudelleenkäytettävät toiminnallisuusbitit. JSTL on tavallinen tagikirjasto, joka sisältää kokoelman taglibejä, jotka toimitetaan jokaisen servlet-sovelluksen ja JSP-toteutuksen mukana, mukaan lukien Tomcat.
"Toiminnot" -kirjasto on vain yksi JSTL: n sisältämistä taglibeistä. Toinen yleinen taglib on ydin
kirjasto, jonka tuod soittamalla:
Kuten "fn", myös "c" -merkintä on tavanomainen, ja näet sen useimmilla JSP-sivuilla.
JSP-sivujen suojaaminen
Esimerkkitunniste ydinkirjastosta on
joka tuottaa XML-tunniste on jo poistunut. Tämä toiminto on tärkeä, koska sisällön lähettäminen suoraan verkkosivulle
$ {muuttuja}
avaa oven käsikirjoituksen hyökkäyksille. Tätä yksinkertaista toimintoa käytetään suojaamaan verkkosivuja tällaisilta hyökkäyksiltä.
Ydinkirjasto sisältää myös erilaisia tunnisteita iteroinnille ja virtauksen ohjaukselle (kuten IF / ELSE-käsittely).
JSTL-tunnusluokitukset
JSTL: ssä on viisi tunnistesarjaa, joista jokainen on suunniteltu tietylle verkkosovelluksen toiminnallisuuden alueelle:
- JSTL-ydin: logiikan ja toteutusvirran käsittely; tavanomainen tunniste: "
c
" - JSTL-muotoilu: muotoilun (kuten päivämäärät) ja kansainvälistymisen käsitteleminen; tavanomainen tunniste: "
fmt
". - JSTL SQL: SQL-tietokantojen kyselyjen käsitteleminen (tämä on yleensä suositeltavaa näkymäkerroksessa); tavanomainen tunniste: "
neliömetriä
". - JSTL XML: XML-dokumenttien käsittely; tavanomainen tunniste: "
x
". - JSTL-toiminnot: Käsitteleminen ensisijaisesti merkkijono-manipulaatioilla; tavanomainen tunniste: "
fn
".
Taglibien soittaminen JSP-sivuilla
Nyt kun sinulla on käsitys JSP-perusteista, tehkäämme muutos esimerkkisovellukseen. Aloita etsimällä Implicit Object -sovellus Tomcat-asennuksestasi. Polku on: apache-tomcat-8.5.33 / webapps / esimerkit / jsp / jsp2 / el
.
Avaa tämä tiedosto ja etsi toimintoja
sisältää:
Lisää heti tämän rivin alle uusi rivi:
Paina Return ja lisää uusi rivi:
Lataa sivu uudelleen osoitteessa //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.
Sinun pitäisi nähdä päivityksesi heijastuvan tulosteeseen.