Programmazione Java Avanzata
Transcript
Programmazione Java Avanzata
Programmazione Java Avanzata Introduzione a Servlet e Struts 2 Ing. Giuseppe D'Aquì 1 Testi Consigliati ● ● ● Java Enterprise in a nutshell, 3rd edition (O'Reilly) Struts 2 in Action – Brown, Davis, Stanlick (Manning) Capitolo 2 di “Struts 2 in Action”: ● [http://www.manning-source.com/books/dbrown/ch02Sample.pdf] 2 Servlet ● ● Le Servlet sono classi Java che rispondono ad HTTP Request Definiscono delle modalità di risposta (ad esempio, in caso di GET o POST) e poi gestiscono in modo automatico il resto ● Per esempio, viene mantenuto lo stato nelle variabili di sessione senza che lo sviluppatore debba preoccuparsi Servlet ● Una Servlet restituisce, in genere, HTML ● ● ● Anche se può restituire XML o altro Una Servlet viene inizializzata dal server, e, a questo punto, gestisce ogni request in un thread a parte Le Servlet sono definite nella libreria di JavaEE Servlet ● ... 5 Servlet Container ● ● ● Per eseguire una Servlet è necessario un servlet container Un servlet container usa una Java Virtual Machine per eseguire il codice contenuto in una servlet, su richiesta di un web server Il servlet container ha anche altre responsabilità: ● Gestisce le sessioni utente ● Gestisce il caricamento delle classi corrette ● Configurazione delle servlet 6 Servlet Container ● Tomcat è un famoso Servlet Container ● Implementa le Servlet API ● Liberamente utilizzabile e gratuito 7 Gestione delle Servlet 8 Tomcat-Eclipse ● Per semplificare lo sviluppo, ci sono diversi modi per controllare Tomcat attraverso Eclipse ● Tomcat Plugin – ● [http://www.eclipsetotale.com/tomcatPlugin.html] Eclipse Plugins – JST (J2ee Standard Tools) – WTP (Web Tools Platform) 9 Deployment WAR ● L'installazione di una applicazione in un servlet container prevede la copia dei file compilati e della configurazione in una specifica directory ● ● ● Operazione detta “Deployment” Si possono creare dei pacchetti che contengono l'intera applicazione: sono chiamati WAR (Web Archive) Copiando solo il WAR, il servlet container si occupa di decomprimerlo e installare i file 10 Esempio Servlet ● ... 11 Esempio Servlet - persistenza ● ● … Nota bene: la persistenza qui è intesa come “dati che permangono tra una http request e un'altra” 12 Struttura di una web application ● Una directory molto importante è WEB-INF ● Contiene: ● ● le nostre classi compilate (WEB-INF/classes) ● Eventuali librerie aggiuntive (WEB-INF/lib) ● Eventuale codice sorgente (WEB-INF/src) ● La configurazione (WEB-INF/web.xml) Tutte le altre directory rappresentano la document root del server web ● Cioè i file sono direttamente raggiungibili 13 Servlet Context ● ● Un servlet context è semplicemente il percorso in cui sono installate una o più servlet Le servlet in un context hanno un ambiente che è “isolato” dalle operazioni delle servlet di altri context ● 14 Cookies ● Scrivere String userid = createUserID( ); Cookie c = new Cookie("userid", userid); resp.addCookie(c); ● Leggere Cookie[] cookies; cookies = req.getCookies( ); String userid = null; for (int i = 0; i < cookies.length; i++) if (cookies[i].getName( ).equals("userid")) userid = cookies[i].getAttribute( ); 15 JavaServer Pages ● Scrivere una pagina HTML tramite output di una servlet è complicato e fa perdere tempo ● ● ● Soprattutto può farlo solo uno sviluppatore Si usano in genere dei Templating Engine (vedi Template View) JSP è uno di questi 16 JSP e Server ● ● Un file JSP viene compilato come servlet alla prima richiesta Le richieste successive verranno gestite dalla servlet appena compilata ● Posizione dei file ● Come richiamarli da url 17 JSP e Tomcat ● Posizione dei file ● ● I file JSP vanno nella document root (/) del servlet context, o in una sottodirectory Vengono mappate come URL in base alla loro posizione fisica 18 JSP: Esempio 1 ● Output data 19 JSP: Esempio 2 ● if 20 JSP compilate come Servlet ● ... 21 Struts 2 ● ● ● ● Struts 2 è un framework per lo sviluppo di applicazioni web in Java Implementa il pattern MVC È stato completamente riscritto nella versione 2, a partire da un framework chiamato WebWorks Possiede concetti tipici di altri cosiddetti “lightweight framework” ● Convention over configuration ● Gestione dei cross-cutting concerns 22 MVC di Struts 2 23 MVC di Struts 2 ● Controller: FilterDispatcher ● Model: Action ● View: Result 24 FilterDispatcher ● È un Front Controller ● Associa ad ogni request una Action ● ● È una servlet che fa da filtro ad ogni request, “smistando” l'esecuzione delle azioni È necessario configurarlo, mappando le URL alle Action corrispondenti 25 FilterDispatcher: configurazione ● Ci sono due modi per configurare il controller: ● XML ● Java Annotations 26 Action ● ● ● Il Model è una “scatola vuota” che contiene la logica del dominio e i dati, ma la Action è il punto di accesso Il FilterDispatcher la invoca, passandole i dati della request Alla fine delle operazioni di business logic, i risultati vengono inviati al componente View 27 Result ● ● La View in una web application è una pagina web Struts supporta una gerarchia di View possibili, che implementano l'interfaccia Result ● ● JSP, Velocity, Freemarker, XSLT... Ogni Action può scegliere tra diverse result 28 Una request gestita da Struts 2 29 Una request gestita da Struts 2 ● Intorno ai grossi gestori ci sono componenti non meno importanti: ● Interceptors ● ValueStack ● OGNL ● ActionContext 30 Interceptors ● ● ● ● ● Gli interceptor modificano il comportamento del controller Aggiungono funzionalità generali, per l'intera applicazione Sono in serie, funzionano da filtro o, meglio, da Decorators Vengono eseguiti prima del processing della request, e subito dopo Non tutti gli interceptor svolgono funzioni sia in un verso che nell'altro 31 Interceptors ● Esempio: Logging ● ● ● È una funzionalità che vale per ogni Action, ma non vogliamo reimplementarla ogni volta Altri esempi: ● Conversione di tipo ● Data validation ● File upload Struts 2 Ha già una grossa libreria di Interceptors standard 32 ValueStack ● ● ● È un'area usata come interscambio di dati tra i vari componenti che gestiscono una request Invece di passare i dati da un oggetto all'altro, si usa il ValueStack come deposito centralizzato I dati vengono trasferiti qui durante l'inizio della request, manipolati dalla Action e infine letti dalla Result 33 OGNL ● ● Object Graph Navigation Language È un linguaggio che permette di usare riferimenti a oggetti sul ValueStack 34 ActionContext ● Contiene tutti i dati riguardanti il processing di una request ● ● ● ValueStack e un certo numero di oggetti usati internamente da Struts È implementato tramite ThreadLocal, ovvero sono dati locali per un certo thread (invisibili per gli altri) Ogni request è gestita da un thread a sé, dall'inizio alla fine, quindi ActionContext è sempre presente 35 ActionContext ● ● Anche se è possibile accedere all'ActionContext e al ValueStack direttamente, non si dovrebbe È considerata buona pratica utilizzare, invece, OGNL 36 Esempio 1: Hello World ● ... 37 Configurazione del web.xml ● Il FilterDispatcher deve essere impostato tramite il tag <filter> ● ● Il tag <filter> ha una funzionalità simile a <servlet>, ma permette di filtrare le url, ad esempio per estensione In questo modo possono esistere più servlet/filter che cooperano 38 Configurazione: struts.xml ● Contiene la configurazione del framework ● ● ● Si possono settare proprietà Si possono definire le Action e le corrispondenti Result La configurazione può essere in parte gestita da file di proprietà 39 Modularità della Configurazione ● ● La configurazione è modulare Si può suddividere la configurazione in più file XML, richiamandoli con il tag <include> 40 La classe Action ● ● ● Praticamente non c'è codice Java, eccettuato quello nei file JSP Struts in automatico crea un oggetto Action vuoto per ogni <action> che non ha oggetti associati L'esecuzione della Action in questo caso si limita a passare il controllo al JSP predefinito 41 Creare una nuova Action ● ● ● Le Action vuote sono rare, perché non contengono business logic Si possono creare action implementando l'interface Action, oppure rispettando dei vincoli di convenzione Si deve implementare il metodo astratto execute() 42 Scelta della Result View ● ● ● Come si sceglie quale sarà la View da renderizzare dopo la Action? Il metodo execute() restituisce una stringa Struts confronta la stringa con quelle definite nella configurazione XML, associate a pagine JSP 43 Componenti della URL 44 Dati della request nella Action ● ● Struts sposta in automatico i parametri della request, ad esempio i dati inseriti in una form, alla Action Tutto avviene tramite JavaBeans Properties 45 JavaBeans ● Sono normali classi che rispettano una determinata convenzione: ● Hanno un costruttore senza argomenti ● Sono serializzabili ● Le variabili membro (proprietà) devono essere accessibili tramite funzioni di get() e set(), con nomi convenzionali – getName(), setName(), getRealName(), setRealName().. 46 Dati della request nella Action (2) ● ● Ogni Action è un JavaBean che mantiene dentro sé: ● Dati della logica applicativa ● Dati provenienti da una http request Il riempimento dei secondi lo fa in automatico Struts, se seguiamo le convenzioni ● la proprietà deve avere lo stesso nome definito nella casella di input (<s:textfield>) 47 Dati della Action nella View ● ● Il passaggio dei dati alla View avviene allo stesso modo Usiamo il tag <s:property> per accedere a una proprietà della nostra Action 48 E il ValueStack? ● ● ● Come già detto, non usiamo il ValueStack direttamente La Action con tutti i suoi dati viene copiata nel ValueStack Accediamo alle sue proprietà tramite espressioni OGNL ● Nel nostro caso sono semplici nomi 49 Passaggio dei dati 50
Documenti analoghi
Java (Servlet e Java Server Pages)
Le Servlet sono classi Java eseguite lato server per
esaudire le richieste provenienti dai web server. Esse
non sono legate ad un particolare protocollo per la
comunicazione tra client e server, an...
scarica pdf appunti t.a.w. - Buc Space Invasion [Java/AWT]
10.2 Denizione delle interfacce e delle classi
10.2.1 javax.servlet.Servlet