Servlet e Java Server Pages

Slides:



Advertisements
Presentazioni simili
Active Server Pages ed ADO. Scrivere ASP Le pagine ASP possono contenere codice HTML o XML Le parti del documento che racchiudono codice script vanno.
Advertisements

TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
Costruttori e Distruttori
Applet Java.
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
PHP.
INTERNET : ARPA sviluppa ARPANET (rete di computer per scopi militari)
Java Enterprise Edition (JEE)
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Mantenimento dello stato Laboratorio Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Università degli Studi di Modena e Reggio Emilia
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Frontespizio Economia Monetaria Anno Accademico
Università La Sapienza Web programming e programmazione multimediale 1 Web Programming e comunicazione multimediale Lezione 10: PHP.
Programmazione Procedurale in Linguaggio C++
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Corso di Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Un framework per il pattern MVC
Approfondimento delle classi
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Strutture di controllo in C -- Flow Chart --
Elaborazione di Franco Grivet Chin
Struts. Framework open source per lo sviluppo di applicazioni web su piattaforma J2EE. Progetto inizialmente sviluppato come sotto-progetto di Apache.
Corso Java/J2EE per PM/software architect Servlet
Struts. Framework open source per lo sviluppo di applicazioni web su piattaforma J2EE. Progetto inizialmente sviluppato come sotto-progetto di Apache.
Architettura Java/J2EE
Corso di PHP.
Portale Capacità STOGIT
Ing. Enrico Lecchini BetaTre S.r.l.
Javascript: fondamenti, concetti, modello a oggetti
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Fondamenti di JSP: Introduzione
Sistemi Informativi sul Web
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
ASP – Active Server Pages - 1 -Giuseppe De Pietro Introduzione ASP, acronimo di Active Server Pages, sta ad indicare una tecnologia per lo sviluppo di.
Java Enterprise Edition
Astrazione procedurale ed eccezioni
INTRODUZIONE A JAVASCRIPT
Protocolli e architetture per WIS. Web Information Systems (WIS) Un Web Information System (WIS) usa le tecnologie Web per permettere la fruizione di.
Programmazione ad oggetti
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
Laboratorio di Servizi Web - servlet - Ardissono 1 Java Servlet API package javax.servlet: include classi e interfacce di gestione di servlet indipendenti.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Introduzione a Javascript
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Analisi dettagliata e design
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Laboratorio di Servizi Web - servlet - Ardissono 1 Chiarimenti su Servlet Note aggiuntive su architettura di applicazione web che usa Servlet per gestire.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Eprogram informatica V anno.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
ASP – Active Server Pages - 1 -Giuseppe Tandoi ASP – Active Server Pages Tecnologia per lo sviluppo di pagine dinamiche.
Transcript della presentazione:

Servlet e Java Server Pages Servlet sono ottime per programmare applicazioni Server side complesse, ma poco adatte a generazione di interfaccia utente JSP introdotte per facilitare stesura di interfaccia utente permettono scrittura diretta di codice HTML, anzichè richiedere inserimento di codice in PrintWriter, riga per riga permettono di inserire codice java (scriptlets) per implementare semplici operazioni Laboratorio di Servizi Web - JSP - Ardissono

Java Server Pages - I Volte a semplificare creazione e gestione di pagine dinamiche (sintatticamente simili a PHP e ASP) Combinano markup statico (HTML) con tag di scripting <%@page import="java.util.Date"%> <html> <body> The current time is <%= (new Date()).toString() %> </body> </html> http:130.192.241.1:10000/swebi/data.jsp data.jsp Salvare temporaneamente data.jsp a root di contesto (swebi) Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Java Server Pages - II Basate su tecnologia Servlet Da JSP Web Container genera Servlet S equivalente S contiene package e imports necessari S implementa metodo doGet/doPost che crea pagina di output di JSP (usa PrintWriter, definisce formato di output, scrive su PrintWriter per generare codice HTML statico, permette invocazione di metodi java) Generazione e compilazione avvengono a primo richiamo di JSP da parte di client (translation time) Poi ogni richiamo di JSP causa esecuzione di S (run time) Laboratorio di Servizi Web - JSP - Ardissono

