Programmering

Hvad er JSP? Introduktion til JavaServer-sider

JavaServer Pages (JSP) er en Java-standardteknologi, der giver dig mulighed for at skrive dynamiske, datadrevne sider til dine Java-webapplikationer. JSP er bygget oven på Java Servlet-specifikationen. De to teknologier arbejder typisk sammen, især i ældre Java-webapplikationer. Fra et kodningsperspektiv er den mest åbenlyse forskel mellem dem, at du med servlets skriver Java-kode og derefter integrerer klientsidesmarkering (som HTML) i den kode, mens du med JSP starter med klientsidescriptet eller markeringen og derefter integrerer JSP-tags for at forbinde din side til Java-backend.

JSP er også tæt knyttet til JSF (JavaServer Faces), en Java-specifikation til opbygning af MVC (model-view-controller) webapplikationer. JSP er en relativt enklere og ældre teknologi end JSF, som er standarden for Java-webrammer som Eclipse Mojarra, MyFaces og PrimeFaces. Selvom det ikke er ualmindeligt at se JSP bruges som frontend til ældre JSF-applikationer, er Facelets den foretrukne visningsteknologi til moderne JSF-implementeringer.

Mens JSP muligvis ikke er dit første valg til opbygning af dynamiske websider, er det en kerne Java-webteknologi. JSP-sider er relativt hurtige og nemme at opbygge, og de interagerer problemfrit med Java-servlets i en servletcontainer som Tomcat. Du vil støde på JSP i ældre Java-webapplikationer, og fra tid til anden kan du finde det nyttigt til opbygning af enkle, dynamiske Java-websider. Som Java-udvikler skal du i det mindste være fortrolig med JSP.

Denne artikel vil være en hurtig introduktion til JavaServer-sider, inklusive JSP Standard Tag Library (JSTL). Eksempler viser dig, hvordan du skriver en simpel HTML-side, integrerer JSP-tags for at oprette forbindelse til en Java-servlet og køre siden i en servlet-container.

Se tidligere artikler i denne serie for at lære mere om Java-servlets og JavaServer Faces.

JSP i Jakarta EE

Efter frigivelsen af ​​Java EE 8 flyttede Oracle forvaltningen af ​​Java Enterprise Edition (Java EE) til Eclipse Foundation. Fremadrettet er Java-virksomhedsplatformen omdøbt til Jakarta EE. Sammen med Java Servlet- og JSF-specifikationerne er JSP en af ​​de Java-webteknologier, der er inkluderet til løbende support og opgraderinger i Jakarta EE.

Skrivning af JSP-sider

En simpel JSP-side (.jsp) består af HTML-markering indlejret med JSP-tags. Når filen behandles på serveren, gengives HTML-en som applikationsvisningen, en webside. De indlejrede JSP-tags vil blive brugt til at kalde serversiden på kode og data. Diagrammet i figur 1 viser interaktionen mellem HTML, JSP og webapplikationsserveren.

Matthew Tyson

Liste 1 viser en simpel JSP-side.

Notering 1. En simpel JSP-side

$ {2 * 2} skal være lig med 4

I lister 1 ser du en HTML-blok, der inkluderer en JSP-udtryk, som er en instruktion til Java-serveren skrevet ved hjælp af Expression Language (EL). I udtrykket "${2 * 2}", det "${}"er JSP-syntaks til interpolering af kode i HTML. Når den udføres, udsender JSP resultaterne af udførelsen af ​​det, der er inde i udtrykket. I dette tilfælde vil output være tallet 4.

JSP i servletbeholderen

JSP-sider skal indsættes i en Java-servletcontainer. For at implementere en Java-webapplikation baseret på JSP og servlets pakker du dine .jsp-filer, Java-kode og applikationsmetadata i en .war-fil, som er en simpel .zip-fil med en konventionel struktur til webapplikationer.

Når du har indlæst JSP i din servletbeholder, bliver den samlet til en servlet. JSP'er og Java-servlets deler lignende egenskaber, herunder muligheden for at få adgang til og svare på anmodningsobjekter. Apache Tomcat 9x er referenceimplementeringen til Servlet 4.0 og JSP 2.3-specifikationerne. (Bemærk, at opdateringer mellem JSP 2.2 og 2.3 er relativt små.)

