Un esempio complesso

Documenti analoghi
MyShopDB = MyShop + MySQL

MyShopDB = MyShop + MySQL

Un contatore di accessi

Visualizzazione ordini in MyShopDB

I file WAR. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-1

JSP Caso di studio 2: myshop

Servlet: approfondimenti

Osservazioni. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-1

Note pratiche sullo sviluppo di servlet (I)

I file WAR. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2004/05-1

Ciclo di vita di una Servlet

Introduzione alle JSP

Il linguaggio PHP. Insegnarvi tutto il PHP? Non esattamente Obiettivo: insegnarvi ad interagire via web con una base dati

Dichiarazione FGas: Istruzioni per eseguire il caricamento massivo delle dichiarazioni

Le basi del linguaggio Java

Tema Di Progetto 1 Descrizione

D B M G Il linguaggio HTML

Programmazione Web D B M G. Il linguaggio HTML

Tabelle. Esempio 20. Inserire righe e colonne. Dimensioni delle tabelle. Attributi del tag TABLE INFO WEB LEZIONE N.6

@2011 Politecnico di Torino 1

// Costante utilizzata per definire il numero massimo di serie che il programma può generare.

Note ed esercizi aggiuntivi

Programmazione Web D B M G. Il linguaggio HTML

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.

Visualizzazione ordini in MyShopDB

D B M G. Basi di dati. Programmazione Web: HTML. Programmazione Web. Il linguaggio Politecnico di Torino 1

Eccezioni Precisazioni e approfondimenti

Guida Aree di Fermata

Esempio su strutture dati dinamiche: ArrayList

D B M G. Basi di dati. Programmazione Web: HTML. Programmazione Web. Il linguaggio Politecnico di Torino 1

Dichiarazione FGas: Istruzioni per eseguire il caricamento massivo delle dichiarazioni

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.

Capitolo 13: Gestione delle eccezioni. Capitolo 13. Gestione delle eccezioni Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

Linguaggio HTML. Reti. Il Linguaggio HTML. Il Linguaggio HTML. Il Linguaggio HTML

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.

Corso di Reti di Calcolatori T

@2011 Politecnico di Torino 1

JavaScript. Caratteristiche del JavaScript. Javascript consente di rendere dinamiche le pagine HTML

@2011 Politecnico di Torino 1

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione Riepilogo

Lato client: vuol dire che le operazioni programmate vengono svolte e visualizzate direttamente sul computer dell'utente collegato

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione 09 Riepilogo

IMPOSTA DI SOGGIORNO

Servlet e JDBC. Programmazione in Rete e Laboratorio

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

PIATTAFORMA DI CANDIDATURA

JQuery. <script src=" </script> <script src= js/main.

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet:


Linee guida per la compilazione del Piano di Studio

Guida introduttiva al PHP

Mantenimento dello stato

Soluzione 1: controller per la pagina di dettaglio delle categorie

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti

Sistema di Teleraccolta EMITTENTI

NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) E N G I N E = I

MS Access: Tutorial Tabelle, Relazioni

Programma operativo Fondo sociale europeo della Provincia Autonoma di Trento. BUONI DI SERVIZIO Giuda al caricamento del Tariffario

Quaderno 4: Progetto di una base di dati e realizzazione di un applicazione web

Esercizi su JavaScript, DOM e Web Storage

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

CoderDojo Firenze. Filetto a 5. Il filetto si gioca su una griglia ampia a piacere, e l'obiettivo è mettere in file 5 segni uguali.

Informatica di base Laboratorio di HTML Dott. Serena Villata A.A. 2004/05

Programmazione Web. Javascript.

Osservazioni. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-1

3.3.6 Gli operatori Le funzioni di accesso al tipo Le strutture di controllo Le funzioni

Verso l architettura MVC-2 Java Server Pages (JSP)

Verso l architettura MVC-2 Java Server Pages (JSP)

2.5 Sottomaschere e Report avanzati MODULO L2

Fondamenti di Informatica

HTML: FORM. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

GUIDA AL CATALOGO RICAMBI ONLINE

Fondamenti di Informatica T-1

Reti di calcolatori Prova scritta 25 luglio 2016