Translation time e run time JSP <JSP tags> <java code> usa JSP <JSP tags> <java code> Prima richiesta Web browser JSP <JSP tags> <java code> usa Traduzione Risposta generata Servlet Richieste successive Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Espansione di JSP Web Container implementa interfaccia javax.servlet.jsp.HttpJspPage Da pagina JSP Web Container genera Servlet che estende implementazione di HttpJspPage javax.servlet.jsp.HttpJspPage public void jspInit(): metodo invocato da Web Container a tempo di inizializzazione di servlet generata public void jspDestroy(): invocato a tempo di distruzione di servlet public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException: ad ogni HTTP request Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Struttura di una JSP A metà tra pagina statica e Servlet. Contiene codice java racchiuso tra <% e %> tag HTML e XML-like testo, ... Categorie di JSP tag JSP Directives Scripting elements Actions <%@page import="java.util.Date"%> <html> <body> The current time is <%= (new Date()).toString() %> </body> </html> data.jsp Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono JSP directives <%@ directiveName attribute=“value” attribute=“value” ... %> Es: <%@page import="java.util.Date"%> istruzioni che danno specifiche per generazione di codice effettuata da Web Container quando crea Servlet non producono output per generazione di risposta a invocazione di JSP influenzano intera pagina JSP (non altre pagine di applicazione) Directives: page, include, taglib Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono JSP directives - page <%@ page attribute=“val” attribute=“val” ... %> Es: <%@page import="java.util.Date,java.rmi.*” session=“true” isThreadSafe=“true” %> JSP può contenere + page directives ma ciascun attributo (eccetto import) può comparire al più una volta Alcuni attributi (vd libro per gli altri) import: specifica classi da importare per esecuzine di JSP session: specifica se pagina partecipa ad HttpSession Se session=“true” pagina può usare oggetto implicito session per accedere a dati di sessione utente se session=“false” non si gestisce sessione utente default: session=“true” errorPage: specifica URL di pagina JSP di applicazione invocata in caso di eccezioni Laboratorio di Servizi Web - JSP - Ardissono

JSP directives - include - I <%@ include file=“fileName” %> specifica che durante generazione di Servlet il Web Container deve includere risorsa specificata fileName: path relativo a contesto di applicazione <%@page import="java.util.Date"%> <html> <body> The current time is <%= (new Date()).toString() %> <%@ include file=”JSP-EX/prova.html" %> </body> </html> swebi src JSP-EX WEB-INF Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono prova.html Laboratorio di Servizi Web - JSP - Ardissono

JSP directives - include - II Contenuto di file incluso è analizzato sintatticamente a translation time si possono includere vari tipi di file: html, jsp, … Es: esempio.jsp contiene il seguente directive: <@% include file=“JSP-EX/inclusa.jsp” %> inclusa.jsp contiene codice <%@page import="java.util.Date"%> <%= “data odierna: “ + new Date() %> se file modificato, non è garantito che Web Container ricompili automaticamente JSP Laboratorio di Servizi Web - JSP - Ardissono