Servlet container kontra applikationsserver

I Java-verdenen er en servletbeholder, også kendt som en webserver, er som en lite (øl) version af en applikationsserver. En servletcontainer håndterer anmodninger og svar-interaktioner og giver disse interaktioner mulighed for at grænseflade med et undersæt af Java-virksomhedsfunktioner til webapplikationer. En Java-applikationsserver inkluderer servletcontaineren som en del af den fulde Java-enterprise-stak, inklusive EJB, JPA, JMS og mere.

Eksempel på app til JSP

Vi bruger et eksempel på et program i Tomcat for at komme i gang med JavaServer Pages. Hvis du ikke allerede har Tomcat installeret, skal du gå over til Tomcat-download-siden og vælge Tomcat-installationen til dit operativsystem. I skrivende stund er Tomcat 9 den aktuelle udgivelse, kompatibel med Servlet 4.0 og JSP 2.3.

Du kan installere Tomcat som en Windows-tjeneste eller køre den fra kommandolinjen med /bin/catalina.sh start eller / bin / katalina.bat. Uanset hvad skal du starte Tomcat og derefter gå til lokal vært: 8080 for at se Tomcat-velkomstsiden vist i figur 2.

Matthew Tyson

Implicitte objekter i Tomcat

Klik på Tomcat-velkomstsiden Eksempler link, og klik derefter på JSP eksempler.

Åbn derefter Implicitte objekter udføres webapplikation. Figur 3 viser output til denne applikation. Brug et øjeblik på at undersøge dette output.

Matthew Tyson

Anmodningsparametre

Implicitte objekter er indbyggede objekter tilgængelige via en JSP-side. Som websideudvikler bruger du disse objekter til at skabe adgang til ting som f.eks anmodningsparametre, som er de data, der sendes fra browseren, når der udstedes en HTTP-anmodning. Overvej browser-URL'en til implicitte objekter:

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

Parameteren er ? foo = bar, og du kan se det afspejles i output på websiden, hvor tabellen viser "EL-udtryk", og værdien er "bar". For at teste dette skal du ændre URL'en til //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, hit Gå ind, og du vil se ændringen afspejlet i output.

Dette eksempel er en meget enkel introduktion til brug af JSP-tags til at få adgang til parametre på serversiden. I dette tilfælde bruger JSP-siden det indbyggede (implicitte) objekt, der kaldes param for at få adgang til webapplikationens anmodningsparametre. Det param objekt er tilgængeligt inden for JSP-udtrykssyntaks, som du så i liste 1.

I dette eksempel brugte vi et udtryk til at lave matematik: ${2 * 2}, hvilket output 4.

I dette eksempel bruges udtrykket til at få adgang til et objekt og et felt på det objekt: $ {param.foo}.

JSP i en webapplikation

Klik på tilbage-pilen på siden Implicitte objekter efterfulgt af Kilde link. Dette fører dig til JSP-koden til Implicit Objects-webappen, som er vist i liste 2.

Liste 2. JSP-kode til Implicit Objects-webappen

     JSP 2.0 udtrykssprog - implicitte objekter 
Dette eksempel illustrerer nogle af de implicitte objekter, der er tilgængelige på ekspressionssprog. Følgende implicitte objekter er tilgængelige (ikke alle illustreret her):
  • pageContext - PageContext-objektet
  • pageScope - et kort, der tilordner sideafgrænsede attributnavne til deres værdier
  • requestScope - et kort, der kortlægger attributnavne med anmodningsomfang til deres værdier
  • sessionScope - et kort, der kortlægger session-scoped attributnavne til deres værdier
  • applicationScope - et kort, der kortlægger applikationsomfangede attributnavne til deres værdier
  • param - et kort, der kortlægger parameternavne til en enkelt strengparameterværdi
  • paramValues ​​- et kort, der kortlægger parameternavne til en streng [] af alle værdier for den pågældende parameter
  • header - et kort, der kortlægger headernavne til en enkelt streng-header-værdi
  • headerValues ​​- et kort, der kortlægger headernavne til en streng [] af alle værdier for den header
  • initParam - et kort, der kortlægger parameternavne til kontekstinitialisering til deres strengparameterværdi
  • cookie - et kort, der kortlægger cookienavne til et enkelt cookie-objekt.
