Programmering

Hva er JSP? Introduksjon til JavaServer-sider

JavaServer Pages (JSP) er en Java-standardteknologi som lar deg skrive dynamiske, datadrevne sider for Java-webapplikasjonene dine. JSP er bygget på toppen av Java Servlet-spesifikasjonen. De to teknologiene fungerer vanligvis sammen, spesielt i eldre Java-webapplikasjoner. Fra et kodingsperspektiv er den mest åpenbare forskjellen mellom dem at med servlets skriver du Java-kode og deretter legger inn klientsidesmarkering (som HTML) i den koden, mens du med JSP begynner med skriptet eller markeringen på klientsiden og deretter legger inn JSP-koder for å koble siden din til Java-backend.

JSP er også nært beslektet med JSF (JavaServer Faces), en Java-spesifikasjon for å bygge MVC (model-view-controller) webapplikasjoner. JSP er en relativt enklere og eldre teknologi enn JSF, som er standarden for Java-nettrammer som Eclipse Mojarra, MyFaces og PrimeFaces. Selv om det ikke er uvanlig å se JSP brukt som frontend for eldre JSF-applikasjoner, er Facelets den foretrukne visningsteknologien for moderne JSF-implementeringer.

Mens JSP kanskje ikke er ditt førstevalg for å bygge dynamiske websider, er det en kjerne Java-webteknologi. JSP-sider er relativt raske og enkle å bygge, og de samhandler sømløst med Java-servlets i en servlet-container som Tomcat. Du vil støte på JSP i eldre Java-webapplikasjoner, og fra tid til annen kan det være nyttig å bygge enkle, dynamiske Java-websider. Som Java-utvikler bør du i det minste være kjent med JSP.

Denne artikkelen vil være en rask introduksjon til JavaServer-sider, inkludert JSP Standard Tag Library (JSTL). Eksempler viser deg hvordan du skriver en enkel HTML-side, legger inn JSP-koder for å koble til en Java-servlet, og kjører siden i en servlet-beholder.

Se tidligere artikler i denne serien for å lære mer om Java-servlets og JavaServer Faces.

JSP i Jakarta EE

Etter utgivelsen av Java EE 8 flyttet Oracle forvaltningen av Java Enterprise Edition (Java EE) til Eclipse Foundation. Fremover har Java-virksomhetsplattformen blitt omdøpt som Jakarta EE. Sammen med Java Servlet og JSF-spesifikasjonene, er JSP en av Java-webteknologiene som er inkludert for kontinuerlig støtte og oppgraderinger i Jakarta EE.

Skriver JSP-sider

En enkel JSP-side (.jsp) består av HTML-markering innebygd med JSP-koder. Når filen er behandlet på serveren, blir HTML gjengitt som applikasjonsvisning, en webside. De innebygde JSP-kodene vil bli brukt til å ringe koden og dataene på serversiden. Diagrammet i figur 1 viser samspillet mellom HTML, JSP og webapplikasjonsserveren.

Matthew Tyson

Oppføring 1 viser en enkel JSP-side.

Oppføring 1. En enkel JSP-side

$ {2 * 2} skal være 4

I oppføring 1 ser du en blokk med HTML som inkluderer en JSP-uttrykk, som er en instruksjon til Java-serveren skrevet ved hjelp av Expression Language (EL). I uttrykket "${2 * 2}", den"${}"er JSP-syntaks for interpolering av kode i HTML. Når den kjøres, vil JSP sende ut resultatene av å utføre det som er inne i uttrykket. I dette tilfellet vil utdataene være tallet 4.

JSP i servletbeholderen

JSP-sider må distribueres i en Java-servletcontainer. For å distribuere et Java-webapplikasjon basert på JSP og servlets, pakker du .jsp-filer, Java-kode og applikasjonsmetadata i en .war-fil, som er en enkel .zip-fil med en konvensjonell struktur for webapplikasjoner.

Når du har lastet JSP i servletbeholderen din, blir den samlet til en servlet. JSP-er og Java-servlets har lignende egenskaper, inkludert muligheten til å få tilgang til og svare på forespørselsobjekter. Apache Tomcat 9x er referanseimplementeringen for spesifikasjonene Servlet 4.0 og JSP 2.3. (Merk at oppdateringer mellom JSP 2.2 og 2.3 er relativt små.)