JSP directives - include - III Servlet generata a partire da JSP (circa…) public class esempio extends javax.servlet.jsp.HttpJspPage ... { public void _jspService(HttpServletRequest request, HttpServletResponse response) throws … { ... out.write(“<html>\r\n >head>\r\n ….. out.print(“data odierna: “ + new Date()); … out.close(); } } Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono NB: packaging di JSP Potete organizzare le JSP in directory sotto vostro contesto di applicazione ma directory deve essere leggibile e attraversabile da tutti la prima JSP invocata per accedere ad applicazione deve stare sotto swebi (se no web container inserisce JSP-EX in path relativi) swebi src JSP-EX WEB-INF Laboratorio di Servizi Web - JSP - Ardissono

JSP directives - taglib (cenni) <%@ taglib uri=“tagLibraryURI” prefix=“tagPrefix” %> Directive taglib permette che pagina JSP utilizzi tag extensions (custom tags) tag extensions: si definiscono tag associati a codice java directive taglib specifica tag library contenente codice java compilato che definisce tag da usare URI di descrittore di libreria di tag Prefisso da usare per identificare tag library <myTag:tagname … /> Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Scripting elements Permettono di inserire codice java in pagina JSP dichiarazioni di variabili dichiarazioni di metodi scriptlets: blocchi di codice eseguiti quando client richiede pagina JSP espressioni <%! int anno = 2003; public String saluta(String name) { return “Ciao, “ + name + “!!”; } %> <html><head>…</head> <body> <p> Ciao <%= saluta(“carissimo”)%>, siamo nel <%= anno %> </body></html> Dichiarazioni di variabili e metodi Espressione Espressione Laboratorio di Servizi Web - JSP - Ardissono

Scripting elements: dichiarazioni di variabili e metodi <% dichiarazioni di variabili e metodi java %> inserite come elementi globali in Servlet generata variabili inizializzate quando Servlet inizializzata non producono output <%! int anno = 2003; public String saluta(String name) { return “Ciao, “ + name + “!!”; } %> <html><head>…</head> <body> <p> Ciao <%= saluta(“carissimo”)%>, siamo nel <%= anno %> </body></html> Dichiarazioni di variabili e metodi Laboratorio di Servizi Web - JSP - Ardissono

Scripting elements: scriptlets - I <% statements java %> blocchi di codice java eseguiti a tempo di processamento di richiesta HTTP possono produrre output per client se pagina contiene più scriptlets, questi vengono combinati e Servlet generata li contiene nell’ordine in cui appaiono in JSP Laboratorio di Servizi Web - JSP - Ardissono

Scripting elements: scriptlets - II <html><head>…</head> <body> <h1> prova di scriptlet </h1> <% for (int i=0; i<5; i++) { out.println(“ciao n. “ + i); } %> </body></html> testScriptlet.jsp http:130.192.241.1:10000/swebi/JSP-EX/testScriptlet.jsp Laboratorio di Servizi Web - JSP - Ardissono

Scripting elements: scriptlets - III In JSP si può inserire codice statico in scriptlets, utilizzando statement complessi (con parentesi graffe) <html><head>…</head> <body> <h1> prova di scriptlet complessa </h1> <% if (18>= request.getParameter(“age”)) { %> Sei maggiorenne, dunque puoi votare!! <% } else { %> Mi spiace, ancora non hai diritto di voto. <% } %> </body></html> Molto simile a PHP e ASP. Poco leggibile testScriptlet2.jsp Laboratorio di Servizi Web - JSP - Ardissono

Scripting elements: espressioni <%= espressione java da valutare %> Permettono di valutare espressioni java (invocazione metodi, valutazione variabili) e inviare risultato a client in output stream (String) Sono scriptlets abbreviate <%! int anno = 2003; public String saluta(String name) { return “Ciao, “ + name + “!!”; } %> <html><head>…</head> <body> <p> Ciao <%= saluta(“carissimo”)%>, siamo nel <%= anno %> </body></html> Espressione Espressione Laboratorio di Servizi Web - JSP - Ardissono

Scriptlets e JavaBeans Utile per applicazioni molto semplici Se si inserisce troppo codice in JSP pagine risultano difficili da leggere si perde separazione tra aspetti di interfaccia e di sviluppo di logica applicativa (obiettivo iniziale di sviluppo di JSP!) Introdotto uso di Java Beans per separare logica applicativa da markup in JSP JSP include markup HTML e invocazione di metodi su bean Java Bean implementa codice dei metodi (accesso a DB, …)  meno codice java presente in JSP Laboratorio di Servizi Web - JSP - Ardissono

JSP: Architettura Model 1 Web server request 4 response Web browser 2 Web browser JavaBean 3 Web container Laboratorio di Servizi Web - JSP - Ardissono

JSP e java beans – acquisizione dati da form In JSP si può dichiarare che si utilizza istanza di classe (JavaBean) per salvare parametri di richieste HTTP recuperare valore di tali parametri quando serve dati (parametri) acquisiti attraverso form in JSP vengono “automaticamente” salvati in properties del bean usato da JSP bean serve come raccoglitore di dati acquisiti da form Laboratorio di Servizi Web - JSP - Ardissono

Esempio - form parametro “login” parametro “tipoInfo”: no, nomi, cc Invocazione di JSP che usa javaBean (SimpleBean.java) Laboratorio di Servizi Web - JSP - Ardissono

Esempio - Estratto di JSP Dichiarazione bean usato <jsp:useBean id=“sBean" scope="page" class="application.other.SimpleBean"/> <jsp:setProperty name=“sBean" property="*"/> <HTML> <HEAD>...</HEAD> <BODY> … <p><center> Ciao <jsp:getProperty name=“sBean" property="login"/> ! </center> </p> <p> Hai richiesto la seguente operazione: <jsp:getProperty name=“sBean" property="tipoInfo"/> </BODY></HTML> Salva valore dei parametri di richiesta HTTP con nome = property di bean Recupera valore property per visualizzaz Visualizza codice interno di operaz scelta Laboratorio di Servizi Web - JSP - Ardissono

Esempio - Pagina visualizzata Ciao liliana! Hai richiesto la seguente operazione: nomi Laboratorio di Servizi Web - JSP - Ardissono

Esempio : SimpleBean.java package …; public class SimpleBean { private String login; private String tipoInfo; public SimpleBean() { } public void setLogin(String login) {this.login = login; } public String getLogin() {return login; } public void setTipoInfo(String tipoInfo) {this.tipoInfo = tipoInfo;} public String getTipoInfo() {return tipoInfo;} } Properties con nome che coincide con parametri di HTTPServletRequest memorizza login di utente (login) e tipo di info richieste da utente (tipoInfo) Laboratorio di Servizi Web - JSP - Ardissono

Commenti Bean associato a singola JSP (scope=“page”) <jsp:useBean id=“sBean" scope="page" class="application.other.SimpleBean"/> <jsp:setProperty name=“sBean" property="*"/> <HTML> … Ciao <jsp:getProperty name=“sBean" property="login"/> ! </center> </p> ….. Salvataggio dati utente: istanza di bean salva variabili di stato localmente ad esecuzione di JSP (se bean vivesse per tutta la sessione utente lo potrebbero usare anche altre JSP per recuperare variabili di stato (vd dopo) Laboratorio di Servizi Web - JSP - Ardissono

JSP e java beans – logica applicativa Istanza di Java Bean usata anche per eseguire metodi di gestione di logica applicativa (in base a dati forniti da utente via form HTML) definizione di metodi aggiuntivi rispetto a quelli di gestione di properties associate ai parametri di richieste HTTP Tali metodi sono invocati da JSP per gestire richieste utente Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Java Bean Java Bean: Classe che definisce il bean deve seguire standard di definizione dei javaBeans getXXX di ogni proprietà XXX del javaBean, per leggere valore di property setXXX di ogni proprietà XXX del javaBean, per assegnare valore a property Logica applicativa può essere implementata definendo metodi di setXXX() e getXXX() che effettuano i servizi necessari Laboratorio di Servizi Web - JSP - Ardissono

Gestione logica applicativa - esempio esteso Ciao franca! Hai richiesto la seguente operazione: nomi persone (codice interno: nomi) Formato esterno tradotto da bean (logica applicativa) Valore parametro “tipoInfo” Laboratorio di Servizi Web - JSP - Ardissono

Estratto di JSP – esempio esteso <jsp:useBean id="opBean" scope="page" class="application.other.OPBean"/> <jsp:setProperty name="opBean" property="*"/> <HTML> <HEAD><TITLE>...</TITLE></HEAD> <BODY> <h1> … </h1> <p><center> Ciao <jsp:getProperty name="opBean" property="login"/> ! </center></p> <p> Hai richiesto la seguente operazione: <jsp:getProperty name="opBean" property="operazione"/> (codice interno <jsp:getProperty name="opBean" property="tipoInfo"/> ) </p> </BODY></HTML> Invocazione metodo di traduzione (logica app) Laboratorio di Servizi Web - JSP - Ardissono

OPBean.java - I package application.other; public class OPBean { private String login; private String tipoInfo; public OPBean() { } public void setLogin(String login) {… } public String getLogin() public void setTipoInfo(String tipoInfo) public String getTipoInfo() Properties con nome che coincide con parametri di HTTPServletRequest Laboratorio di Servizi Web - JSP - Ardissono

OPBean.java - II Metodo di gestione public String getOperazione() { di logica applicativa public String getOperazione() { String out = ""; if (tipoInfo.equals("no")) out = "nessuna informazione"; else if (tipoInfo.equals("nomi")) out = "nomi persone"; else if (tipoInfo.equals("cc")) out = "conti correnti bancari"; else out = "tipo di informazione non gestita"; return out; } } //chiusura bean Logica applicativa (semplice, ma potrebbe prevedere accesso a DB) NB: metodo usa altri valori inseriti da utente e salvati in Java Bean (variabili di stato) Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono JSP Standard actions Tag predefiniti che influenzano comportamento di JSP a run-time e risposta inviata a client. Implementati da tutti i Web Container Associati a codice java che viene inserito da Web Container quando genera Servlet per JSP jsp:useBean (per invocare oggetti esterni: java bean) jsp:setProperty (gestione properties di bean) jsp:getProperty (interrogazione java beans) jsp:param (parametri richieste HTTP) jsp:include (inclusione risorse) jsp:forward (forward a risorse) jsp:plugin (inclusione applet) Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:useBean Sintassi <jsp:useBean id=”name" scope=”sc" bean_details /> usata per istanziare JavaBean o per identificare istanza di bean esistente e specificare identificatore scope: specifica visibilità di bean page: visibilità associata a richiesta specifica di pagina request: bean associato a richiesta HTTP  visibile ad altre JSP incluse, o a cui si fa forward di richiesta session: associato a sessione utente application: visibile da tutte JSP di applicazione Laboratorio di Servizi Web - JSP - Ardissono

Uso di istanze di Java Bean in diverse JSP <jsp:useBean id=”name" scope=”sc" bean_details /> Se scope di Java Bean è session, istanza di java bean creata da prima JSP invocata e usata da altre JSP durante sessione utente Gestione di istanza di Java Bean Basata su id (“name”) associato a istanza di Java Bean Tutte le JSP devono usare stesso id con stesso scope Web Container cerca istanza di bean con id richiesto nell’ambito dello scope specificato da JSP Se lo trova, lo usa come riferimento in esecuzione di JSP Altrimenti lo crea Laboratorio di Servizi Web - JSP - Ardissono

jsp:useBean – esempio I <%-- informa.jsp : questo è un commento per JSP --%> <jsp:useBean id="opBean" scope="page" class="application.other.OPBean"/> <jsp:setProperty name="opBean" property="*"/> <HTML> <HEAD><TITLE>...</TITLE></HEAD> <BODY> <h1> … </h1> <p><center> Ciao <jsp:getProperty name="opBean" property="login"/> ! Come stai? </center></p> <p> Hai richiesto la seguente operazione: <jsp:getProperty name="opBean" property="operazione"/> (codice interno <jsp:getProperty name="opBean" property="tipoInfo"/> ) </p> </BODY></HTML> Laboratorio di Servizi Web - JSP - Ardissono

jsp:useBean – esempio II <%-- informa.jsp : questo è un commento per JSP --%> <jsp:useBean id="opBean" scope="page" class="application.other.OPBean"/> <jsp:setProperty name="opBean" property="*"/> <HTML> <HEAD><TITLE>...</TITLE></HEAD> <BODY> <h1> … </h1> ... Dichiarazione di bean di nome opBean con proprietà di visibilità Salvo valore di tutti i parametri di richiesta HTTP con nome = property di bean Laboratorio di Servizi Web - JSP - Ardissono

jsp:useBean – esempio III ... <p><center> Ciao <jsp:getProperty name="opBean" property="login"/> ! Come stai? </center></p> <p> Hai richiesto la seguente operazione: <jsp:getProperty name="opBean" property="operazione"/> (codice interno <jsp:getProperty name="opBean" property="tipoInfo"/> ) </p> </BODY></HTML> Recupero valore di property “login” di bean (recupero parametro di richiesta…) NB: “operazione” non è parametro di richiesta Invoco metodo di bean che “gestisce” richiesta Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:setProperty <jsp:setProperty name=”beanName" property_details /> setta properties (semplici o indexate - array) di bean per settare proprietà di bean con nome = a parametri di richiesta HTTP <jsp:setProperty name=”beanName" property=“*” /> per settare properties specifiche (nome=parametro) <jsp:setProperty name=”beanName" property=“propName” /> property con nome  da parametri di richiesta HTTP <jsp:setProperty name=”beanName" property=“propName” param=“paramName” /> … vd libro Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:getProperty <jsp:getProperty name=”beanName” property=“prName” /> recupera valore di property di bean (convertendolo in String - toString(), valueOf()) per recuperare valori di richieste salvate in bean per invocare metodi di gestione di logica applicativa <jsp:getProperty name="opBean" property="operazione"/> invoca metodo getOperazione() di bean Se istanza di Java Bean ha scope più ampio di “page”, JSP può recuperare dati memorizzati in precedenti passi di interazione con utente Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:include - I <jsp:include page=”URL" flush=“true” /> <jsp:include page=”URL" flush=“true” > <jsp:param name=“parName” value=“parValue” /> </jsp:include> permette inserimento di risorsa statica o dinamica specificata da URL in JSP inclusione risorsa effettuato a request processing time  meno efficiente di directive include, ma adatto a includere risorse che cambiano spesso NB: Buffer usato da printWriter per mantenere dati temporanei da inviare a browser (si può scegliere dimensione minima di buffer da imporre a Web Container, che può allocare un buffer di tale dimensione o più grande) Permette specifica di ulteriori parametri rispetto a richiesta HTTP originale Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:include - II pagina inclusa può accedere a JSPWriter object, non può settare cookies o headers flush: specifica se buffer di output deve essere ripulito prima di includere la pagina o meno flush: default=false. Se true, buffer “flushed” prima di inclusione di pagina ( non si può fare forward ad altre risorse o usare error pages) jsp:include  directive include con directive include, risorsa inclusa a translation time e web container fa compilare la pagina ottenuta con jsp:include inclusione fatta a run time, no precedente compilazione. Adatto a includere Servlet java Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:param <jsp:param name=”parName" value=“parValue” /> usato in jsp:include e jsp:forward per invocare risorse aggiungendo parametri rispetto a quelli di HttpServletRequest originale specifica nuovi attributi come coppie <chiave, valore> Laboratorio di Servizi Web - JSP - Ardissono

Esempio di uso di java bean Sviluppiamo applicazione “Prova” che tramite form HTML permette a utente di richiedere 3 servizi: nessuna informazione (no), nomi persone (nomi) o dati su conti correnti bancari (cc) Form HTML invoca (post) JSP di gestione dei servizi JSP invoca bean per gestire il servizio richiesto, passando scelta utente come parametro, e raccoglie risultato da visualizzare in pagina per browser utente bean traduce richiesta utente da codice interno a esterno Es: da cc a conti correnti bancari, da no a nessuna informazione NB: metodi di bean potrebbero essere più complessi, e.g., accesso a DB per recupero dati Laboratorio di Servizi Web - JSP - Ardissono

Invocazione JSP da form HTML parametro “login” parametro “tipoInfo”: no, nomi, cc <FORM METHOD="POST" ACTION="informa.jsp"> Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono

Esempio di inclusione di Servlet <jsp:useBean id="opBean" scope="page" class="application.other.OPBean"/> <jsp:setProperty name="opBean" property="*"/> <HTML><HEAD> … </HEAD> <BODY ... <p><center>Ciao <jsp:getProperty name="opBean" property="login"/>! Come stai?</center></p> <p> Hai richiesto la seguente operazione: <jsp:getProperty name="opBean" property="operazione"/> (codice interno: <jsp:getProperty name="opBean" property="tipoInfo"/> )</p> <p>Ecco il risultato: sto per invocare la servlet application.servlets.Informazioni.java!! <jsp:include page="servlet/info" flush="true" /> </p> <CENTER> <INPUT TYPE="Submit" NAME="btnSubmit" VALUE="Submit request"> </CENTER> </FORM> </BODY></HTML> Include senza parametri extra Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:forward - I <jsp:forward page=”URL” /> <jsp:forward page=”URL"> <jsp:param name=“parName” value=“parValue” /> </jsp:forward> permette invio di richiesta ad altra risorsa di applicazione (pagina HTML, JSP, Servlet) flusso di esecuzione passa a risorsa invocata buffer viene ripulito prima di forward (non si fa merge di output delle due risorse) equivalente a metodo forward() di javax.servlet.RequestDispatcher Permette specifica di ulteriori parametri rispetto a richiesta HTTP originale Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:forward - II <HTML><HEAD>...</HEAD> <BODY> ... <% if (request.getParameter("login").equals(“raf”))  %> <jsp:forward page=“wellcomeRAF.jsp” /> <% } else  %> <%@ include file=“completeRegistration.html” %> <% } %> </BODY> </HTML> Laboratorio di Servizi Web - JSP - Ardissono

Standard actions - jsp:plugin Permette di includere java applet in pagine generate da JSP vd libro Laboratorio di Servizi Web - JSP - Ardissono

Oggetti Java impliciti request: rappresenta oggetto HttpServletRequest che ha originato invocazione di metodo service(). Visibilità: a livello di singola richiesta HTTP response: oggetto HttpServletResponse che rappresenta risposta a richiesta HTTP. Visibilità: a livello di pagina session: oggetto HttpSession generato da connessione di client. Visibilità: a livello di sessione config: oggetto ServletConfig associato a JSP queste variabili (e altre) possono essere usate esplicitamente in JSP perchè create a translation time (anche ASP etc. hanno “request”, “session”, …) Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Commenti JSP adatte a sviluppo di interfaccia utente di applicazioni facilitano specifica di layout di pagine nascondono in parte dettagli implementativi di applicazioni web JSP non adatte a gestione di logica applicativa inserimento di troppo codice java in pagina JSP causa poca leggibilità del codice compilazione di pagine evidenzia errori in codice di pagine in modo indiretto (compilazione avviene su Servlet espansa, non su JSP)  difficile fare debugging Laboratorio di Servizi Web - JSP - Ardissono

Architettura Model 1 – page centric In architettura Model 1 interfaccia utente composta di una o più JSP utente carica JSP home page di servizio esecuzione JSP invoca metodi di JavaBean per generare parti dinamiche di pagina da visualizzare su browser utente pagina visualizzata include bottoni e link per continuare interazione a seconda di azione utente, JSP opportuna viene invocata continua in modo simile Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Model 2 JSP hanno RequestDispatcher e offrono istruzioni include per includere risorse (pagina HTML, Servlet) forward per delegare risorse a gestione richiesta HTTP Per sviluppo di applicazioni complesse, meglio combinare JSP e Servlet (e pagine statiche) JSP e pagine statiche per gestione interazione con utente Servlet per gestione di attività di backend combinazione basata su pattern Model View Controller (Model 2) http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html Laboratorio di Servizi Web - JSP - Ardissono

JSP: Architettura Model 2 1 (controller) Servlet Web server request (Model) JavaBean 2 3 instantiate (view) JSP 5 4 response Web container Laboratorio di Servizi Web - JSP - Ardissono

Laboratorio di Servizi Web - JSP - Ardissono Architettura Model 2 Servlets per gestire logica applicativa JSP per generare presentation layer Servlet intercetta richieste utente (post, …) in base a valore di parametri di richiesta decide a quale JSP forwardare richiesta crea java beans necessari a JSP JSP recupera oggetti e beans creati da Servlet estrae da oggetti contenuto dinamico da visualizzare in pagina da inviare a browser utente Laboratorio di Servizi Web - JSP - Ardissono

Architettura Model 2 – Esempio Music without borders: negozio elettronico Interfaccia utente realizzata con diverse JSP che generano porzioni diverse di interfaccia es: pagina principale include JSP di visualizzazione di carrello spesa pagina di checkout (chiusura interazione) Servlet gestisce flusso di interazione scegliendo JSP a cui forwardare richieste utente ad ogni passo Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – pagina principale - I Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – pagina principale - II <%@ page session="true" %> <html><head><title>Music Without Borders</title></head><body> <font face="Times New Roman,Times" size="+3">Music Without Borders</font> <hr><p><center> <form name="shoppingForm" action="/examples/servlet/ShoppingServlet"   method="POST"> <b>CD:</b> <select name=CD>   <option>Yuan | The Guo Brothers | China | $14.95</option> …  <option>Ibuki | Kodo | Japan | $13.95</option> </select> <b>Quantity: </b><input type="text" name="qty" SIZE="3" value=1> <input type="hidden" name="action" value="ADD"> <input type="submit" name="Submit" value="Add to Cart"> </form> </center></p> <jsp:include page="Cart.jsp" flush="true"/> </body></html> Include JSP di carrello spesa: visualizza prodotti già scelti Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – pagina principale - III Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – pagina carrello - I <%@ page session="true" import="java.util.*, shopping.CD" %> <% Vector buylist = (Vector) session.getValue("shopping.shoppingcart"); if (buylist != null && (buylist.size() > 0)) { %> <center> <table border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF"> <tr> <td><b>ALBUM</b></td> <td><b>ARTIST</b></td> … <td><b>QUANTITY</b></td> <td></td> </tr> <% for (int index=0; index < buylist.size();index++) {    CD anOrder = (CD) buylist.elementAt(index); %> <tr> <td><b> <%= anOrder.getAlbum() %> </b></td>    ….     <td><b> <%= anOrder.getQuantity() %> </b></td>    <td><form name="deleteForm“ action="/examples/servlet/ShoppingServlet“ method="POST">    <input type="submit" value="Delete">    <input type="hidden" name= "delindex" value='<%= index %>'>    <input type="hidden" name="action" value="DELETE"> </form> </td> </tr>  <% } %> <\table>   Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – pagina carrello    <p>   <form name="checkoutForm"     action="/examples/servlet/ShoppingServlet" method="POST">     <input type="hidden" name="action" value="CHECKOUT">     <input type="submit" name="Checkout" value="Checkout">   </form>   </center> <% } %> NB: questo codice è vecchio, parziale e potrebbe contenere errori… vediamolo solo per capire come si integrano Servlet e JSP in Model 2 Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – Servlet (controller) - I public class ShoppingServlet extends HttpServlet { … …  public void doPost (…) throws … { HttpSession session = req.getSession(false); if (session == null) {forward a pagina error.html);} Vector buylist = (Vector)session.getValue("shopping.shoppingcart"); String action = req.getParameter("action");  if (action.equals("DELETE")) {elimina item da carrello (buyList);} else if (action.equals("ADD")) {aggiunge item a carrello;}    session.putValue("shopping.shoppingcart", buylist); String url="/jsp/shopping/EShop.jsp"; ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(req, res); } else if (action.equals(“CHECKOUT”) … Forward a pagina principale (Eshop.jsp) Laboratorio di Servizi Web - JSP - Ardissono

Music without borders – Servlet (controller) else if (action.equals("CHECKOUT"))  {       amount = calcola prezzo da pagare;}       req.setAttribute("amount",amount);       String url="/jsp/shopping/Checkout.jsp";       ServletContext sc = getServletContext();       RequestDispatcher rd = sc.getRequestDispatcher(url);       rd.forward(req,res);     }   } // fine servlet Invia controllo a pagina Di checkout (Checkout.jsp) Laboratorio di Servizi Web - JSP - Ardissono