Što je JSP? Uvod u JavaServer stranice

JavaServer Pages (JSP) Java je standardna tehnologija koja vam omogućuje pisanje dinamičnih stranica na temelju podataka za vaše Java web programe. JSP je izgrađen na vrhu specifikacije Java Servlet. Dvije tehnologije obično rade zajedno, posebno u starijim Java web aplikacijama. Iz perspektive kodiranja, najočitija je razlika između njih u tome što kod servleta pišete Java kôd i zatim u njega ugrađujete oznake na strani klijenta (poput HTML-a), dok kod JSP-a započinjete s klijentskom skriptom ili oznakom, a zatim ugrađujete JSP oznake za povezivanje vaše stranice s Java pozadinom.

JSP je također usko povezan sa JSF (JavaServer Faces), Java specifikacijom za izgradnju MVC (model-view-controller) web aplikacija. JSP je relativno jednostavnija i starija tehnologija od JSF-a, što je standard za Java web okvire poput Eclipse Mojarra, MyFaces i PrimeFaces. Iako nije rijetkost vidjeti da se JSP koristi kao sučelje za starije JSF aplikacije, Facelets je preferirana tehnologija prikaza za moderne JSF implementacije.

Iako JSP možda nije vaš prvi izbor za izradu dinamičnih web stranica, to je srž Java tehnologije. JSP stranice relativno su brze i jednostavne za izradu i neometano komuniciraju s Java servletima u spremniku servleta poput Tomcata. S JSP-om ćete se susresti u starijim Java web aplikacijama, a s vremena na vrijeme može vam se učiniti korisnim za izgradnju jednostavnih, dinamičnih Java web stranica. Kao programer Jave, trebali biste barem biti upoznati s JSP-om.

Ovaj će članak biti kratki uvod u JavaServer Pages, uključujući JSP knjižnicu standardnih oznaka (JSTL). Primjeri vam pokazuju kako napisati jednostavnu HTML stranicu, ugraditi JSP oznake za povezivanje s Java servletom i pokrenuti stranicu u spremniku servleta.

Pogledajte prethodne članke u ovoj seriji da biste saznali više o Java servletima i JavaServer Faces.

JSP u Jakarti EE

Nakon izlaska Java EE 8, Oracle je prebacio upravljanje Java Enterprise Edition (Java EE) u Eclipse Foundation. Ubuduće, Java Enterprise platforma preimenovana je u Jakarta EE. Zajedno s Java Servlet i JSF specifikacijama, JSP je jedna od Java web tehnologija uključenih u stalnu podršku i nadogradnje u Jakarta EE.

Pisanje JSP stranica

Jednostavna JSP stranica (.jsp) sastoji se od HTML oznake ugrađene u JSP oznake. Kada se datoteka obradi na poslužitelju, HTML se prikazuje kao prikaz aplikacije, web stranica. Ugrađene JSP oznake služit će za pozivanje koda i podataka na strani poslužitelja. Dijagram na slici 1 prikazuje interakciju između HTML-a, JSP-a i poslužitelja web aplikacija.

Matthew Tyson

Popis 1 prikazuje jednostavnu JSP stranicu.

Popis 1. Jednostavna JSP stranica

${2 * 2} should equal 4

U Popisu 1 vidite blok HTML-a koji uključuje JSP izraz , što je uputa Java poslužitelju napisana jezikom izraza (EL). U izrazu " ${2 * 2}", " ${}" je JSP sintaksa za interpolaciju koda u HTML. Kada se izvrši, JSP će prikazati rezultate izvršavanja onoga što se nalazi unutar izraza. U ovom slučaju, izlaz će biti broj 4.

JSP u spremniku servleta

JSP stranice moraju biti postavljene unutar spremnika Java servleta. Da biste implementirali Java web aplikaciju koja se temelji na JSP-u i servletima, spakirat ćete svoje .jsp datoteke, Java kôd i metapodatke aplikacije u .war datoteku, koja je jednostavna .zip datoteka s uobičajenom strukturom za web aplikacije.

Jednom kada učitate JSP u svoj spremnik servleta, on će se prevesti u servlet. JSP-ovi i Java servleti dijele slične karakteristike, uključujući mogućnost pristupa objektima zahtjeva i odgovaranja na njih. Apache Tomcat 9x referentna je implementacija za Servlet 4.0 i JSP 2.3 specifikacije. (Imajte na umu da su ažuriranja između JSP 2.2 i 2.3 relativno mala.)

Spremnik servleta u odnosu na poslužitelj aplikacija

U svijetu Jave, spremnik servleta , poznat i kao web poslužitelj, sličan je jednostavnoj (pivskoj) verziji aplikacijskog poslužitelja. Spremnik servleta obrađuje interakcije zahtjeva i odgovora i omogućuje tim interakcijama sučeljavanje s podskupom Java Enterprise mogućnosti za web aplikacije. Java aplikacijski poslužitelj uključuje spremnik servleta kao dio cjelovitog Java snopa poduzeća, uključujući EJB, JPA, JMS i još mnogo toga.

Primjer aplikacije za JSP

Upotrijebit ćemo primjer aplikacije u Tomcatu kako bismo započeli s JavaServer stranicama. Ako još nemate instaliran Tomcat, prijeđite na stranicu za preuzimanje Tomcata i odaberite instalaciju Tomcat za svoj operativni sustav. Od pisanja ovog članka, Tomcat 9 je trenutno izdanje, kompatibilno sa Servlet 4.0 i JSP 2.3.

