Sei sulla pagina 1di 32

6 JavaServer Pages

Marco Tessarotto
Programmazione dei Web Server
Anno Accademico 2007-2008
2
JavaServer Pages (JSP)
una tecnologia che consente di creare
contenuto web sia statico che dinamico
Include le stesse caratteristiche di Java
Servlet, ma con un approccio pi facile per
gestire i contenuti HTML
Pagine JSP: file di testo che descrivono
come processare una richiesta HTTP e
costruire una risposta
3
JavaServer Pages/2
Principali caratteristiche:
Linguaggio per sviluppare pagine JSP
Costrutti per accedere agli oggetti lato
server
Meccanismo per definire le estensioni del
linguaggio JSP
4
Pagina JSP
un documento di testo che contiene due
tipi di testo:
Statico: informazioni sul template statico
(HTML, WML, XML)
Elementi JSP: descrivono il contenuto
dinamico
5
Ciclo di vita di una pagina JSP
Una pagina JSP risponde alla richieste
come un servlet.
richiesta mappata dal container su una
pagina JSP: controlla se il servlet pi
vecchia della pagina JSP; in tal caso viene
tradotta in una classe servlet e compilata.
Java Servlet, invece, vengono compilate al
tempo di build; JavaServer Pages sono
compilate automaticamente dal container
6
Ciclo di vita di una pagina JSP/2
Durante la traduzione della pagina JSP, ogni
tipo di dati trattato in modo differente
Dati statici (template): trasformati in codice che
scriver nello stream che restituisce i dati al
client
La pagina JSP contiene:
Direttive: controllano come il container traduce
ed esegue la pagina
Scripts: inseriti nella classe servlet generata
Elementi (Tag) del tipo <jsp:TTT />: convertiti
in chiamate a componenti JavaBeans o Java
Servlet API (e custom tags)
7
Ciclo di vita di una pagina JSP/3
Per una pagina pageName.jsp, il sorgente della
servlet corrispondente si trova nel file:
<JWSDP_HOME>/work/Standard
Engine/localhost/context_root/pageName$jsp.ja
va
Le fasi di traduzione e compilazione possono
dare errori osservati quando la pagina
richiesta la prima volta.
Errore traduzione: eccezione ParseException
Errore compilazione: eccezione
JasperException
8
Ciclo di vita di una pagina JSP/4
Una volta tradotta e compilata, quando arriva
una richiesta:
Se unistanza del servlet della pagina JSP non
esiste, allora il container carica la classe; la
istanzia; inizializza il servlet chiamando jspInit
A questo punto la richiesta viene passata al
servlet chiamando _jspService
Quando il container rimuove la servlet della
pagina JSP, chiama jspDestroy
9
Caratteristiche di JSP
Gestito da un JSP container (=Web container)
web.xml: le pagine JSP sono mappate
implicitamente tramite lestensione .jsp
Ogni pagina JSP ha un equivalente documento
XML; pu essere scritta direttamente in XML
(JSP 1.2); nella stessa pagina non si possono
mescolare la sintassi standard e la sintassi XML
Traduzione ed esecuzione: la traduzione della
pagina JSP pu avvenire tra linizializzazione
dellapplicazione e la prima richiesta
10
Caratteristiche di JSP/2
Eventi: jspInit(), jspDestroy()
Compilazione: una pagina JSP pu anche
essere compilata nella sua classe di
implementazione durante lo sviluppo, oltre
che al momento dellesecuzione
(deployment time)
11
Caratteristiche di JSP/3
Direttive: informazioni per la fase di traduzione,
indipendenti dalle singole richieste ricevute dalla
pagina JSP; sintassi: <%@ direttiva%>
Azioni(Actions): informazioni per la fase di
elaborazione della richiesta; azioni standard,
custom (tramite il meccanismo di estensione dei
tag); seguono la sintassi di un elemento XML:
start tag, body opzionale, fine tag; case sensitive
Elementi di scripting (Scripting elements): colla
tra template e azioni; tre tipI: dichiarazioni <%!
%>, scriplet <% %>, espressioni <%= .
%>
12
Caratteristiche di JSP/4
Commenti JSP: <%-- --%>
La classe di implementazione di una pagina JSP
definisce il metodo _jspService()
Output al client: oggetto implicito out, di tipo
JspWriter
Oggetti: una pagina JSP pu accedere, creare e
modificare oggetti lato server; gli oggetti
possono essere resi visibili alle Actions e agli
Scriplet; hanno uno scopo (scope), che descrive
quali entit possono accedere alloggetto
13
Caratteristiche di JSP/5
Scopi di un oggetto:
Page: accessibili solo entro la pagina dove sono creati
(pageContext object)
Request: oggetti accessibili dalle pagine che elaborano
la stessa richiesta (es. forward della richiesta ad unaltra
pagina JSP)
Session: oggetti accessibili dalle pagine che elaborano
richieste nella stessa sessione (session object)
Application: oggetti accessibili dalle pagine di una
stessa applicazione
14
Oggetti impliciti
Oggetti impliciti: utilizzabili in scriplets ed espressioni
attraverso variabili dichiarate implicitamente allinizio
della pagina
request : javax.servlet.http.HttpRequest; request scope
response: javax.servlet.http.HttpResponse; page scope
pageContext: java.servlet.http.PageContext; page scope
session: javax.servlet.http.HttpSession; session scope
application: javax.servlet.http.ServletContext; application
scope
15
Oggetti impliciti/2
out: javax.servlet.jsp.JspWriter; page scope
config: javax.servlet.ServletConfig; page scope
page: listanza dellimplementazione della
pagina corrente; page scope
I nomi di oggetti che iniziano per jsp, _jsp, jspx,
_jspx sono riservati (maiuscoli e minuscoli)
16
Direttive JSP
Sintassi: <%@ directive { attr=value }* %>
Tre direttive: page, taglib, include
Direttiva page: definisce propriet della pagina e li
comunica al container JSP
Attributi della direttiva page:
buffering: <%@ page buffer="none|xxxkb" %> ; loutput
della risposta bufferizzato automaticamente; si pu
settare la dimensione
Gestione degli errori durante lesecuzione: <%@ page
errorPage="file_name" %>
17
Direttive JSP/2
Supporto sessioni: <%@ page
session=true|false" %>; default: true
Auto flush buffer: <%@ page
autoFlush=true|false" %>; svuotare il buffer
automaticamente quando pieno (true),
eccezione se false; default: true
Importazioni di classi: <%@ page
import=importList" %>; default: java.lang.*,
javax.servlet.*, javax.servlet.jsp.*,
javax.servlet.http.*
Estensione di un classe: <%@ page
extends=className" %>
18
Direttive JSP/3
contentType: <%@ page contentType =type" %>;
default: text/html
Direttiva taglib: estende i tag utilizzabili in una
pagina JSP
<%@ taglib uri=tagLibraryURI prefix=tagPrefix %>
Esempio: <%@ taglib uri=http://www.mycorp/supertags
prefix=super />
<super:doMagic></super:doMagic>
Direttiva include: <%@ include file="relativeURLspec"
%>: inclusione di testo al momento della traduzione
19
Scripting Elements
Usati per manipolare oggetti ed effettuare elaborazioni
sui contenuti generati;[JSP 1.2, unico linguaggio di
scripting supportato: Java] tre tipi:
Dichiarazioni: usati per dichiarare costrutti del
linguaggio di scripting disponibili agli altri scripting
elements
Scriplets: descrivono azioni da essere eseguite in
risposta a certe richieste (esempi: iterazioni, esclusioni
condizionate di altri elementi della pagina)
20
Scripting Elements/2
Espressioni: espressioni nel linguaggio di
scripting, elaborate al momento
dellesecuzione; il risultato convertito in
stringa ed inserito nello stream di output
21
Dichiarazioni
dichiarazioni di variabili e metodi, usabili nella
pagina
Non producono output nella stream di risposta
Sono inizializzate quando la pagina JSP
inizializzata
Esempi: <%! int i; %>
<%! public String funz(int i) { . } %>
22
Scriplets
Contengono frammenti di codice validi per il linguaggio
di scripting
Eseguiti al momento dellesecuzione (richiesta)
Possono scrivere o meno nello stream di uscita
Possono avere dichiarazioni locali
<% if (Calendar.getInstance().get(Calendar.AM_PM) ==
Calendar.AM) {%>
Good Morning
<% } else { %>
Good Afternoon
<% } %>
23
Espressioni
Espressione nel linguaggio di scripting che viene
elaborata ed il cui risultato viene forzato in String
Viene automaticamente scritto nello stream di
uscita tramite out.JspWriter
Se il risultato non pu essere cambiato in String,
errore (al momento della traduzione o al
momento dellesecuzione eccezione)
Esempio:
Hello <%= session.getAttribute(username) %>
24
Azioni
Agiscono sullo stream di uscita ed usano,
modificano e/o creano oggetti
JSP prevede un insieme di azioni standard
possibile estendere le azioni
La sintassi delle azioni si basa su XML; le azioni
possono essere elementi XML vuoti o non vuoti
possibile definire valori degli attributi di azioni
al momento dellesecuzione [ <%= scriplet_expr
%>]; elaborazione da sinistra a destra; solo nelle
azioni, non nelle dichiarazioni
Illegale per attributi legati al tempo di traduzione
25
Azioni/2
Gli attributi delle seguenti azioni supportano i
valori da calcolare al momento dellesecuzione:
jsp:setProperty
jsp:useBean
jsp:include
jsp:forward
jsp:param
jsp:plugin
26
Azioni jsp:useBean
<jsp:useBean/>
Associa listanza di un oggetto Java (definito entro un
certo scopo, disponibile con un certo id) con una
variabile di scripting
Attributi:
id=name; name deve essere unico nella translation
unit; identifica il bean, che viene acceduto tramite
name
<jsp:useBean id=customer
class=com.myco.Customer />
<%= customer.getName(); %>
27
Azioni jsp:useBean/2
scope=page|request|session|application
page: loggetto disponibile dal
javax.servlet.jsp.PageContext della pagina
corrente; il riferimento alloggetto viene eliminato
al completamento della richiesta da parte della
pagina
request: loggetto disponibile tramite il
ServletRequest della pagina corrente, metodo
getAttribute(name); riferimento eliminato alla fine
della richiesta
28
Azioni jsp:useBean/3
session: loggetto disponibile tramite HttpSession,
metodo getAttribute(name); riferimento eliminato quanto
la sessione viene distrutta
application: loggetto disponibile tramite
ServletContext, metodo getAttribute
<jsp:useBean id=connection
class=com.myco.myapp.Connection>
<jsp:setProperty name=connection property=timeout
value=33/>
</jsp:useBean>
29
Azioni jsp:setProperty
<jsp:setProperty/>: setta il valore di una
propriet di un Bean
<jsp:setProperty name =beanName"
property=propertyName value=propValue />
<jsp:setProperty name =beanName"
property=propertyName param=paramName
/>: paramName: viene da un web form
30
Azioni jsp:getProperty
Prende il valore di una propriet di un
Bean, convertito in String, e lo passa
alloggetto out
Il Bean deve essere reso noto tramite
jsp:useBean
<jsp:getProperty name=name
property=propertyName />
31
Azioni jsp:include
Permette linclusione al momento dellesecuzione di
risorse statiche e dinamiche nello stesso contesto della
pagina corrente
Argomento: URL relativo della risorsa
Una pagina inclusa ha accesso solo a JspWriter, non
pu modificare gli header (no Cookies)
possibile aggiungere parametri aggiuntivi tramite il
sottoelemento jsp:param
<jsp:include page=urlSpec flush="true|false"/>
<jsp:include page=urlSpec flush="true|false">
{ <jsp:param .... /> }*
</jsp:include>
32
Azioni jsp:forward
Consente il passaggio dellesecuzione ad unaltra risorsa
(risorsa statica, pagina JSP, servlet) nello stesso
contesto della pagina corrente. Termina lesecuzione
della pagina corrente
<jsp:forward page=relativeURLspec />
<jsp:forward page=urlSpec>
{ <jsp:param .... /> }*
</jsp:forward>
<jsp:param name="name" value="value" />

Potrebbero piacerti anche