JavaServer Pages (JSP) è una tecnologia standard Java che consente di scrivere pagine dinamiche basate sui dati per le applicazioni Web Java. JSP è costruito sulla parte superiore della specifica Servlet Java. Le due tecnologie in genere lavorano insieme, soprattutto nelle vecchie applicazioni web Java., Dal punto di vista della codifica, la differenza più ovvia tra loro è che con i servlet si scrive codice Java e quindi si incorpora il markup lato client (come HTML) in quel codice, mentre con JSP si inizia con lo script o il markup lato client, quindi si incorporano i tag JSP per collegare la pagina al backend Java.
JSP è anche strettamente correlato a JSF (JavaServer Faces), una specifica Java per la creazione di applicazioni Web MVC (model-view-controller). JSP è una tecnologia relativamente più semplice e più vecchia di JSF, che è lo standard per framework web Java come Eclipse Mojarra, MyFaces e PrimeFaces., Mentre non è raro vedere JSP utilizzato come frontend per le vecchie applicazioni JSF, Facelets è la tecnologia di visualizzazione preferita per le moderne implementazioni JSF.
Mentre JSP potrebbe non essere la tua prima scelta per la creazione di pagine Web dinamiche, è una tecnologia web Java di base. Le pagine JSP sono relativamente veloci e facili da creare e interagiscono perfettamente con i servlet Java in un contenitore servlet come Tomcat. Incontrerai JSP nelle vecchie applicazioni Web Java e di tanto in tanto potresti trovarlo utile per creare pagine Web Java semplici e dinamiche., Come sviluppatore Java, dovresti almeno avere familiarità con JSP.
Questo articolo sarà una rapida introduzione a JavaServer Pages, inclusa la JSP Standard Tag Library (JSTL). Gli esempi mostrano come scrivere una semplice pagina HTML, incorporare tag JSP per connettersi a un servlet Java ed eseguire la pagina in un contenitore servlet.
Vedi gli articoli precedenti di questa serie per saperne di più sui servlet Java e sui volti di JavaServer.
Scrivere pagine JSP
Una semplice pagina JSP (.jsp) è costituito da markup HTML incorporato con tag JSP., Quando il file viene elaborato sul server, l’HTML viene visualizzato come vista applicazione, una pagina Web. I tag JSP incorporati verranno utilizzati per chiamare codice e dati lato server. Il diagramma in Figura 1 mostra l’interazione tra HTML, JSP e il server delle applicazioni Web.
Il listato 1 mostra una semplice pagina JSP.
Elenco 1., Una semplice pagina JSP
<html> <body> <p>${2 * 2} should equal 4</p> </body></html>
Nel listato 1, si vede un blocco di HTML che include un’espressione JSP, che è un’istruzione per il server Java scritta usando Expression Language (EL). Nell’espressione “${2 * 2}
“, il”${}
” è la sintassi JSP per l’interpolazione del codice in HTML. Quando viene eseguito, il JSP produrrà i risultati dell’esecuzione di qualsiasi cosa si trovi all’interno dell’espressione. In questo caso, l’output sarà il numero 4.
JSP nel contenitore servlet
Le pagine JSP devono essere distribuite all’interno di un contenitore servlet Java., Al fine di distribuire un’applicazione web Java basata su JSP e servlet, si impacchetterà il vostro .file jsp, codice Java e metadati dell’applicazione in un .file di guerra ,che è un semplice.file zip con una struttura convenzionale per applicazioni web.
Una volta caricato il JSP nel tuo contenitore servlet, verrà compilato in un servlet. I servlet JSP e Java condividono caratteristiche simili, inclusa la possibilità di accedere e rispondere agli oggetti di richiesta. Apache Tomcat 9x è l’implementazione di riferimento per le specifiche Servlet 4.0 e JSP 2.3. (Si noti che gli aggiornamenti tra JSP 2.,2 e 2.3 sono relativamente minori.)
Esempio di app per JSP
Useremo un’applicazione di esempio in Tomcat per iniziare con JavaServer Pages. Se non hai già installato Tomcat, vai alla pagina di download di Tomcat e seleziona l’installazione di Tomcat per il tuo sistema operativo. Al momento della stesura di questo articolo, Tomcat 9 è la versione corrente, compatibile con Servlet 4.0 e JSP 2.3.
È possibile installare Tomcat come servizio Windows o eseguirlo dalla riga di comando con/bin/catalina.sh start
o/bin/catalina.bat
., In entrambi i casi, avviare Tomcat, quindi andare su localhost:8080
per vedere la pagina di benvenuto di Tomcat mostrata in Figura 2.
Oggetti impliciti in Tomcat
Nella pagina di benvenuto di Tomcat, fare clic sul collegamento Esempi, quindi fare clic su Esempi JSP.
Quindi, aprire gli oggetti impliciti Eseguire l’applicazione web. Figura 3 mostra uscita per questa applicazione. Prenditi un minuto per studiare questa uscita.
Parametri di richiesta
Gli oggetti impliciti sono oggetti incorporati accessibili tramite una pagina JSP. Come sviluppatore di pagine Web, utilizzerai questi oggetti per creare l’accesso a cose come i parametri di richiesta, che sono i dati inviati dal browser quando si emette una richiesta HTTP. Si consideri l’URL del browser per gli Oggetti Impliciti:
This example is a very simple introduction to using JSP tags to access server-side request parameters. In this case, the JSP page uses the built-in (implicit) object called param
to access the web application’s request parameters. The param
object is available inside the JSP expression syntax that you saw in Listing 1.
In that example, we used an expression to do some math: ${2 * 2}
, which output 4
.
In this example, the expression is used to access an object and a field on that object: ${param.foo}
.
JSP in a web application
On the Implicit Objects page, click the back arrow, followed by the Source link. This will lead you to the JSP code for the Implicit Objects web app, which is shown in Listing 2.
Listing 2. JSP code for the Implicit Objects web app
JSP functions
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:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
La sintassi è abbastanza chiara: importa le funzioni richieste e assegna loro un prefisso (in questo caso “fn”) che può essere utilizzato in tutte le espressioni seguenti.,
La libreria di tag standard JSP (JSTL)
La rigaimport
nel listato 2 chiamataglib
, che è l’abbreviazione di libreria di tag o (in questo caso) Libreria di tag standard JSP (JSTL). Le librerie di tag definiscono bit riutilizzabili di funzionalità per JSP. JSTL è la libreria di tag standard, contenente una raccolta di taglib che vengono forniti con ogni implementazione servlet e JSP, incluso Tomcat.
La libreria “funzioni” è solo uno dei taglib inclusi in JSTL., Un altro taglib comune è la libreriacore
, che si importa chiamando:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Come “fn”, la designazione “c” è convenzionale e la vedrai nella maggior parte delle pagine JSP.
Protezione delle pagine JSP
Un tag di esempio dalla libreria principale è
<c:out value = "${'<div>'}"/>
che emette il tag<div>
con l’XML già escape. Questa funzione è importante perché l’output del contenuto direttamente su una pagina Web tramite ${variable}
apre la porta agli attacchi di script injection., Questa semplice funzione viene utilizzata per proteggere le pagine web da tali attacchi.
La libreria principale include anche vari tag per l’iterazione e il controllo del flusso (come la gestione IF / ELSE).
Chiamare taglibs nelle pagine JSP
Ora che hai un handle sulle basi JSP, facciamo una modifica all’applicazione di esempio. Per iniziare, individuare l’app Oggetto implicito nell’installazione di Tomcat. Il percorso è: apache-tomcat-8.5.33/webapps/examples/jsp/jsp2/el
.,
Aprire il file e individuare il functions
sono:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
al di sotto di questa linea, aggiungere una nuova riga:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
premere “invio” e aggiungere una nuova riga:
<c:out value = "${'This is a test of the JSTL Core Library'}"/>
Ora ricaricare la pagina http://localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.
Dovresti vedere i tuoi aggiornamenti riflessi nell’output.
Layout di un’applicazione web JSP
Tomcat segue il layout standard per le pagine Java servlet e JSP., La struttura generale è una cartella con il nome dell’applicazione, che viene distribuita all’interno della directory /webapps
di Tomcat.
Nell’app Oggetti impliciti, l’applicazione è/examples
. L’apertura di quella cartella rivela tre figli importanti :la directory/WEB-INF
, il fileindex.html
e una serie di altre directory.
La directoryWEB-INF
contiene metadati che informano Tomcat su come eseguire l’app.
Il resto del contenuto, incluso l’indice.,html, è direttamente accessibile, proprio come sarebbe in un tipico server web. Allo stesso modo, implicit-objects.jsp
è disponibile per la visualizzazione e viene gestito automaticamente come una pagina JSP (non una pagina HTML) dal server.
Request-response architecture
In una tipica applicazione servlets / JSP, i servlet ricevono richieste e interagiscono con componenti e servizi lato server (come il database) per soddisfarle. Una volta gestito, il risultato della richiesta viene inoltrato a una pagina JSP, che presenta la risposta.,
Un servlet utilizza la seguente sintassi quando invia una risposta alla richiesta a una pagina JSP:
request.getRequestDispatcher("path/to/jsp.jsp").forward(req,res);
Qualsiasi dato il servlet abbia inserito nei vari ambiti JSP sarà accessibile a JSP. Un ambito è semplicemente una gamma di vita per un determinato oggetto. Gli oggetti Request e response sono oggetto request, ovvero vivono per la durata della richiesta. Altri ambiti includono l’ambito della pagina (che dura fino a quando la pagina JSP lo fa) e l’ambito della sessione (che termina quando l’utente termina la sessione specificata).,
Conclusione
JavaServer Pages è una tecnologia ben nota e versatile per lo sviluppo di viste di applicazioni Web Java. In combinazione con i servlet, le pagine JSP sono molto potenti e forniscono accesso all’intera gamma di funzionalità Java. Mentre JSP potrebbe non essere la prima scelta per lo sviluppo di una moderna applicazione Web Java, si incontrano pagine JSP in applicazioni legacy. È anche una buona scelta per applicazioni più semplici, in cui si desidera collegare rapidamente il frontend HTML al codice Java lato server., I tag JSTL sono in grado di gestire la maggior parte dei requisiti delle applicazioni Web e le librerie di terze parti estendono tale funzionalità per tecnologie e casi d’uso specifici.