Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni

L08a - JSP - parte 1

Il documento tratta delle Java Server Pages (JSP), un componente della tecnologia J2EE per la generazione di contenuti web dinamici, estendendo HTML con codice Java. Descrive il ciclo di vita delle JSP, il loro funzionamento tramite Servlet, e confronta l'uso di JSP e Servlet, evidenziando i vantaggi delle JSP per la progettazione grafica e l'aggiornamento delle pagine. Viene inoltre fornita una panoramica sui tag JSP, le direttive e gli oggetti built-in utilizzabili nelle JSP.

Caricato da

donmatteo
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni

L08a - JSP - parte 1

Il documento tratta delle Java Server Pages (JSP), un componente della tecnologia J2EE per la generazione di contenuti web dinamici, estendendo HTML con codice Java. Descrive il ciclo di vita delle JSP, il loro funzionamento tramite Servlet, e confronta l'uso di JSP e Servlet, evidenziando i vantaggi delle JSP per la progettazione grafica e l'aggiornamento delle pagine. Viene inoltre fornita una panoramica sui tag JSP, le direttive e gli oggetti built-in utilizzabili nelle JSP.

Caricato da

donmatteo
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 27

CORSO DI LAUREA IN INFORMATICA

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

• Questo meccanismo permette di generare pagine dinamicamente


Anche considerazioni sul flusso
• Ricordiamoci come funziona HTTP e quale è la struttura delle pagine
HTML
• Il Client si aspetta di ricevere tutto il response header prima del
response body:
• JSP deve effettuare tutte le modifiche all’header (ad es. modifica di
cookie) prima di cominciare a creare body

• 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 />

• Nel seguito useremo scripting-oriented tag che sono più diffusi


Dichiarazioni
• Si usano i delimitatori <%! e %> per dichiarare variabili e metodi

• Variabili e metodi dichiarati possono poi essere referenziati in qualsiasi


punto del codice JSP

• I metodi diventano metodi della Servlet quando la pagina viene


tradotta
Espressioni
• Si usano i delimitatori <%= e %> per valutare espressioni Java

• Il risultato dell’espressione viene convertito in stringa inserito nella


pagina al posto del tag

(continuando l’esempio della pagina precedente)


Esempio 1 (declarations.jsp)
Esempio 2 (expressions.jsp)

• 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

• La combinazione di tutti gli scriptlet in una determinata JSP deve


definire un blocco logico completo di codice Java
Esempio 3 (scriptlet.jsp)
Direttive
• Sono comandi JSP valutati a tempo di compilazione

• Le più importanti sono:


• page: permette di importare package, dichiarare pagine d’errore, definire
modello di esecuzione JSP relativamente alla concorrenza (ne discuteremo
a breve), ecc.
• include: include un altro documento
• taglib: carica una libreria di custom tag implementate dallo sviluppatore

• Non producono nessun output visibile


La direttiva page
• La direttiva page definisce una serie di attributi che si applicano
all’intera pagina
• Sintassi:
Attributi di page
• language="java" linguaggio di scripting utilizzato nelle parti dinamiche, allo
stato attuale l’unico valore ammesso è “java”
• import="{package.class|package.*},..." lista di package da importare.
• Gli import più comuni sono impliciti e non serve inserirli (java.lang.*,
javax.servlet.*,javax.servlet.jsp.*, javax.servlet.http.*)
• session="true|false” indica se la pagina fa uso della sessione (altrimenti non
si può usare session)
• buffer="none|8kb|sizekb" dimensione in KB del buffer di uscita
• autoFlush="true|false" dice se il buffer viene svuotato automaticamente
quando è pieno
• Se il valore è false viene generata un’eccezione quando il buffer è pieno
Attributi di page (2)
• isThreadSafe="true|false" indica se il codice contenuto nella pagina è
thread-safe
• Se vale false le chiamate alla JSP vengono serializzate

• info="text" testo di commento


• Può essere letto con il metodo Servlet.getServletInfo()
• Es: <%= this.getServletInfo()%> oppure <%= page.getServletInfo()%>

• errorPage="relativeURL" indirizzo della pagina a cui vengono inviate le


eccezioni
• isErrorPage="true|false" indica se JSP corrente è una pagina di errore
• Si può utilizzare l’oggetto exception solo se l’attributo è true

• contentType="mimeType [;charset=charSet ]" | "text/html;charset=ISO-


8859-1" indica il tipo MIME e il codice di caratteri usato nella risposta
Esempio 4 (error.jsp)
Esempio 4b (call error.jsp)

• 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

• Una taglib è una collezione di questi tag non standard, realizzata


mediante una classe Java

• Sintassi: <%@ uri=“tagLibraryURI" prefix="tagPrefix"%>


Built-in objects (con scope differenziati)
• Le specifiche JSP definiscono 8 oggetti built-in (o impliciti) utilizzabili senza dover creare istanze

• 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,

Potrebbero piacerti anche