L08a - JSP - parte 1
L08a - JSP - parte 1
PROGRAMMAZIONE WEB
JSP: JAVA SERVER PAGES
a.a 2015-2016
Java Server Pages
• Le JSP sono uno dei due componenti di base della tecnologia J2EE,
relativamente alla parte Web:
• template per la generazione di contenuto dinamico
• estendono HTML con codice Java custom
• Quando viene effettuata una richiesta a una JSP:
• parte dell’HTML viene direttamente trascritta sullo stream di output
• Il codice Java viene eseguito sul server per la generazione del
contenuto HTML dinamico
• la pagina HTML così formata (parte statica + parte generata
dinamicamente) viene restituita al client
• Assimilabili ad un linguaggio di script (es. PHP, Perl, ...)
• In realtà vengono trasformate in Servlet dal container
JspServlet
• Le richieste verso JSP sono gestite da una particolare Servlet (in Tomcat
si chiama JspServlet) che effettua le seguenti operazioni:
• traduzione della JSP in una Servlet
• compilazione della Servlet risultante in una classe
• esecuzione della JSP
• I primi due passi vengono eseguiti solo quando cambia il codice della
JSP
Ciclo di vita delle JSP
• Dal momento che le JSP sono compilate in Servlet, il ciclo di vita delle
JSP (dopo la compilazione) è controllato sempre dal medesimo Web
container
Servlet e JSP: perché usare JSP?
• Nella Servlet la logica per la generazione del documento HTML è
implementata completamente in Java
• Il processo di generazione delle pagine è time-consuming,
ripetitivo e soggetto a errori (sequenza di println())
• L’aggiornamento delle pagine è scomodo
• JSP nascono per facilitare la progettazione grafica e
l’aggiornamento delle pagine
• Si può separare agevolmente il lavoro fra grafici e
programmatori
• I Web designer possono produrre pagine senza dover
conoscere i dettagli della logica server-side
• La generazione di codice dinamico è implementata sfruttando
il linguaggio Java
Servlet o JSP?
• Le JSP non rendono inutili le Servlet
• Le Servlet forniscono agli sviluppatori delle applicazioni
Web, un completo controllo dell’applicazione
• Se si vogliono fornire contenuti differenziati a seconda di
diversi parametri quali l’identità dell’utente, condizioni
dipendenti dalla business logic, etc. è conveniente continuare
a lavorare con le Servlet
• Le JSP rendono viceversa molto semplice presentare
documenti HTML o XML (o loro parti) all’utente; dominanti
per la realizzazione di pagine dinamiche semplici e di
uso frequente
Come funzionano le JSP
• Ogni volta che arriva una request, il server compone dinamicamente
il contenuto della pagina
• Ogni volta che incontra un tag <% ... %>
• valuta l’espressione Java contenuta al suo interno
• inserisce al suo posto il risultato dell’espressione
• Una volta che il Web server comincia a restituire la risposta non può più
interrompere il processo, altrimenti browser mostra solo la frazione
parziale che ha ricevuto:
• se JSP ha cominciato a produrre output non si può più effettuare forward
ad un’altra JSP
Esempio: Hello world
• Consideriamo una JSP, denominata helloWorld.jsp, che realizza il classico
esempio “Hello World!” in modo parametrico:
Tag
• Le parti variabili della pagina sono contenute all’interno di tag
speciali
• Sono possibili due tipi di sintassi per questi tag:
• Scripting-oriented tag
• XML-Oriented tag
• Le scripting-oriented tag sono definite da delimitatori entro cui è
presente lo scripting (self-contained)
• Sono di quattro tipi:
• <%! %> Dichiarazione
• <%= %> Espressione
• <% %> Scriptlet
• <%@ %> Direttiva
XML-oriented tag
• XML-oriented tag seguono la sintassi XML
• Sono presenti XML tag equivalenti ai delimitatori visti nella
pagina precedente
• <jsp:declaration>declaration</jsp:declaration>
• <jsp:expression>expression</jsp: expression>
• <jsp:scriptlet>java_code</jsp:scriptlet>
• <jsp:directive.dir_type dir_attribute />
• http://myHost/myWebApp/expressions.jsp
• http://myHost/myWebApp/expressions.jsp?testParam=PW
Scriptlet
• Si usano <% e %> per aggiungere un frammento di codice Java
eseguibile alla JSP (scriptlet)
• Lo scriptlet consente tipicamente di inserire logiche di controllo di flusso
nella produzione della pagina
• http://myHost/myWebApp/callerror.jsp
La direttiva include
• Sintassi: <%@ include file = "localURL"%>
• Serve ad includere il contenuto del file
specificato
• È possibile nidificare un numero qualsiasi di
inclusioni
• L’inclusione viene fatta a tempo di
compilazione: eventuali modifiche al file
incluso non determinano una ricompilazione
della pagina che lo include
• Esempio:
<%@ include file="/shared/copyright.html"%>
Esempio 5
header.jsp
footer.jsp
Direttiva taglib
• JSP permettono di definire tag custom oltre a quelli predefiniti
• Rappresentano utili riferimenti ai corrispondenti oggetti Java veri e propri presenti nella
tecnologia Servlet
• Istanze di queste classi/interfacce sono quelle che usiamo regolarmente anche nelle servlet solo
che nelle servlet vannodefinite esplicitamente,