Servlet container kontra applikasjonsserver

I Java-verdenen, a servletbeholder, også kjent som en webserver, er som en lite (øl) versjon av en applikasjonsserver. En servletcontainer håndterer forespørsel-og-svar-interaksjoner og lar disse interaksjonene grensesnitt med en delmengde av Java enterprise-muligheter for webapplikasjoner. En Java-applikasjonsserver inkluderer servletbeholderen som en del av hele Java enterprise stack, inkludert EJB, JPA, JMS og mer.

Eksempel på app for JSP

Vi bruker et eksempel på et program i Tomcat for å komme i gang med JavaServer Pages. Hvis du ikke allerede har Tomcat installert, blar du over til Tomcat-nedlastingssiden og velger Tomcat-installasjonen for operativsystemet ditt. I skrivende stund er Tomcat 9 den nåværende versjonen, kompatibel med Servlet 4.0 og JSP 2.3.

Du kan installere Tomcat som en Windows-tjeneste, eller kjøre den fra kommandolinjen med /bin/catalina.sh start eller / søppel / katalina.bat. Uansett, start Tomcat, og gå deretter til lokal vert: 8080 for å se Tomcat velkomstside vist i figur 2.

Matthew Tyson

Implisitte objekter i Tomcat

Klikk på på Tomcat velkomstside Eksempler kobling, og klikk deretter JSP eksempler.

Deretter åpner du Implisitte objekter utføres Webapplikasjon. Figur 3 viser utdata for denne applikasjonen. Ta deg tid til å studere denne produksjonen.

Matthew Tyson

Be om parametere

Implisitte objekter er innebygde objekter som er tilgjengelige via en JSP-side. Som utvikler av en webside vil du bruke disse objektene til å skape tilgang til ting som be om parametere, som er dataene som sendes fra nettleseren når du utsteder en HTTP-forespørsel. Vurder nettleserens URL for implisitte objekter:

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

Parameteren er ? foo = bar, og du kan se det gjenspeiles i utdataene på websiden, der tabellen viser "EL-uttrykk" og verdien er "bar". For å teste dette, endre URL til //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, truffet Tast inn, og du vil se endringen reflektert i utdataene.

Dette eksemplet er en veldig enkel introduksjon til å bruke JSP-koder for å få tilgang til forespørselsparametere på serversiden. I dette tilfellet bruker JSP-siden det innebygde (implisitte) objektet som heter param for å få tilgang til webapplikasjonens forespørselsparametere. De param objektet er tilgjengelig i JSP-uttrykk-syntaksen du så i Oppføring 1.

I det eksemplet brukte vi et uttrykk for å gjøre noe matematikk: ${2 * 2}, hvilken utgang 4.

I dette eksemplet brukes uttrykket for å få tilgang til et objekt og et felt på det objektet: $ {param.foo}.

JSP i en webapplikasjon

På siden Implisitte objekter klikker du på bakoverpilen, etterfulgt av Kilde lenke. Dette fører deg til JSP-koden for Implicit Objects-nettappen, som vises i Listing 2.

Oppføring 2. JSP-kode for Implicit Objects-nettappen

     JSP 2.0 uttrykk språk - implisitte objekter 
Dette eksemplet illustrerer noen av de implisitte objektene som er tilgjengelige i uttrykksspråket. Følgende implisitte objekter er tilgjengelige (ikke alle illustrert her):
  • pageContext - PageContext-objektet
  • pageScope - et kart som kartlegger attributtnavn på sidene til deres verdier
  • requestScope - et kart som tilordner attributtnavn på forespørsel, til deres verdier
  • sessionScope - et kart som tilordner attributtnavn for sesjonsomfang til verdiene
  • applicationScope - et kart som tilordner applikasjonsomfangede attributtnavn til deres verdier
  • param - et kart som tilordner parameternavn til en enkelt strengparameterverdi
  • paramValues ​​- et kart som tilordner parameternavn til en streng [] av alle verdier for den parameteren
  • header - et kart som tilordner headernavn til en enkelt streng-headerverdi
  • headerValues ​​- et kart som tilordner headernavn til en streng [] av alle verdier for den headeren
  • initParam - et kart som tilordner kontekstinitialiseringsparameternavn til deres strengparameterverdi
  • informasjonskapsel - et kart som kartlegger informasjonskapselnavn til et enkelt informasjonskapselobjekt.
