Vejledning til JavaServer-sider (JSP)

Indholdsfortegnelse

  • 1. Oversigt
  • 2. JavaServer-sider
  • 2.1. JSP syntaks
  • 2.2. Statisk og dynamisk indhold
  • 2.3. Implicitte objekter
  • 2.4. Andre implicitte objekter
  • 2.5. Direktiver
  • 2.6. Side direktiver
  • 3.0. Tre eksempler
  • 3.1. HTML gengivet i Servlet
  • 3.2. Java i et JSP-statisk indhold
  • 3.3. JSP med videresendelse
  • 3.4. Prøve det!
  • 4. Konklusion

1. Oversigt

JavaServer Pages (JSP) tillader det dynamisk indholdsindsprøjtning i statisk indhold ved hjælp af Java og Java Servlets. Vi kan stille anmodninger til en Java Servlet, udfør relevant logik, og gengiv en bestemt visningsserver-side, der skal forbruges på klientsiden. Denne artikel giver en grundig oversigt over JavaServer-sider ved hjælp af Java 8 og Jave 7 EE.

Vi starter med at udforske et par nøglebegreber, der er relevante for JSP: nemlig forskellen mellem dynamisk og statisk indhold, JSP-livscyklus og JSP-syntaks samt direktiver og de implicitte objekter, der oprettes ved kompilering!

2. JavaServer-sider

JavaServer Pages (JSP) aktiverede Java-specifikke data, der skulle sendes til eller placeres i en .jsp-visning og forbruges på klientsiden.

JSP-filer er i det væsentlige .html-filer med lidt ekstra syntaks og et par mindre indledende forskelle:

  1. det .html suffikset erstattes med .jsp (det betragtes som en .jsp filtype) og
  2. følgende tag tilføjes øverst på .html-markeringselementerne:

Lad os gå over nogle af nøglebegreberne i JSP.

2.1. JSP syntaks

Der er to måder at tilføje Java-kode til en .jsp. For det første kan vi bruge grundlæggende Java Scriptlet-syntaks, som involverer placering af Java-kodeblokke inden for to Scriptlet-tags:

<% Java code here %>

Den anden metode er specifik for XML:

 Java-kode her 

Det er vigtigt, at man kan bruge betinget logisk klientside med JSP ved at bruge hvis, derefterog andet klausuler og derefter indpakke de relevante markeringsblokke med disse parenteser.

 Doodad! 

Hej!

For eksempel hvis doodad er sandt, vi vil vise den første, div element ellers viser vi det andet, s element!

2.2. Statisk og Dynamisk Indhold

Statisk webindhold er anlægsaktiver, der forbruges uafhængigt af RESTful, SOAP, HTTP, HTTPS-anmodninger eller andre brugerindleverede oplysninger.

Statisk indhold er dog fast og ændres ikke af brugerinput. Dynamisk webindhold er de aktiver, der reagerer på, ændres af eller ændres i lyset af brugerhandlinger eller information!

JSP-teknologi muliggør en ren adskillelse af ansvarsområder mellem dynamisk og statisk indhold.

Serveren (servlet) administrerer dynamisk indholdet, og klienten (den aktuelle .jsp-side) er statisk kontekst, hvori dynamisk indhold injiceres.

Lad os se på implicitte objekter der er oprettet af JSP og som giver dig adgang til JSP-relevant dataserver-side!

2.3. Implicitte objekter

Implicitte objekter genereres automatisk af JSP-motoren under samling.

Implicitte objekter inkluderer HttpForespørgsel og HttpResponse objekter og eksponere forskellige serverfunktioner til brug i din servlet og til at interagere med din .jsp! Her er listen over implicitte objekter der er oprettet:

anmodning

anmodning tilhører klassen javax.servlet.http.HttpServletRequest. Det anmodning objekt eksponerer alle brugerinputdata og gør det tilgængeligt på serversiden.

respons

respons tilhører klassen javax.servlet.http.HttpServletResponse og bestemmer, hvad der sendes tilbage klientsiden efter en anmodning er lavet.

Lad os se nærmere på anmodning og respons implicitte objekter, da de er de vigtigste og mest anvendte.

