1Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Corso Java/J2EE JSPElaborazione di Franco Grivet Chin
2Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
1 – JSP introduzione
• Una pagina JSP e un documento testuale composta da dati template statici e da elementi JSP che creano dinamicamente i contenuti
• Nel design pattern MVC (Model View Controller) le JSP ricoprono il ruolo di view (viste)
• La pagina JSP viene tradotta nella equivalente Servlet e poi compilata (non viene interpretata)
• Gli elementi JSP e il codice Java sono racchiusi fra degli speciali delimitatori <% e %>
• JSP 1.0 uso di scriplet (blocchi di codici java) e java beans, JSP 2.0 uso di tag libraries e Expression Language
3Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
2 Ciclo di vita delle JSP
La Jsp viene completamente tradotta in una classe che estende HttpServlet
La servlet così generata viene compilata
La servlet generata viene instanziata e segue lo stesso ciclo di vita della servlet
Le servlet JSP vengono inizializzate con il metodo jspInit e rimosse con jspDestroy (definiti nell’interfaccia javax.servlet.jsp)
Le JSp eseguono i loro compiti tramite il metodo _jspService
4Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 Elementi delle pagine JSP
Elementi JSP istruzioni per il container JSP che indicano quale codice generare
Tre tipi fondamentali di elementi JSP
• Elementi script• Espressioni <%= …. %>
• scriplet <% ….%>
• dichiarazioni) <%! ……%>
• Direttive <%@diretttiva attributo=“valore”...%>
• Azioni <jsp:azione attributo=“valore” />
5Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 Elementi di script
Definiscono codice di script contenuto direttamente nella pagina JSP
Tre tipi di elementi: dichiarazioni, espressioni e scriplet
Dichiarazione<%! ….. %> il codice (java) viene inserito nel body della servlet generata fuori dal metodo service. Posso anche inserire un metodo
Espressione <%= ….. %> l’espressione è valutata e messa in output (variabili che voglio stampare a video)
Scriplet <% ….. %> il codice (java) viene inserito nel metodo service della servlet
Commenti
<%-- commento--%>
Oggetti predefiniti: sia nelle espressioni che negli scriplet sono già disponibili un insieme di oggetti predefiniti disponibili generati dinamicamente nel processo di traduzione (request, response, out, session, application)
6Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 Jsp : direttive
DIRETTIVE: forniscono informazioni al container JSP che vengono elaborate durante la fase di traduzione da JSP a Servlet
Forma generale
<%@ nome-direttiva [attributo=“valore” attributo=“valore”..]%>
Direttiva page
• Specifica gli attributi della pagina JSP
• <%@page [attributo=“valore” attributo=“valore”..]%>
• Attributi comunemente usati
• Info,import,contentType, pageEncoding,language,isScriptingEnabled(true/false), extends, session (true /false), buffer (buffer di output), autoflush (true o false), isThreadSafe (true o false), isErrorPage (true o false), errorPage(URL)
7Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 JSP: Esempi di direttive
Import:<%@page import=“java.io.*,java.text.*,java.util.*”%>
Sessione:Di default la sessione è attiva in ogni pagina JSP<%@page session=“false”%>
Inclusione:Per inserire contenuti di altre pagine direttamente nell’output della pagina corrente. Viene processata durante la traduzione (testo incluso nella pagina)<%@ include file=“urlrelativo”%>Si può utilizzare anche l’azione jsp:include con l’attributo page, nel qual caso viene processato durante l’esecuzione (request mandata al file incluso se dinamica e risultato incluso nella response) <jsp: include page=“urlrelativo”/>
8Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 JSP: Esempi di direttive
Inclusione di librerie di tag:dichiara le librerie di marcatori usate nella pagina, composte da un file XML(TLD),descrittore della libreria di marcatori, e dai vari file di marcatori e/o classi Java che implementano le azioni dei marcatori <%@ taglib (uri=“tagLibraryURI” ! Tagdir=“tagDir”) prefix=“tagPrefix”%>Esempio<%@ taglib uri=“http://web3Dweb.com/tags” prefix=“web3Dweb”%><web3Dweb:fetchMediaFile>Lord of the rings </web3Dweb:fetchMediaFile>Esistono librerie predefinite come JSLT
9Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 JSP:azioni
Le azioni sono elementi JSP che possono essere utilizzati all’interno di una pagina per effettuare delle operazioni su oggetti impliciti e non
Sintassi xml-like<marcatore attributo1=“val”….>body </marcatore>oppure <marcatore attributo1=“val”…./>
ESEMPIO
<jsp:include page=“url” flush=“true/false”>
<jsp:forward page=“url”>
<jsp:param nome=“paramName” value=“paramValue”> (utilizzata solo nelle azioni include, forward)
10Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 Traduzione da JSP a Servlet
Durante la traduzione da JSP a Servlet i vari elementi sono tradotti in modo differente- le parti statiche (HTML) sono inserite nel metodo _jspService come delle out.println(..html..)- gli scriplet e le espressioni sono inseriti nella classe servlet generata nel metodo _jspService - le dichiarazioni sono inseriti nella classe servlet generata fuori dall metodo _jspService - le direttive sono usate per controllare come il container traduce ed esegue la pagina JSP e possono essere inserite in vari punti
- jsp[include/forward] sono tradotte in chiamate alle API servlet (RequestDispatcher)- tag personalizzati sono sono tradotti in chiamate per il gestore di tag
11Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 Traduzione da JSP a Servlet
Se si verifica un errore durante la traduzione o la compilazione viene generata una JasperException e un messaggio con la pagina JSP che ha generato l’errore e la linea dell’errore
Dopo che la pagina è stata tradotta e compilata la servlet generata segue il ciclo di vita delle servlet-se non esiste un’istanza della servlet il containera)carica la classe della servletb)Instanzia un’istanza della classe servletc) Inizializza la servlet chiamando il metodo jspInit- Il container chiama il metodo _jspService passando gli oggetti request e response- se il container deve rimuovere la servlet chiama il metodo jspDestroy
12Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Expression Language
Una nuova caratteristica di JSP 2.0 è il supporto per un Expression Language (EL) che permette di accedere facilmente ai dati di un JavaBeans${name} stampa il valore della variabile name dall’ambito più basso al più alto
Esiste un interprete di JSP Expression
Gli EL possono essere usati nel testo statico o combinati con i tag standard o personalizzati<c:if test=“${bean1.a<3}”>…</c:if>
Ricerca degli attributi:una variabile che appare in un’espressione (es. ${prodotto}) viene cercata nello scope di pagina, request, sessione e applicazione e ne restituisce il valore. Se la variabile non viene trovata viene restituito null
13Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 Expression Language
Le expression language possono accedere a oggetti impliciti- pageContext: contesto della pagina JSP che permette di accedere a
-servletContext-session-request-response
Altri oggetti impliciti sono:-param: per assegnare un parametro della request a un valore-paramValues: per assegnare un parametro della request a un array di valori-cookie: recuperare un cookie-initParam: per assegnare un parametro dell’inizializzazione del contesto a un valoreOggetti per accedere aa attributi di scope specifico:-pageScope,requestScope,sessionScope,applicationScope<%= request.getParameter(“nome”)%> ${param.nome}
14Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 Expression language
15Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 Expression language
16Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Tag Libraries:JSTL
Java Server Pages Standard Tag Libraries
Permette di utilizzare un insieme standard di TAG (non tag html ma in fase di traduzione vengono trasformati in codice java)
JSTL contiene tag iteratori e condizionali,tag per manipolare XML, tag per internazionalizzazione,tag per accedere a database con SQL e tag per funzioni
Per utilizzare la JSTL occorre utilizzare la direttiva taglib<%@ taglib uri="http://java.sun.com/jsp/jstl/core“ prefix="c" %> nella pagine jsp
L’attributo prefix è legato al tipo di funzioni da utilizzare
17Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 JSTL
18Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 JSTL
19Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
www.consorzioformaweb.it