Skift parameter foo =

EL-ekspressionResultat
\ $ {param.foo}$ {fn: escapeXml (param ["foo"])}
\ $ {param ["foo"]}$ {fn: escapeXml (param ["foo"])}
\ $ {header ["vært"]}$ {fn: escapeXml (overskrift ["vært"])}
\ $ {header ["accept"]}$ {fn: escapeXml (overskrift ["accept"])}
\ $ {header ["user-agent"]}$ {fn: escapeXml (overskrift ["bruger-agent"])}

JSP-funktioner

Hvis du er fortrolig med HTML, skal Listing 2 se ret velkendt ud. Du har den forventede HTML elementer efterfulgt af ${ } JSP-udtrykssyntaks introduceret i lister 1. Men bemærk værdi til param.foo: $ {fn: escapeXml (param ["foo"])} . Det "fn: escapeXML ()"er en JSP-funktion.

EN JSP-funktion indkapsler en del af genanvendelig funktionalitet. I dette tilfælde er funktionaliteten at undslippe XML. JSP tilbyder en række funktioner, og du kan også oprette funktioner selv. For at bruge en funktion skal du importere dens bibliotek til din JSP-side og derefter ringe til funktionen.

I lister 2 er escapeXML funktion er inkluderet i linjen:

Syntaksen er ret klar: den importerer de nødvendige funktioner og tildeler dem et præfiks (i dette tilfælde "fn"), der kan bruges i alle følgende udtryk.

JSP Standard Tag Library (JSTL)

Det importere linje i Liste 2 opkald taglib, som er en forkortelse for tagbibliotek, eller (i dette tilfælde) JSP Standard Tag Library (JSTL). Tagbiblioteker definerer genanvendelige bits funktionalitet til JSP. JSTL er standard tagbiblioteket, der indeholder en samling taglibs, der leveres med hver servlet og JSP-implementering, inklusive Tomcat.

Biblioteket "funktioner" er blot et af de taglibs, der følger med JSTL. En anden almindelig taglib er kerne bibliotek, som du importerer ved at ringe til:

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

Sikring af JSP-sider

Et eksempelmærke fra kernebiblioteket er

som udgange tag med XML allerede undsluppet. Denne funktion er vigtig, fordi du udsender indhold direkte til en webside via $ {variabel} åbner døren til angreb på scriptinjektion. Denne enkle funktion bruges til at beskytte websider mod sådanne angreb.

Kernebiblioteket indeholder også forskellige tags til iteration og flowkontrol (som IF / ELSE-håndtering).

JSTL-tag klassifikationer

Der er fem sæt tags inkluderet i JSTL, hver designet til et specifikt område af webapplikationsfunktionalitet:

  • JSTL-kerne: Håndtering af logik og eksekveringsflow; konventionelt tag: "c"
  • JSTL-formatering: Beskæftiger sig med formatering (som datoer) og internationalisering; konventionelt tag: "fmt".
  • JSTL SQL: Håndtering af forespørgsler om SQL-databaser (dette frarådes normalt i visningslaget); konventionelt tag: "kvm".
  • JSTL XML: Beskæftiger sig med arbejde med XML-dokumenter; konventionelt tag: "x".
  • JSTL-funktioner: Beskæftiger sig primært med strengmanipulationer; konventionelt tag: "fn".

Opkald til taglibs på JSP-sider

Nu hvor du har et håndtag om JSP-basics, lad os foretage en ændring af eksempelapplikationen. For at starte skal du finde appen Implicit Object i din Tomcat-installation. Stien er: apache-tomcat-8.5.33 / webapps / eksempler / jsp / jsp2 / el.

Åbn denne fil, og find den funktioner omfatte:

lige under denne linje skal du tilføje en ny linje:

Hit Retur og tilføj en ny linje:

Genindlæs nu siden på //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

Du bør se dine opdateringer afspejlet i output.

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