Eksemplet nedenfor viser en meget enkel, ufuldstændig servletmetode til håndtering af GET-anmodninger. Jeg har udeladt de fleste detaljer, så vi kan fokusere på, hvordan vi bruger anmodning og respons genstande:

beskyttet ugyldigt doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster ServletException, IOException {String besked = request.getParameter ("besked"); respons.setContentType ("tekst / html"); . . . }

Først ser vi, at anmodning og respons objekter overføres som parametre til metoden, der gør dem tilgængelige inden for dets anvendelsesområde.

Vi kan få adgang til anmodningsparametre ved hjælp af .getParameter () fungere. Ovenfor hænger vi besked parameter og initialisere en strengvariabel, så vi kan bruge den i vores serversides logik. Vi kan også få adgang til respons objekt, der bestemmer, hvad og hvordan dataene, der sendes til visningen, bliver.

Ovenfor indstiller vi indholdstypen på den. Vi behøver ikke at returnere respons modsætter sig, at dens nyttelast vises på JSP-siden ved gengivelse!

ud

ud tilhører klassen javax.servlet.jsp.JspWriter og bruges til at skrive indhold til klienten.

Der er mindst to måder at udskrive til din JSP-side, og det er værd at diskutere begge her. ud oprettes automatisk og giver dig mulighed for at skrive til hukommelsen og derefter til respons objekt:

out.print (“hej”); out.println (“verden”);

Det er det!

Den anden tilgang kan være mere performant, da den giver dig mulighed for at skrive direkte til respons objekt! Her bruger vi PrintWriter:

PrintWriter out = respons.getWriter (); out.println ("Hello World");

2.4. Andre implicitte objekter

Her er nogle andre Implicitte objekter der er også godt at vide!

session

session tilhører klassen javax.servlet.http.HttpSession vedligeholder brugerdata i løbet af sessionen.

Ansøgning

Ansøgning tilhører klassen javax.servlet.ServletContext gemmer applikationsomspændende parametre, der er indstillet ved initialisering, eller som der skal tilgås applikationsomfattende.

undtagelse

undtagelse tilhører klassen javax.servlet.jsp.JspException bruges til at vise fejlmeddelelser på JSP-sider, der har tagget .

side

side tilhører klassen java.lang.Objekt giver en adgang til eller henvisning til aktuelle servletoplysninger.

pageContext

pageContext tilhører klassen javax.servlet.jsp.PageContext som standard side omfang, men kan bruges til adgang anmodning, Ansøgningog session attributter.

config

config tilhører klassen javax.servlet.ServletConfig er servletkonfigurationsobjektet, der giver mulighed for at få servletkontekst, navn og konfigurationsparametre.

Nu hvor vi har dækket implicitte objekter leveret af JSP, lad os henvende os til direktiver som giver .jsp-sider (indirekte) adgang til nogle af disse objekter.

2.5. Direktiver

JSP leverer direktiver, der kan bruges til at specificere kernefunktionaliteter for vores JSP-filer. Der er to dele til JSP-direktiverne: (1) selve direktivet og (2) attributten for det direktiv, som tildeles en værdi.

De tre slags direktiver, der kan henvises til ved hjælp af direktivmærker er som definerer afhængigheder og attributter for JSP inklusive indholdstype og Sprog, der angiver en import eller fil, der skal bruges, og der specificerer et tagbibliotek, der definerer brugerdefinerede handlinger, der skal bruges af en side.

Så som et eksempel ville et sidedirektiv blive specificeret ved hjælp af JSP-tags på følgende måde:

Og vi kan gøre det ved hjælp af XML som følger:

2.6. Sidedirektivattributter

Der er mange attributter, der kan erklæres i et sidedirektiv:

autoFlush

autoFlush styrer bufferoutputtet og rydder det ud, når bufferstørrelsen nås. Standardværdien er rigtigt.

buffer

buffer indstiller størrelsen på bufferen, der bruges af vores JSP-side. Standardværdien er 8 kb.

errorPage

errorPage angiver en JSP-side som en fejlside.

strækker sig

strækker sig angiver superklassen for den tilsvarende servletkode.

info

info bruges til at indstille en tekstbaseret beskrivelse til JSP.