Endre parameter foo =

EL-uttrykkResultat
\ $ {param.foo}$ {fn: escapeXml (param ["foo"])}
\ $ {param ["foo"]}$ {fn: escapeXml (param ["foo"])}
\ $ {header ["host"]}$ {fn: escapeXml (header ["host"])}
\ $ {header ["accept"]}$ {fn: escapeXml (header ["accept"])}
\ $ {header ["user-agent"]}$ {fn: escapeXml (header ["user-agent"])}

JSP-funksjoner

Hvis du er kjent med HTML, bør oppføring 2 se ganske kjent ut. Du har forventet HTML elementer, etterfulgt av ${ } JSP uttrykk syntaks introdusert i Listing 1. Men legg merke til verdi til param.foo: $ {fn: escapeXml (param ["foo"])} . "fn: escapeXML ()"er en JSP-funksjon.

EN JSP-funksjon innkapsler en del gjenbrukbare funksjoner. I dette tilfellet er funksjonaliteten å unnslippe XML. JSP tilbyr en rekke funksjoner, og du kan også lage funksjoner selv. For å bruke en funksjon, importerer du biblioteket til JSP-siden din, og ringer deretter til funksjonen.

I Listing 2, the escapeXML funksjonen er inkludert i linjen:

Syntaksen er ganske klar: den importerer de nødvendige funksjonene og tildeler dem et prefiks (i dette tilfellet "fn") som kan brukes i alle følgende uttrykk.

JSP Standard Tag Library (JSTL)

De import linje i Listing 2 samtaler taglib, som er forkortelse for tagbibliotek, eller (i dette tilfellet) JSP Standard Tag Library (JSTL). Tagbiblioteker definerer gjenbrukbare funksjoner for JSP. JSTL er standard tagbibliotek, som inneholder en samling taglibs som leveres med hver servlet og JSP-implementering, inkludert Tomcat.

"Funksjoner" -biblioteket er bare en av taglibsene som følger med JSTL. En annen vanlig taglib er kjerne bibliotek, som du importerer ved å ringe:

Som "fn" er "c" -betegnelsen konvensjonell, og du vil se den på de fleste JSP-sider.

Sikring av JSP-sider

Et eksempel på tag fra kjernebiblioteket er

som sender ut tag med XML allerede rømt. Denne funksjonen er viktig fordi du sender ut innhold direkte til en webside via $ {variabel} åpner døren for angrep på skriptinjeksjoner. Denne enkle funksjonen brukes til å beskytte nettsider mot slike angrep.

Kjernebiblioteket inneholder også forskjellige koder for iterasjon og flytkontroll (som IF / ELSE-håndtering).

JSTL tag klassifiseringer

Det er fem sett med koder inkludert i JSTL, hver designet for et bestemt område med funksjonalitet for webapplikasjoner:

  • JSTL-kjerne: Håndterer logikk og utførelsesflyt; konvensjonell tag: "c"
  • JSTL-formatering: Å håndtere formatering (som datoer) og internasjonalisering; konvensjonell tag: "fmt".
  • JSTL SQL: Å håndtere spørring om SQL-databaser (dette motvirkes vanligvis i visningslaget); konvensjonell tag: "kvm".
  • JSTL XML: Håndterer arbeid med XML-dokumenter; konvensjonell tag: "x".
  • JSTL-funksjoner: Håndterer primært med strengmanipulasjoner; konvensjonell tag: "fn".

Kaller taglibs på JSP-sider

Nå som du har grep om det grunnleggende om JSP, la oss gjøre en endring i eksempelapplikasjonen. For å starte, finn Implicit Object-appen i Tomcat-installasjonen. Stien er: apache-tomcat-8.5.33 / webapps / eksempler / jsp / jsp2 / el.

Åpne denne filen og finn funksjoner inkludere:

rett under denne linjen, legg til en ny linje:

Trykk på Retur og legg til en ny linje:

Last siden på nytt på //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

Du bør se oppdateringene dine gjenspeiles i utdataene.

$config[zx-auto] not found$config[zx-overlay] not found