Tomcat možete instalirati kao Windows uslugu ili ga pokrenuti iz naredbenog retka pomoću /bin/catalina.sh startili /bin/catalina.bat. U svakom slučaju, pokrenite Tomcat, a zatim idite na localhost:8080stranicu za dobrodošlicu Tomcata prikazanu na slici 2.

Matthew Tyson

Implicitni objekti u Tomcat-u

Na Tomcat stranici dobrodošlice kliknite vezu Primjeri , a zatim JSP Primjeri .

Zatim otvorite web-aplikaciju Implicit Objects Execute . Slika 3 prikazuje izlaz za ovu aplikaciju. Odvojite minutu za proučavanje ovog rezultata.

Matthew Tyson

Parametri zahtjeva

Implicitni objekti su ugrađeni objekti kojima se pristupa putem JSP stranice. Kao programer web stranice, upotrebljavat ćete te objekte za stvaranje pristupa stvarima poput parametara zahtjeva , a to su podaci poslani iz preglednika prilikom izdavanja HTTP zahtjeva. Razmotrite URL preglednika za implicitne objekte:

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

Parametar je ?foo=bar, a možete ga vidjeti u izlazu na web stranici, gdje tablica prikazuje "EL Expression", a vrijednost je "bar". Da biste to testirali, promijenite URL u //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork , pritisnite Enter i vidjet ćete promjenu koja se odražava u izlazu.

Ovaj je primjer vrlo jednostavan uvod u upotrebu JSP oznaka za pristup parametrima zahtjeva na strani poslužitelja. U ovom slučaju, JSP stranica koristi ugrađeni (implicitni) objekt pozvan paramza pristup parametrima zahtjeva web aplikacije. paramPredmet je dostupan unutar JSP izraz sintakse koje ste vidjeli na Oglas 1.

U tom smo primjeru koristili izraz za izračun neke matematike:, ${2 * 2}koja daje izlaz 4.

U ovom primjeru, izraz se koristi za pristup objekt i teren na taj objekt: ${param.foo}.

JSP u web aplikaciji

Na stranici Implicitni objekti kliknite strelicu za povratak, a zatim vezu Izvor . To će vas dovesti do JSP koda za web-aplikaciju Implicit Objects, koji je prikazan na popisu 2.

Popis 2. JSP kôd za web-aplikaciju Implicit Objects

     JSP 2.0 Expression Language - Implicit Objects   
    
This example illustrates some of the implicit objects available in the Expression Language. The following implicit objects are available (not all illustrated here):
  • pageContext - the PageContext object
  • pageScope - a Map that maps page-scoped attribute names to their values
  • requestScope - a Map that maps request-scoped attribute names to their values
  • sessionScope - a Map that maps session-scoped attribute names to their values
  • applicationScope - a Map that maps application-scoped attribute names to their values
  • param - a Map that maps parameter names to a single String parameter value
  • paramValues - a Map that maps parameter names to a String[] of all values for that parameter
  • header - a Map that maps header names to a single String header value
  • headerValues - a Map that maps header names to a String[] of all values for that header
  • initParam - a Map that maps context initialization parameter names to their String parameter value
  • cookie - a Map that maps cookie names to a single Cookie object.
Change Parameter foo =

EL Expression Result
\${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 functions

If you're familiar with HTML, then Listing 2 should look pretty familiar. You have the expected HTML elements, followed by the ${ } JSP expression syntax introduced in Listing 1. But notice the value for param.foo: ${fn:escapeXml(param["foo"])} . The "fn:escapeXML()" is a JSP function.

A JSP function encapsulates a chunk of reusable functionality. In this case, the functionality is to escape XML. JSP offers a variety of functions, and you can also create functions yourself. To use a function, you import its library into your JSP page, then call the function.

In Listing 2, the escapeXML function is included with the line:

The syntax is pretty clear: it imports the required functions and assigns them a prefix (in this case "fn") that can be used in all following expressions.

The JSP Standard Tag Library (JSTL)

The import line in Listing 2 calls taglib, which is short for tag library, or (in this case) JSP Standard Tag Library (JSTL). Tag libraries define reusable bits of functionality for JSP. JSTL is the standard tag library, containing a collection of taglibs that ship with every servlet and JSP implementation, including Tomcat.

The "functions" library is just one of the taglibs included with JSTL. Another common taglib is the core library, which you import by calling:

Like "fn", the "c" designation is conventional, and you will see it across most JSP pages.

Securing JSP pages

An example tag from the core library is


    

which outputs the tag with the XML already escaped. This function is important because outputting content directly to a web page via ${variable} opens the door to script injection attacks. This simple function is used to protect web pages from such attacks.

The core library also includes various tags for iteration and flow control (like IF/ELSE handling).

JSTL tag classifications

There are five sets of tags included in JSTL, each designed for a specific area of web application functionality:

  • JSTL core: Dealing with logic and execution flow; conventional tag: "c"
  • JSTL formatting: Dealing with formatting (like dates) and internationalization; conventional tag: "fmt".
  • JSTL SQL: Dealing with querying SQL databases (this is usually discouraged in the view layer); conventional tag: "sql".
  • JSTL XML: Dealing with working with XML documents; conventional tag: "x".
  • JSTL functions: Dealing primarily with String manipulations; conventional tag: "fn".

Calling taglibs in JSP pages

Now that you've got a handle on JSP basics, let's make a change to the example application. To start, locate the Implicit Object app in your Tomcat installation. The path is: apache-tomcat-8.5.33/webapps/examples/jsp/jsp2/el.

Open this file and locate the functions include:

just below this line, add a new line:

Hit Return and add another new line:

Now reload the page at //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

Trebali biste vidjeti kako se vaša ažuriranja odražavaju u izlazu.