HTML. Es: La prossima parola è in <b>neretto</b> Es: La prossima parola è in neretto

Introduzione. Applicazione web con Java. servlet

Guida Quiz Patenti Nautiche

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione Riepilogo

Corso di Reti di Calcolatori L-A

Bando Sostegno alla creazione di Impresa Modalità di presentazione dei progetti.

Indice. Ricerca richiesta d offerta. Risultati della ricerca Navigazione Stati

Utilizzo di Fiery WebSpooler

03FYZ TECNICHE DI PROGRAMMAZIONE Esercitazione di Laboratorio 03 es.1 23 Marzo 2016

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

1. Schema concettuale della base di dati PROGETTO CONCETTUALE SCHEMA ER

Linguaggi di Programmazione

LEZIONE NO. 3: LE TABELLE DI ATTILIO ABBIEZZI

Ministero per i Beni e le Attività Culturali

1. (6 punti) Spiegare il significato, in modo dettagliato, del pezzo di codice seguente di una servlet:

Il Web come Interfaccia Utente di un Sistema Informativo

Fondamenti di Informatica T-1. Classi e array

Transcript:

Un esempio complesso Costruiamo un applicazione web di una certa complessità. Vogliamo realizzare un front-end (interfaccia verso gli utenti) di un sito che vende dei prodotti online. Quindi le pagine principali saranno: home page, catalogo dei prodotti disponibili, pagina per aggiungere un prodotto nel carrello, pagina per gestire il carrello (modifica quantità, ecc.), pagina per effettuare un ordine. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-1

Utilizziamo JSP Utilizziamo ancora i file per memorizzare i dati in base ai quali costruiremo dinamicamente le pagine. Sfruttiamo il supporto per le sessioni in JSP per tener traccia del carrello (i.e., i prodotti selezionati) del client. Cerchiamo di non ripetere lo stesso codice (HTML e/o Java) in più pagine, utilizzando la direttiva include. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-2

Il codice Il codice è scaricabile da: www.dimi.uniud.it/scagnett/labtecls3 mitel.dimi.uniud.it/med Scaricare il file.zip e decomprimerlo all interno della directory servlets dentro la propria home directory. Assicurarsi che in /home/<user>/servlets/web-inf ci sia una cartella data (dovrebbe essere già presente in quanto utilizzata dalla servlet per gestire il login: lezione 6). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-3

Architettura di MyShop (flusso logico) index.jsp prodotti.jsp aggiorna.jsp inserisci.jsp elimina.jsp svuota.jsp invia.jsp ordina.jsp Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-4

Architettura di MyShop: pagine principali index.jsp: home page del sito (punto di partenza); prodotti.jsp: pagina con l elenco dei prodotti ordinabili; inserisci.jsp: pagina per l inserimento e la visualizzazione dei prodotti nel carrello; ordina.jsp: pagina con il modulo d ordine. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-5

Architettura di MyShop: pagine ausiliarie aggiorna.jsp: aggiorna le quantità dei prodotti presenti nel carrello; elimina.jsp: elimina un singolo prodotto dal carrello; svuota.jsp: svuota interamente il carrello. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-6

Architettura di MyShop: file include I file seguenti sono inclusi nelle pagine del sito per mezzo di opportune direttive include: banner.jsp: contiene il banner del sito (con logo e data corrente); footer.jsp: piè di pagina; heading.jsp: intestazione (tag <HEAD>); menu.jsp: menu di navigazione nel sito. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-7

Osservazioni sui file include E possibile includere con la direttiva include sia file dinamici (.jsp) che statici (.html). Anche se un file da includere contiene solo risorse statiche, risulta comunque preferibile utilizzare l estensione dinamica jsp; infatti se in futuro si renderà necessario includere del codice in tale file, non sarà necessario modificare tutte le direttive che lo utilizzano per aggiornarne l estensione. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-8