isELgnoreres

isELgnoreres angiver, om siden vil ignorere Udtrykssprog (EL) i JSP. EL gør det muligt for præsentationslaget at kommunikere med Java-styrede bønner og gør det ved hjælp af ${…} syntaks, og selvom vi ikke kommer ind i de nittede grittier af EL her, er der flere eksempler fundet nedenfor, der er tilstrækkelige til at opbygge vores eksempel JSP-app! Standardværdien for isELgnoreres er falsk.

isErrorPage

isErrorPage siger, om en side er en fejlside eller ej. Vi skal angive en fejlside, hvis vi opretter en fejlhåndtering til vores side i applikationen.

isThreadSafe

isThreadSafe har en standardværdi på rigtigt. isThreadSafe bestemmer, om JSP kan bruge Servlet multi-threading eller ej. Generelt vil du aldrig have det

for at slå denne funktion fra.

Sprog

Sprog bestemmer hvilket script-sprog, der skal bruges i JSP. Standardværdien er Java.

session

session bestemmer, om HTTP-sessionen skal opretholdes eller ej. Det er som standard sandt og accepterer værdier for rigtigt eller falsk.

trimDirectiveWhitespaces

trimDirectiveWhitespaces striber hvide mellemrum på JSP-siden, der kondenserer koden til en mere kompakt blok ved kompileringstidspunktet. Indstilling af denne værdi til rigtigt kan hjælpe med at reducere størrelsen på JSP-koden. Standardværdien er falsk.

3. Tre eksempler

Nu hvor vi har gennemgået de centrale begreber i JSP, lad os anvende disse begreber på nogle grundlæggende eksempler, der hjælper dig med at få din første JSP-serverende servlet i gang!

Der er tre hovedmåder til at injicere Java i en .jsp, og vi udforsker hver af disse måder nedenfor ved hjælp af indfødte funktioner i Java 8 og Jakarta EE.

Først gengiver vi vores markeringsserverside, der skal vises på klientsiden. For det andet vil vi se på, hvordan du tilføjer Java-kode direkte i vores .jsp-fil uafhængigt af javax.servlet.http'S anmodning og respons genstande.

For det tredje demonstrerer vi, hvordan vi begge videresender en HttpServletRequest til et specifikt .jsp og binde server-behandlet Java til det.

Lad os oprette vores projekt i Eclipse ved hjælp af File / New / Project / Web / Dynamic web project / type, der skal hostes i Tomcat! Du skal se efter oprettelse af projektet:

| -projekt | - Webindhold | - META-INF | - MANIFEST.MF | - WEB-INF | - lib | - src

Vi vil tilføje et par filer til applikationsstrukturen, så vi ender med:

| -projekt | - Webindhold | - META-INF | - MANIFEST.MF | - WEB-INF | -lib * -web.xml | - ExampleTree.jsp | - ExampleTwo.jsp * - index.jsp | - src | - com | - baeldung * - ExampleOne.java * - ExampleThree.java

Lad os sætte op index.jsp som vises, når vi får adgang til URL-konteksten i Tomcat 8:

   JSP eksempler 

Påkald HTML gengivet af Servlet: her

Java i statisk side: her

Java injiceret af Servlet: her

Der er tre -en, der hver linker til et af eksemplerne, vi gennemgår nedenfor i afsnit 4.1 til 4.4.

Vi skal også sørge for, at vi har vores web.xml Opsætning:

 index.html index.htm index.jsp ExampleOne com.baeldung.ExampleOne ExampleOne / ExampleOne 

En hovednote her er - hvordan man korrekt kortlægger hver af vores servlets til en bestemt servlet-mapping. Så forbinder hver servlet med et specifikt slutpunkt, hvor det kan forbruges! Nu gennemgår vi hver af de andre filer nedenfor!

3.1. HTML gengivet i Servlet

I dette eksempel springer vi faktisk over bygning af en .jsp-fil!

I stedet opretter vi en strengrepræsentation af vores markup og skriver den derefter til GET-svaret med PrintWriter efter ExampleOne Servlet modtager en GET-anmodning:

offentlig klasse EksempelOne udvider HttpServlet {@ Override beskyttet ugyldigt doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster ServletException, IOException {respons.setContentType ("text / html"); PrintWriter out = respons.getWriter (); out.println ("" + "" + "" + "HTML gengivet af Servlet" + "" + "" + "
" + "

Denne side blev gengivet af ExampleOne Servlet!

" + "" + "" ); } }

Hvad vi laver her er at indsprøjte vores markup gennem vores servlet-anmodning, der håndteres direkte. I stedet for et JSP-tag genererer vi vores HTML sammen med alle Java-specifikke data, der skal indsættes, rent serverside uden en statisk JSP!

Tidligere gennemgik vi ud objekt, som er et træk ved JspWriter.

Ovenfor brugte jeg PrintWriter objekt i stedet, der skriver direkte til respons objekt.

JspWriter buffere faktisk den streng, der skal skrives i hukommelsen, som derefter skrives til respons objekter efter at hukommelsesbufferen er skyllet.

PrintWriter er allerede knyttet til respons objekt. Jeg har foretrukket at skrive direkte til respons gør indsigelse i eksemplerne ovenfor og nedenfor af disse grunde.

3.2. Java i et JSP-statisk indhold

Her opretter vi en JSP-fil med navnet EksempelTwo.jsp med et JSP-tag. Som set ovenfor tillader dette Java at blive tilføjet direkte i vores markering. Her udskriver vi tilfældigt et element af en Snor[]:

   Java i statisk sideeksempel 

Ovenfor ser du denne variabeldeklaration inden for JSP-tagsobjekter: typevariabelnavn og en initialisering ligesom almindelig Java.

Jeg har inkluderet ovenstående eksempel for at demonstrere, hvordan du tilføjer Java til en statisk side uden at benytte en bestemt servlet. Her føjes Java simpelthen til en side, og JSP-livscyklussen tager sig af resten.

3.3. JSP med videresendelse

Nu til vores sidste og mest involverede eksempel! Her skal vi bruge @WebServlet annotation på ExampleThree, der eliminerer behovet for servlet-tilknytninger i server.xml.

@WebServlet (name = "ExampleThree", description = "JSP Servlet With Annotations", urlPatterns = {"/ ExampleThree"}) offentlig klasse EksempelThree udvider HttpServlet {@Override-beskyttet ugyldigt doGet (HttpServletRequest-anmodning, HttpServletResponse-svar) kører ServletException svar Strengmeddelelse = request.getParameter ("besked"); request.setAttribute ("tekst", besked); request.getRequestDispatcher ("/ ExampleThree.jsp"). videresend (anmodning, svar); }}

ExampleThree tager en URL-parameter sendt som besked, binder denne parameter til anmodning objekt, og omdirigerer det derefter anmodning protesterer mod EksempelTree.jsp.

Således har vi ikke kun opnået en virkelig dynamisk web erfaring, men vi har også gjort det inden for et program, der indeholder flere .jsp-filer.

getRequestDispatcher (). fremad () er en enkel måde at sikre, at den korrekte .jsp-side gengives.

Alle data bundet til anmodning objekt sendt sin (.jsp filens) måde vises derefter! Sådan håndterer vi den sidste del:

   Java-bindende eksempel 

Du sagde: $ {text}

Bemærk JSP-koden tilføjet øverst på EksempelTree.jsp. Du vil bemærke, at jeg skiftede JSP-tags her. Jeg bruger udtrykssprog (som jeg nævnte før) til at gengive vores sætparameter (som er bundet som $ {tekst})!

3.4. Prøve det!

Nu eksporterer vi vores applikation til en .war, der skal lanceres og hostes i Tomcat 8! Find din server.xml og vi opdaterer vores Sammenhæng til:

Hvilket giver os adgang til vores servlets og JSP'er på localhost: 8080 / spring-mvc-xml / jsp / index.jsp! Hent en arbejdskopi over på: GitHub. Tillykke!

4. Konklusion

Vi har dækket en hel del jord! Vi har lært om, hvad JavaServer-sider er, hvad de blev introduceret til at udføre, deres livscyklus, hvordan man opretter dem og endelig et par forskellige måder at implementere dem på!

Dette afslutter introduktionen til JSP! Vær godt og kod på!