Ohjelmointi

Mikä on JSP? Johdanto JavaServer-sivuihin

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 Tyson

Listaus 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.

Matthew Tyson

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 Tyson

Pyydä 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-lausekeTulos
\ $ {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.