JSP – Java Server Pages - corsiadistanza.polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/JSP.pdf · ¾Le pagine JSP sono elaborate dal contenitore (application server), che
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
JSP è un approccio alla programmazione lato serverPermette di produrre contenuti dinamici che possono essere visualizzati da un generico browser
Le pagine JSP sono elaborate dal contenitore (applicationserver), che le trasforma in codice eseguibileI dati generati dall’esecuzione del codice così ottenuto vengono inviati al client
Il client non vede mai la pagina JSP originale, ma solo il risultato della sua esecuzione
Le pagine JSP mettono in risalto la struttura del messaggio da generare nella risposta
Contenuto HTML, XML, testo…La presenza di frammenti di codice Java all’interno di una pagina permette di personalizzare dinamicamente il contenuto inviato:
È possibile avvalersi di componenti modulari per ridurre la quantità di codice ed aumentare la chiarezza della logica sottostante
VantaggiSeparazione del contenuto statico da quello generato dinamicamenteConsente di…
Accedere a databaseRaccogliere informazioni tramite formModificare il contenuto delle pagine Web senza cambiare il codice HTML di impaginazioneAccedere a dati presenti sul file system del server…
Indipendenza dalla piattaformaEstensibilità
JavaBean e Tag customRiutilizzo dei componenti
Promuove l’utilizzo di JavaBeans e Enterprise JavaBeans
Le pagine JSP sono composte di tag HTML standard e da tag JSPI tag JSP possono essere classificati come:
CommentiDirettiveUtilizzo di componenti (javaBean)Manipolazione di variabili ed espressioniEsecuzione condizionaleIterazioneAccesso al codice a basso livello (scriptlet)
DirettiveUna direttiva JSP è una “indicazione” per il compilatore JSP
Normalmente appare all’inizio di una pagina<%@ directive attribute1="value1"
...attributeN="valueN" %>
page: permette di importare package, definire il tipo mimedella risposta, indicare la pagina cui notificare eventuali eccezioni,…<%@ page import=“java.util.*” %><%@ page contentType=“text/xml” %><%@ page errorPage=“error.jsp” %>
include: utilizzata per inserire nel documento JSP una pagina HTML, delle direttive, …<%@ include file=“copyright.html” %>
Un’applicazione web spesso richiede che l’interazione con l’utente avvenga in passi successivi
Al termine di ogni passo occorre memorizzare (temporaneamente) i dati/le richieste introdotti e/o il risultato della loro elaborazionePer questo motivo si usano le variabili
Una variabile è caratterizzata daUn nome (sequenza di caratteri)Un valore (può essere un dato complesso)Un ambito (scope), che ne definisce la durata
Assegna alla variabile (di tipo elementare) nome il valore specificato e la colloca nel relativo ambito (request, session, page, application)Si può anche scrivere <c:set var=“nome”>valore</c:set>
Stampa il risultato della valutazione dell’espressioneescapeXml permette di trasformare gli eventuali tag contenuti nel risultato in caratteri stampabiliNel caso in cui il risultato dell’espressione sia nullo, viene stampato il valore di default
Formato generale: ${ Expr }L’espressione può contenere:
Il nome di una variabile contenuta nella pagina, nella richiesta, nella sessione o nell’applicazione web
o Nella valutazione, il nome viene sostituito dal valore della variabile
o Se il nome non viene trovato, viene restituito ‘null’Una costante (numerica o stringa)Una combinazione di valori (costanti/variabili) espressa tramite opportuni operatori
Nel caso di variabili, se queste sono associate ad oggetti complessi, è possibile accedere alle relative proprietà tramite la notazione
variabile.proprietàSe la variabile contiene un insieme di valori associati ad un nome (ovvero se è una mappa), si può accedere allo specifico valore tramite la notazione
Alcuni nomi riservati indicano particolari elementi
${cookie.crumb}Accede al cookie di nome “crumb”${param.password}Accede al parametro di nome “password”${header[“User-Agent”]}Accede alla header HTTP di nome “User-Agent”${pageContext.request.remoteAddr}Accede all’indirizzo del client che ha originato la richiesta
</c:choose>Esegue il blocco racchiuso all’interno del primo costrutto c:when il cui test è verificatoSe nessuno è verificato esegue il blocco c:otherwise
Ripete l’esecuzione del blocco racchiuso per ogni elemento presente all’interno dell’espressioneL’elemento corrente viene assegnato, di volta in volta, alla variabile nomeL’espressione deve rappresentare una collezione di valori
Quando si elabora una richiesta proveniente da una form, occorre esaminare i dati trasferiti e determinare il valore dei singoli parametri
In base a tali valori, potrà essere modificato lo stato dell’applicazione e definita una nuova vista da proporre all’utenteNella tecnologia JSP, si può utilizzare il linguaggio di scripting dinamico per accedere ai parametri ed effettuare le operazioni connesse
La variabile predefinita param offre l’accesso ai singoli parametri contenuti nella richiestaDue notazioni:
${param.nomeParametro}forma più compatta, si usa quando il nome del parametro è noto a priori (costante)${param[‘nomeParametro’]}${param[variabile]}se si omettono gli apici, il contenuto delle parentesi quadre viene interpretato come nome di una variabile il cui valore indica il nome del parametro cui si fa riferimento
Parametri multipliSe all’interno di una form sono presenti più campi di ingresso con lo stesso nome, all’atto dell’invio vengono associati più valori allo stesso parametro
Nella variabile param viene memorizzato il primoSe occorre conoscere tutti i valori, occorre utilizzare la variabile paramValues, che restituisce una lista
I JavaBean risultano particolarmente adatti per accedere ai valori inviati tramite formHTML<jsp:setProperty
name=“beanName” property=“*” />Assegna al bean indicato tutte le proprietà il cui nome coincide con il nome di un parametro contenuto nella richiesta Il valore assegnato è il valore del parametro stesso
Inserisce la pagina indicata dalla URL durante l’esecuzione (non durante la compilazione, come la direttiva include)
<jsp:forward page="URL" />
La pagina JSP viene “ridirezionata” alla URL indicataUtile per separare la porzione di codice in cui si elabora la richiesta da quella responsabile della visualizzazione
String getParameter(String name)Restituisce il valore del parametro “name”, opportunamente decodificato, indipendentemente dal metodo di richiestaRitorna null se il parametro non è stato inviato
String getMethod()Indica il metodo HTTP della richiesta
Enumeration getParameterNames()Restituisce l’elenco di tutti i parametri presenti nella richiesta
String getHeader(String headerName)Restituisce il valore di headerName, se presente nella richiesta; null altrimenti
Interfaccia che modella il concetto di sessione in HTTPViene mantenuta dal contenitore utilizzando meccanismi basati su cookie o riscrittura dei linkOggetto “condiviso” tra più pagine e tra invocazioni differenti della stessa pagina
Estensione della classe java.io.WriterOffre i metodi print(…) e println(…) per inviare tipi elementari ed oggettiMantiene al proprio interno un buffer (la cui dimensione può essere configurata) in cui accumula le richieste di scrittura
Il metodo flush() comporta l’invio del buffer verso il clientIl metodo clear() annulla il contenuto del buffer (se non è ancora stato inviato al client)
Il codice di _jspService è composto daCodice di inizializzazione e gestione degli errori (identico per tutte le pagine, definito dal contenitore)Il codice contenuto negli scriptlet alternato con richieste di stampa (sull’oggetto “out”) del testo compreso tra due scriptlet
Un’applicazione web:Raccoglie dati e richieste di azione dall’utente……li elabora/memorizza……visualizza i risultati
Nelle pagine JSP si utilizza il paradigma MVC –Model View Controller
Il modello rappresenta lo stato attuale dell’applicazione (rispetto ad una macchina a stati)La vista deriva una presentazione dello statoIl controllore verifica i dati raccolti/ le richieste effettuate e, conseguentemente, aggiorna il modello
Il modello è realizzato tramite un insieme di oggetti Java memorizzati all’interno della sessione
Tale modello deve essere inizializzato, all’atto della creazione delle sessione, con opportuni valoriNormalmente il modello descrive anche la vista corrente
Il controllore è rappresentato da codice che valida i parametri ricevuti e aggiorna il modelloLe viste sono realizzate tramite “scheletri” HTML/XML il cui contenuto viene espresso tramite espressioni dinamiche (riferite allo stato)
1. Definizione della macchina a statiA partire dalle specifiche dell’applicazione
2. Definizione dei parametri associati a ciascuna transizione
Transizioni uscenti da uno stesso stato devono avere parametri con nomi e/o valori differenti
3. Definizione delle viste associate a ciascun statoSe lo stato contiene degli archi uscenti cui sono associati dei parametri, la vista deve contenere una FORM con i relativi campi o avere link con parametri associati (esempio: <a href=“/index.jsp?p1=v1&p2=v2”>…</a>)
4. Implementazione della logica del controlloreSi utilizza una variabile memorizzata nella sessioneAd ogni richiesta si aggiorna tale variabile in base ai parametri ricevuti ed al valore precedente
5. Implementazione della logica associata ad ogni transizione
Eventuale validazione/memorizzazione/elaborazione dei parametri ricevuti
6. Implementazione delle diverse visteUtilizzando tag HTML e codice lato serverSe la vista è complessa, può essere realizzata in un file a parte (che viene richiamato tramite il costrutto <jsp:include page="URL" flush="true"/>)
Tomcat è un contenitore di applicazioni webOgni applicazione è contenuta in una directory separata, all’interno della cartella webapps dell’installazione di Tomcat
Creare una nuova applicazione richiede:1. Creare una nuova cartella all’interno di webapps; il nome
della cartella costituirà la radice della URL dell’applicazione
2. Pubblicare le pagine JSP nella cartella creata3. Creare una sottocartella chiamata “WEB-INF”4. Create e configurare, all’interno di WEB-INF, il file
web.xml che descrive l’applicazione stessa5. Aggiungere, in apposite sottocartelle di WEB-INF le classi