Il file prodotti.txt Il file prodotti.txt è un semplice file di testo che contiene le informazioni di un prodotto per ogni linea. Le informazioni su ogni linea sono organizzate in campi (separatore: #); la prima linea contiene l intestazione (per la tabella HTML che verrà generata in prodotti.jsp): ID#Prodotto#Descrizione#Prezzo ( )#Q.tà a magazzino 1#HD Seagate 80 GB#7200 RPMS, Controller Serial Ata#80,00#10 2#Philips 107B#Monitor 17", CRT#200,00#5 3#RAM 512 MB#Modulo SDRAM 512 MB (Kingston)#130,00#100 Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-9

index.jsp (I) La struttura di index.jsp è la stessa delle altre pagine principali: <%@ page import="java.util.date" %> <html> <%@ include file="heading.jsp" %> <body> <table width="100%" border="0"> <tr> <td colspan="2" class="blubg"> <%@ include file="banner.jsp" %> </td> </tr>... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-10

index.jsp (II) <tr> <td width="10%" class="blubg" valign="top"> <%@ include file="menu.jsp" %> </td> <td align="center" width="90%"> <div class="intestazione">benvenuti su MyShop!</div> </td> </tr> <tr> <td colspan="2"> <%@ include file="footer.jsp" %> </td> </tr> </table> </body> </html> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-11

prodotti.jsp (I)... <%try { String filepath=getservletcontext(). getrealpath("/myshop/prodotti.txt"); BufferedReader input = new BufferedReader( new FileReader(filePath)); %> <div class="intestazione"> </div> <div class="intestazione">catalogo dei prodotti disponibili:</div> <div class="intestazione"> </div> <table border="0" cellpadding="5"> <%String linea=input.readline(); String[] intestazione=linea.split("#"); %> <tr> <% for(int i=1; i<intestazione.length; i++) { %> <td class="intestazione_tabella"><%= intestazione[i]%></td> <% } %> <td class="intestazione_tabella">q.tà da ordinare</td> <td class="intestazione_tabella">inserisci nel carrello</td> </tr> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-12 Stampa dell intestazione della tabella

prodotti.jsp (II) Nei sorgenti disponibili sulla pagina del corso, il codice è più complesso per formattare la valuta in modo appropriato. <% int riga=0; while((linea = input.readline())!= null) { riga++;%> <tr> <form method="post" action="inserisci.jsp"> <% String[] celle = linea.split("#"); for(int i=1; i<celle.length; i++) { %> <td class='<%= riga%2==0? "riga2_tabella" : "riga1_tabella"%>'> <%= celle[i]%></td> <% } %> <td class='<%= riga%2==0? "riga2_tabella" : "riga1_tabella"%>'> <input type="text" name="qt" value="1" size="2"> </td> <td class='<%= riga%2==0? "riga2_tabella" : "riga1_tabella"%>'> <input type="submit" name="ordina" value=">>"> <input type="hidden" name="pid" value="<%= celle[0]%>"></td> </form>... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-13

prodotti.jsp (III)... } input.close(); catch(filenotfoundexception e) { %> <% %> <div class="errore"> </div> <div class="errore">siamo spiacenti, ma il catalogo dei prodotti non è al momento disponibile.<br><br>riprovate più tardi.</div> }... <div class="errore"> </div> Nel caso in cui non sia possibile leggere il file prodotti.txt, viene visualizzato un messaggio. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-14

inserisci.jsp La pagina inserisci.jsp ha una duplice funzionalità: aggiungere un prodotto al carrello, visualizzare il carrello. Se richiamata con il parametro stampa impostato a 1, visualizza soltanto il carrello: inserisci.jsp?stampa=1 Altrimenti ricerca nei parametri passati il prodotto da aggiungere. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-15

inserisci.jsp (I)... <%@ page import="java.util.vector" %> <%@ page import="java.util.enumeration" %> Caricamento dei prodotti <%@ page import="java.text.numberformat" %> in un oggetto Vector <% String stampaflag=request.getparameter("stampa"); if(stampaflag==null) stampaflag="2"; String prodottipath=getservletcontext().getrealpath("")+ "/MyShop/prodotti.txt";... Vector prodotti=new Vector(); try { input=new BufferedReader(new FileReader(prodottiPath)); while((linea = input.readline())!= null) { prodotti.addelement(linea); } input.close(); } catch (IOException e) { } Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-16

inserisci.jsp (II)... String carrello=(string)session.getvalue("myshop.carrello"); if(carrello==null) { carrello="carrello"+session.getid()+".txt"; session.putvalue("myshop.carrello",carrello); } String filepath=getservletcontext().getrealpath("")+ "/WEB-INF/data/"+carrello; Recupero dalla sessione del nome del file contenente il carrello (o prima inizializzazione nel caso del primo accesso). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-17

inserisci.jsp (III) if(!stampaflag.equals("1")) { String idprodotto=request.getparameter("pid"); try { qtprodotto = Integer.parseInt(request.getParameter("qt")); } catch (NullPointerException e) { qtprodotto=0; } catch (NumberFormatException e) { qtprodotto=0; } Recupero della quantità dai parametri del form. if(qtprodotto>0) { // se la quantità è un numero valido... boolean prodottonelcarrello=false; Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-18

inserisci.jsp (IV) try { input=new BufferedReader(new FileReader(filePath)); while((linea = input.readline())!= null) { } String[] campi = linea.split("#"); carrellovuoto=false; if(idprodotto.equals(campi[0])) { } prodottonelcarrello=true; break; input.close(); } catch (IOException e) { } Controllo della presenza del prodotto nel carrello per evitare l inserimento di duplicati. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-19

inserisci.jsp (V)... try { if(!prodottonelcarrello) { BufferedWriter output=new BufferedWriter(new FileWriter(filePath,true)); output.write(idprodotto+"#"+ (new Integer(qtProdotto)).toString()+"\n"); output.close(); carrellovuoto=false; } } } catch (IOException e) { } } Aggiunta del prodotto al carrello. Apertura del file in accodamento. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-20

inserisci.jsp (VI) else { try { input=new BufferedReader(new FileReader(filePath)); carrellovuoto=input.readline() == null; input.close(); } catch (IOException e) { } } %>... Se inserisci.jsp è stata richiamata con il parametro stampa impostato a 1, si controlla se il carrello è vuoto. Il resto della pagina serve solo a visualizzare il contenuto del carrello tramite una tabella HTML (il codice è analogo a quello della pagina prodotti.jsp). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-21

ordina.jsp Il codice di ordina.jsp non presenta nuove peculiarità rispetto a quanto già visto. Viene controllato che il carrello non sia vuoto (condizione necessaria per poter effettuare un ordine). Viene presentato un form con i campi (dati anagrafici, modalità di pagamento e di consegna) che verranno processati dalla pagina invia.jsp (che registrerà l ordine nel file ordini.txt in /home/servlets/web-inf/data). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-22

Localizzazione della valuta (I) Per stampare le valute nel formato più appropriato per la località corrente (separatore decimale corretto ecc.), si può utilizzare il codice seguente: NumberFormat fmt = NumberFormat. getinstance(locale.italian); fmt.setminimumfractiondigits(2); fmt.setmaximumfractiondigits(2); In questo modo gli importi in Euro verranno stampati con due cifre dopo il separatore decimale (la virgola). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-23

Localizzazione della valuta (II) Grazie alle classi NumberFormat e Locale, utilizzate come esposto nel lucido precedente, è poi possibile formattare valori che rappresentano valuta nel modo seguente: output.write("totale: "+ fmt.format(new Double(totale))+ " Euro\n\n\n\n"); Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-24

Controllare i campi di un form (I) String nome = request.getparameter("nome"); String cognome = request.getparameter("cognome"); String indirizzo = request.getparameter("indirizzo"); String pagamento = request.getparameter("pagamento"); String consegna = request.getparameter("consegna"); // variabile booleana: true -> valori corretti, // false -> errore di compilazione. boolean formvalido=!nome.trim().equals("") &&!cognome.trim().equals("") &&!indirizzo.trim().equals("") && Controllo delle combo box!pagamento.trim().equals("-") &&!consegna.trim().equals("-"); Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-25

Controllare i campi di un form (II) <% if(formvalido) { %> messaggio e/o codice per gestire i valori inviati (ad esempio registrando l ordine) <% } else { %> messaggio d errore <% } %> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-26

Esercizio Provare ad aggiungere una funzionalità di registrazione degli utenti in modo che: al primo ordine venga richiesto anche di scegliere un nome utente ed una password, al momento degli ordini successivi l utente possa scegliere di fare il login senza dover reinserire i propri dati. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-27