JSP Caso di studio 2: myshop

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "JSP Caso di studio 2: myshop"

Transcript

1 JSP Caso di studio 2: myshop 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. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-1

2 Caratteristiche chiave e configurazione Utilizziamo un database per generare dinamicamente le pagine dei prodotti. Sfruttiamo il supporto per le sessioni in JSP per tener traccia del carrello (i.e., i prodotti selezionati) del cliente. Cerchiamo di non ripetere lo stesso codice (XHTML e/o Java) in più pagine, utilizzando la direttiva include. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-2

3 Deployment su latoserver Il codice è scaricabile da: mitel.dimi.uniud.it/med Su latoserver.dimi.uniud.it scaricare il file.zip e decomprimerlo all'interno della directory servlets (che si trova dentro la propria home directory), spostando myshop.jar da /home/<nomeutente>/servlets/myshop/web-inf/lib in /home/<nome-utente>/servlets/web-inf/lib (dove risiede anche il file pwlsgallery.jar). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-3

4 Configurare sql.jsp Controllare la stringa di connessione in modo che punti al database corretto: String stringaconnessione= "jdbc:mysql://localhost/myshop"; Editare i valori delle variabili utentesql e passwordsql impostandoli alla stringa vuota "". Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-4

5 Il flusso logico dell'applicazione index.jsp prodotti.jsp aggiorna.jsp carrello.jsp elimina.jsp svuota.jsp invia.jsp ordina.jsp Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-5

6 Architettura di myshop: pagine principali index.jsp: home page del sito (punto di partenza); prodotti.jsp: pagina con l elenco dei prodotti ordinabili; carrello.jsp: pagina per l inserimento e la visualizzazione dei prodotti nel carrello; ordina.jsp: pagina con il modulo d ordine. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-6

7 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. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-7

8 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. sql.jsp: stringa di connessione, nome utente e password per accedere a MySQL, funzioni utili, caricamento del driver. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-8

9 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. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-9

10 La base di dati (I) Su latoserver.dimi.uniud.it è possibile utilizzare il database myshop di cui fanno parte le seguenti tabelle: prodotti, intestazioni_ordini, righe_ordini, utenti_backoffice. Lo script per creare e popolare le tabelle (tramite il client a linea di comando mysql) è scaricabile da mitel.dimi.uniud.it/med. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-10

11 La base di dati (II) La tabella prodotti contiene 3 elementi visibili tramite la query seguente: [scagnetto@latoserver scagnetto]$ > mysql -u anonymous mysql> use myshop mysql> select * from prodotti; ID Prodotto Descrizione Prezzo Hard Disk 400 GB 7200 giri, 16MB cache, Controller Serial Ata Monitor CRT 17'' Modulo RAM 512 MB Modulo SDRAM 512 MB PC rows in set (0.00 sec) Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-11

12 Il diagramma E-R Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-12

13 Le classi dell'applicazione Gli oggetti fondamentali gestiti dall'applicazione web coincidono con le entità del modello E-R. In più c'è una classe apposita per la gestione dei carrelli virtuali. Il package formato da queste classi si chiama myshop. Le classi contenute nel package sono le seguenti: Prodotto, ProdottoSelezionato, Carrello, Ordine, Utente. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-13

14 La classe Prodotto modella un prodotto del negozio virtuale. Le sue proprietà sono: Le classi Prodotto e ProdottoSelezionato id: un intero che identifica il prodotto in modo univoco (int); nome: il nome del prodotto (String); descrizione: una breve descrizione del prodotto (String); prezzo: il prezzo unitario (double). La classe ProdottoSelezionato modella un prodotto del negozio virtuale selezionato da un cliente ed inserito nel carrello. Estende la classe Prodotto aggiungendo la proprietà quantitaselezionata. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-14

15 La classe Carrello Modella un carrello di un cliente del negozio virtuale. Un oggetto di tipo Vector contiene tutti i prodotti selezionati. I metodi forniti dalla classe sono i seguenti: AggiungiProdotto: aggiunge un prodotto al carrello. EliminaProdotto: elimina un prodotto dal carrello. ModificaQuantita: modifica la quantità di un prodotto nel carrello. Svuota: elimina tutti i prodotti nel carrello. TrovaIndiceProdotto: restituisce l'indice del prodotto di cui si fornisce l'identificatore numerico. TrovaProdotto: restituisce il prodotto di cui si fornisce l'indice (posizione nel carrello). Vuoto: restituisce true se il carrello è vuoto, false altrimenti. NumeroProdotti: restituisce il numero di prodotti contenuti nel carrello. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-15

16 La classe Ordine Modella un ordine effettuato da un cliente del negozio virtuale. Le sue proprietà sono: numero dell'ordine, data, nome, cognome ed indirizzo del cliente, modalità di pagamento e di consegna, spese di spedizione ed un oggetto di tipo Vector che contiene i singoli prodotti ordinati. I metodi della classe sono i seguenti: AggiungiRiga: aggiunge una nuova riga (prodotto ordinato) all'ordine. TrovaRiga: restituisce il prodotto selezionato di cui si fornisce la posizione (numero di riga). NumeroRighe: restituisce il numero di righe (prodotti ordinati) dell'ordine. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-16

17 La classe Utente Modella un utente dell'area riservata (backoffice) del negozio virtuale. Le sue proprietà sono: username: il nome utente necessario per effettuare il login nell'area riservata (String); password: la password necessaria per effettuare il login (String); descrizione: una breve descrizione dell'utente (String). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-17

18 Il package myshop.jar Per maggiore pulizia del codice inseriamo in un package apposito le classi utili a modellare gli oggetti maggiormente utilizzati nell applicazione. Tutte le pagine JSP che avranno bisogno di tali classi potranno utilizzarle utilizzando l attributo import della direttiva page nel modo seguente: <%@ page import="myshop.*" %> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-18

19 Compilazione del package Compilazione delle singole classi: javac Carrello.java Ordine.java Prodotto.java ProdottoSelezionato.java Utente.java Creazione dell'archivio jar: jar cvf myshop.jar myshop/*.class myshop.jar va copiato in WEB-INF/lib. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-19

20 Il problema degli apici (I) Supponiamo di voler inserire un nuovo record nella tabella anagrafica (composta da tre campi: Nome, Cognome, DataNascita): INSERT INTO anagrafica (Nome, Cognome, DataNascita) VALUES ('Mario', 'Rossi', ' ') Le stringhe di caratteri (come Mario) devono essere racchiuse fra apici. Quindi per inserire una stringa, al cui interno compaiono degli apici come valore di un campo, bisogna codificarli per evitare che l interprete SQL spezzi la stringa in più parti con gli errori di sintassi che ne conseguirebbero. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-20

21 Il problema degli apici (II) Gli apici in SQL vengono codificati raddoppiandoli: es.: la stringa l'articolo viene codificata in l''articolo In questo modo è possibile delimitare la stringa con gli apici senza problemi nella sintassi SQL: 'l''articolo' Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-21

22 Il problema degli apici (III) In Java è sufficiente scrivere la funzione seguente per la codifica: String CodificaApici(String s) { String codifica=""; for(int i=0; i<s.length(); i++) if(s.charat(i)=='\'') codifica+="''"; else codifica+=s.charat(i); return codifica; } Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-22

23 Il problema degli apici: form di login (I) In generale si chiede all'utente di inserire username e password. Poi si costruisce una query del genere: "SELECT COUNT(*) FROM utenti WHERE username="+"'"+username+"' AND password='"+password+"'" dove username e password sono variabili che contengono quanto inserito dall'utente nei campi omonimi del form. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-23

24 Il problema degli apici: form di login (II) Se il controllo per abilitare il login viene fatto discriminando sul conteggio (0=accesso negato, <>0 accesso consentito), è sufficiente digitare quanto segue nel campo username: ' OR TRUE OR '1=1 Infatti la query diventa: SELECT COUNT(*) FROM utenti WHERE username='' OR TRUE OR '1=1' AND password='non importa' La clausola WHERE a questo punto è banalmente verificata falsando il conteggio. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-24

25 index.jsp (I) La struttura di index.jsp è la stessa delle altre pagine principali: page import="java.util.date" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " <html xmlns=" xml:lang="it" lang="it"> include file="heading.jsp" %> <body> <table width="100%"> <tr> <td colspan="2" class="blubg"> include file="banner.jsp" %> </td> </tr>... Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-25

26 index.jsp (II) <tr> <td width="10%" class="blubg"> 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> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-26

27 Il file prodotti.jsp (I)... <%try { Connection c = DriverManager.getConnection(stringaConnessione, utentesql, passwordsql); Statement s = c.createstatement(); ResultSet r = s.executequery("select * FROM prodotti"); %>... <table align="center"> <tr> <td class="intestazione_tabella"> Prodotto </td>... <td class="intestazione_tabella"> Inserisci nel carrello </td> </tr> Parametri definiti in sql.jsp Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-27

28 Il file prodotti.jsp (II) <% NumberFormat fmt=numberformat.getinstance(locale.italian); fmt.setminimumfractiondigits(2); fmt.setmaximumfractiondigits(2); int riga=0; while(r.next()) { riga++; String stile=riga%2==0? "riga2_tabella" : "riga1_tabella";%> <tr> <form method="post" action="carrello.jsp"> <td class='<%= stile%>'><%= r.getstring(2)%></td> <td class='<%= stile%>'><%= r.getstring(3)%></td> <td class='<%= stile%>'><%= fmt.format(r.getfloat(4))%></td> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-28

29 Il file prodotti.jsp (III) <td class='<%= stile%>'> <input type="text" name="qt" value="1" size="2" /> </td> <td class='<%= stile%>'> <input type="submit" name="ordina" value=">>" /> <input type="hidden" name="pid" value="<%= r.getint(1)%>" /> </td> </form> </tr> <%}%> </table> <%r.close(); s.close(); c.close(); } catch (SQLException e) { response.sendredirect("errore.jsp"); return; }%> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-29

30 Il file carrello.jsp (I) La pagina carrello.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: carrello.jsp?stampa=1 Altrimenti ricerca nei parametri passati attraverso la richiesta il prodotto da aggiungere. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-30

31 Il file carrello.jsp (II) Il codice della pagina risulta semplice, grazie allo sforzo fatto in fase di modellazione delle entità fondamentali dell'applicazione. Controllo del carrello vuoto: Carrello carrello=null; if(session.getattribute("myshop.carrello")==null) { carrello=new Carrello(); session.setattribute("myshop.carrello",carrello); } else carrello=(carrello)session.getattribute("myshop.carrello"); boolean carrellovuoto=carrello.vuoto(); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-31

32 Il file carrello.jsp (III) Controllo della presenza di un prodotto nel carrello: Connection c=drivermanager.getconnection(stringaconnessione, utentesql, passwordsql); Statement s=c.createstatement(); ResultSet r=s.executequery("select Prodotto, Descrizione, Prezzo" +"FROM prodotti WHERE ID="+idProdotto); if(r.next()) { Prodotto p=new Prodotto(Integer.parseInt(idProdotto), r.getstring(1), r.getstring(2), r.getfloat(3)); } if(carrello.trovaindiceprodotto(integer.parseint(idprodotto)) ==-1) carrello.aggiungiprodotto(p, qtprodotto); else carrello.modificaquantita(integer.parseint(idprodotto), qtprodotto); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-32

33 Il file carrello.jsp (IV)... for(; i<carrello.numeroprodotti(); i++) { String stile=(i+1)%2==0? "riga2_tabella" : "riga1_tabella"; ProdottoSelezionato ps=carrello.trovaprodotto(i); %> <tr> <td class='<%= stile%>'><%= ps.nome%></td> <td class='<%= stile%>'><%= ps.descrizione%></td> <td class='<%= stile%>'><%= fmt.format(ps.prezzo)%></td> <td class='<%= stile%>'> <input type="hidden" name="id<%= i%>" value="<%= ps.id%>"/> <input type="text" name="qt<%= i%>" value="<%= ps.quantitaselezionata%>" size="2" /> </td> <td class='<%= stile%>'> <%= fmt.format(ps.prezzo*ps.quantitaselezionata)%></td> <td class='<%= stile%>'> <a href="elimina.jsp?id=<%= ps.id%>"> <img src="images/cestino.gif" border="0" /></a></td> </tr> <% } %>... Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-33

34 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). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-34

35 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"); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-35

36 La pagina aggiorna.jsp (I) page import="myshop.*" %> <% int numerorighe=0; try { numerorighe = Integer.parseInt(request.getParameter("righe")); } catch (NullPointerException e) { numerorighe=0; } catch (NumberFormatException e) { numerorighe=0; } Carrello carrello=null; if(session.getattribute("myshop.carrello")==null) carrello=new Carrello(); else carrello=(carrello)session.getattribute("myshop.carrello"); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-36

37 La pagina aggiorna.jsp (II) try { for(int i=0;i<numerorighe;i++) { String idprodotto= request.getparameter("id"+(new Integer(i)).toString()); int qtprodotto=0; try { qtprodotto = Integer.parseInt( request.getparameter("qt"+(new Integer(i)).toString())); } catch (NullPointerException e) { qtprodotto=0; } catch (NumberFormatException e) { qtprodotto=0; } carrello.modificaquantita(integer.parseint(idprodotto), qtprodotto); } } catch (Exception e) { response.sendredirect("errore.jsp"); return; } response.sendredirect("carrello.jsp?stampa=1"); %> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-37

38 La pagina elimina.jsp page import="myshop.*" %> <% String idprodotto=request.getparameter("id"); Carrello carrello=null; if(session.getattribute("myshop.carrello")==null) carrello=new Carrello(); else carrello=(carrello)session.getattribute("myshop.carrello"); try { carrello.eliminaprodotto(integer.parseint(idprodotto)); } catch (Exception e) { response.sendredirect("errore.jsp"); return; } response.sendredirect("carrello.jsp?stampa=1"); %> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-38

39 La pagina svuota.jsp page import="myshop.*" %> <% Carrello carrello=null; if(session.getattribute("myshop.carrello")==null) carrello=new Carrello(); else carrello=(carrello)session.getattribute("myshop.carrello"); carrello.svuota(); response.sendredirect("carrello.jsp?stampa=1"); %> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-39

40 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("-"); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-40

41 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 <% } %> Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-41

42 La pagina d'errore Siccome gli errori che avvengono a tempo di esecuzione nelle pagine JSP sollevano delle eccezioni che possono essere gestite con dei blocchi try catch, è opportuno realizzare una pagina che presenti un messaggio d errore comprensibile anche per l utente del Web meno esperto e fare in modo che, in caso di errori, quest ultimo venga rediretto a tale pagina. Praticamente tutto il codice potenzialmente pericoloso della nostra applicazione è racchiuso in opportuni blocchi try ed il relativo blocco catch provvede a reindirizzare l utente alla pagina errore.jsp. Nel caso di un applicazione reale in questo tipo di pagine è opportuno inserire anche un recapito di posta elettronica a cui rivolgersi in caso l errore si ripeta frequentemente. Un altro accorgimento utile è utilizzare le pagine di gestione degli errori per memorizzare in un file di log (oppure in una tabella di un db) i dati tecnici dell errore. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-42

43 Parte II: Transazioni ed Area Riservata Consistenza dei dati: le transazioni Area riservata: Autenticazione degli utenti tramite form e database Protezione dell'accesso per mezzo delle sessioni Visualizzazione degli ordini Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-43

44 La memorizzazione degli ordini (I) Il form della pagina ordina.jsp invia le informazioni alla pagina invia.jsp che si occupa di controllare la validità dei dati inseriti dall'utente e di registrare l'ordine nel database. Viene recuperato un riferimento al carrello virtuale dalla sessione corrente per inserire l'ordine in tre fasi: si recupera il numero d'ordine più alto presente nella tabella intestazioni_ordini, si memorizza l'intestazione del nuovo ordine, usando come numero il valore estratto al passo precedente più uno, tramite un ciclo for, per ogni elemento presente nel carrello virtuale si esegue una query che inserisce un nuovo record nella tabella righe_ordini usando lo stesso numero d'ordine dell'intestazione del passo precedente. Alla fine si svuota il carrello e si procede a visualizzare un messaggio per l'utente che segnali la corretta terminazione dell'operazione. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-44

45 La memorizzazione degli ordini (II) La procedura appena descritta appare lineare e intuitiva, ma bisogna tenere conto della concorrenza degli accessi. Cosa succederebbe se due clienti effettuassero un ordine allo stesso istante? Entrambe le richieste, accedendo alla tabella delle intestazioni degli ordini in istanti ravvicinati, ricaverebbero lo stesso valore come numero d'ordine più alto. Entrambe le richieste così imposterebbero lo stesso numero d'ordine generando un errore al momento di inserire nel database le relative intestazioni. Infatti, essendo il numero d'ordine (attributo ID) chiave primaria della tabella intestazioni_ordini, non possono esserci due record con lo stesso valore di ID. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-45

46 Possibili soluzioni Per evitare questa situazione, si può operare in due modi: impostare isthreadsafe=false nella direttiva page, utilizzare il meccanismo delle transazioni. La prima alternativa non dà garanzie assolute (Tomcat potrebbe decidere di creare più istanze in memoria della servlet corrispondente alla pagina JSP). L'utilizzo delle transazioni invece è la soluzione ideale perché si appoggia su una tecnologia consolidata ed ampiamente utilizzata nell'ambito dei database. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-46

47 Transazioni Il concetto di transazione è molto importante nell utilizzo delle basi di dati. Si deve pensare ad una transazione come ad un operazione atomica, ovvero, ad un operazione che viene eseguita senza interruzioni. In ogni dato istante soltanto un processo/thread può accedere agli oggetti del database manipolati da una transazione (realizzando così una sorta di sezione critica). La transazione è composta da diverse query: se si verifica un errore durante l esecuzione di una qualunque di tali query, viene effettuato un rollback, annullando l effetto di tutte le query precedenti che compongono la transazione; se tutte le query vengono eseguite senza errori, allora viene effettuato un commit, scrivendo le modifiche nella base di dati. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-47

48 Utilizzo delle transazioni Sequenza di operazioni per implementare una transazione: Dopo aver aperto la connessione e creato uno statement c come al solito, si disabilita la modalità di funzionamento standard di JDBC (auto-commit mode) che considera ogni singola query SQL come una transazione che provoca l immediato aggiornamento (commit) del database: c.setautocommit(false); Si inizia la transazione: Si eseguono le varie query che compongono la transazione. Se non si verificano errori, si procede ad eseguire il commit, aggiornando il database: c.commit(); In caso di errori si effettua il rollback, annullando l effetto di tutte le query della transazione: c.rollback(); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-48

49 Il codice per la memorizzazione dell ordine (I)... Connection c = DriverManager.getConnection( stringaconnessione, utentesql, passwordsql); Statement s = c.createstatement(); try { c.setautocommit(false); ResultSet r = s.executequery("select MAX(ID) FROM intestazioni_ordini"); int idordine=0; if(r.next()) { idordine=r.getint(1); } r.close(); idordine++; s.executeupdate("insert INTO intestazioni_ordini (ID, Data, "+ "Nome, Cognome, Indirizzo, Pagamento, Consegna, "+ "SpeseSpedizione) VALUES ("+idordine+", '"+ formatodata.format(new Date())+"','"+CodificaApici(nome)+ "','"+CodificaApici(cognome)+"','"+CodificaApici(indirizzo)+ "','"+CodificaApici(pagamento)+"','"+CodificaApici(consegna)+ "',"+contributospesespedizione+")");... Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-49

50 Il codice per la memorizzazione dell ordine (II)... for(int i=0; i<carrello.numeroprodotti(); i++) { ProdottoSelezionato ps=carrello.trovaprodotto(i); s.executeupdate("insert INTO righe_ordini (IDOrdine, "+ "IDProdotto, Prezzo, Quantita) VALUES ("+idordine+","+ ps.id+","+ps.prezzo+","+ps.quantitaselezionata+")"); } c.commit(); } catch(sqlexception e) { c.rollback(); response.sendredirect("errore.jsp"); return; }... Nota: in MySQL il tipo delle tabelle che supportano le transazioni è InnoDB (non MyISAM). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-50

51 L area riservata Spesso vi è la necessità di proteggere delle pagine di un sito o applicazione dall accesso indiscriminato (anonimo). Tale obiettivo può essere raggiunto in almeno due modi: configurando direttamente il server (e.g.: file.htaccess di Apache); realizzando un meccanismo di autenticazione tramite codice lato server ed il supporto di cookie/sessioni e di un database (per memorizzare gli utenti). Il secondo metodo citato è più flessibile, ma richiede un certo sforzo da parte del programmatore. Ovviamente se non viene progettato ed implementato con cura, il meccanismo di autenticazione può diventare una seria backdoor per le pagine che si intende proteggere. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-51

52 Il form di autenticazione: backoffice.jsp L idea alla base di ogni meccanismo di autenticazione basato su tecnologie lato server è di discriminare fra utenti autorizzati e non, controllando nella sessione (o in un cookie) la presenza di un determinato oggetto. Memorizzeremo quindi nella sessione di un utente che specifichi correttamente le proprie credenziali d accesso un oggetto myshop.backofficeuser di tipo Utente. Il controllo delle suddette credenziali (nome utente e password) avverrà mediante la ricerca di una corrispondenza di valori nella tabella utenti_backoffice. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-52

53 Controllo iniziale e recupero dei parametri Se l oggetto myshop.backofficeuser è presente nella sessione, redirezioniamo il browser verso la pagina protetta ordini.jsp: if(session.getattribute("myshop.backofficeuser")!=null) { response.sendredirect("ordini.jsp"); return; } Se invece l'utente non si è ancora autenticato, recuperiamo i parametri del form: String username=request.getparameter("user"); if(username==null) username=""; String password=request.getparameter("pwd"); if(password==null) password=""; Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-53

54 Controllo dei parametri del form di login boolean autenticato=false; try { Connection c = DriverManager.getConnection( stringaconnessione, utentesql, passwordsql); Statement s = c.createstatement(); ResultSet r = s.executequery("select COUNT(*) FROM "+ "utenti_backoffice WHERE Username='"+ CodificaApici(username)+ "' AND Password='"+ CodificaApici(password)+"'"); if(r.next()) { autenticato=r.getint(1)==1; } Si noti l'utilizzo del metodo CodificaApici() s.close(); c.close(); } catch (SQLException e) { response.sendredirect("errore.jsp"); return; } Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-54

55 Prepared Statement Una soluzione più professionale al problema della codifica degli apici (e quindi all'iniezione di codice SQL potenzialmente pericoloso) è costituita dall'uso dei Prepared Statement. Essenzialmente sono degli oggetti che rappresentano dei comandi SQL precompilati. In tal modo possono essere eseguiti in modo ripetuto con efficienza. PreparedStatement.html Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-55

56 Prepared Statement Esempio d'uso: String username=request.getparameter("username"); String password=request.getparameter("password"); PreparedStatement pstmt = con.preparestatement("select COUNT(*) FROM utenti_backoffice WHERE username =? AND password=?"); sostituisce la stringa pstmt.setstring(1, username); contenuta nella variabile username al pstmt.setstring(2, password); posto del primo? ResultSet r=pstmt.executequery(); sostituisce la stringa contenuta nella variabile username al posto del secondo? Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-56

57 Memorizzazione delle password Nell'esempio relativo a MyShop le password degli utenti sono memorizzate in chiaro nella tabella utenti_backoffice. Ciò è comodo nel caso le si dimentichi (basta una query per recuperarle). Tuttavia tale comodità rappresenta anche un problema di sicurezza. Le password andrebbero sempre memorizzate in forma codificata con una one-way function (MD5, SHA-1 ecc.). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-57

58 Funzioni One-Way Sono delle funzioni f tali che: il calcolo di y=f(x) (codifica) è molto efficiente; Il calcolo inverso, ovvero, ricavare x da f(x) (decodifica) è computazionalmente proibitivo o impossibile; è altamente improbabile che due valori x e x' diversi fra loro, abbiano gli stessi valori secondo f (ovvero, f(x)=f(x')). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-58

59 Modus operandi Volendo sfruttare una one-way function, si opera come segue: le password sono salvate in forma codificata nel database; l'utente inserisce la propria password in chiaro nel form di autenticazione; la password fornita dall'utente viene codificata ed il risultato della codifica viene confrontato con il valore memorizzato nel database; se le due codifiche coincidono, l'utente è autenticato, altrimenti no. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-59

60 MD5 in Java import java.security.messagedigest; import java.math.biginteger; public class MD5Test { public static void main(string args[]) throws Exception { String password = "test"; MessageDigest m = MessageDigest.getInstance("MD5"); m.update(password.getbytes("utf8")); byte s[] = m.digest(); BigInteger bigint = new BigInteger(1, s); String result = bigint.tostring(16); } } System.out.println("Password: "+password); System.out.println("Password digest (MD5): "+result); Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-60

61 Impostazione dell oggetto myshop.backofficeuser Se le credenziali dell utente hanno trovato riscontro positivo nella tabella utenti backoffice, allora si provvede ad impostare l oggetto myshop.backofficeuser nella sessione corrente ed a redirigere il browser verso la pagina protetta: if(autenticato) { Utente u=new Utente(username, password, "Amministratore"); session.setattribute("myshop.backofficeuser", u); response.sendredirect("ordini.jsp"); } return; Il flag autenticato viene utilizzato anche per determinare cosa inviare come risposta al browser (messaggio d errore oppure form di login). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-61

62 La pagina protetta: ordini.jsp La pagina ordini.jsp permette agli utenti autenticati di visualizzare una tabella con tutti gli ordini effettuati. Inoltre, per ogni ordine, è possibile visualizzare il dettaglio dei prodotti ordinati. Tale operazione si svolge richiamando, tramite un link, la stessa pagina con un parametro che specifica il numero d ordine di cui visualizzare le righe. Inizialmente si controlla se l utente è autorizzato a visualizzare la pagina; in caso contrario lo si reindirizza al form di login: if(session.getattribute("myshop.backofficeuser")==null) { } response.sendredirect("backoffice.jsp"); return; Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-62

63 Proteggere le pagine riservate Nel caso siano presenti più pagine riservate, il controllo visto precedentemente va effettuato in ognuna di esse. Infatti non è possibile imporre un ordine di visita delle pagine ed un client potrebbe cercare di indirizzarla direttamente saltando il form di login. Quindi sarebbe meglio includere il codice in un file con estensione jsp da includere in ogni pagina in cui ce ne sia bisogno. Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-63

64 ordini.jsp: recupero del parametro Si procede a recuperare l'eventuale numero d'ordine di cui bisogna visualizzare il dettaglio delle singole righe che lo compongono: String idordine=request.getparameter("id"); try { Integer.parseInt(idOrdine); } catch (NullPointerException e) { idordine="0"; } catch (NumberFormatException e) { idordine="0"; } Si noti che in caso di parametro assente (NullPointerException) o di errore di formato (NumberFormatException), la variabile idordine viene inizializzata alla stringa "0" (numero d'ordine non esistente). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-64

65 ordini.jsp: recupero dei dati (I) Recupero dell'intestazione degli ordini: Vector ordini=new Vector(); boolean nessunordine=true;... Connection c = DriverManager.getConnection( stringaconnessione, utentesql, passwordsql); Statement s = c.createstatement(); ResultSet r = s.executequery("select ID, Data, Nome, Cognome, "+ "Indirizzo, Pagamento, Consegna, SpeseSpedizione FROM "+ "intestazioni_ordini ORDER BY Data DESC"); while(r.next()) { Ordine o=new Ordine(r.getInt(1), r.getdate(2), r.getstring(3), r.getstring(4), r.getstring(5), r.getstring(6), r.getstring(7), r.getfloat(8));... Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-65

66 ordini.jsp: recupero dei dati (II) Recupero delle righe relative all'ordine corrente:... Statement s2 = c.createstatement(); ResultSet r2=s2.executequery("select P.ID, P.Prodotto, "+ "P.Descrizione, R.Prezzo, R.Quantita FROM prodotti AS P, "+ "righe_ordini AS R WHERE P.ID=R.IDProdotto AND R.IDOrdine="+ o.numero); } while(r2.next()) { Prodotto p=new Prodotto(r2.getInt(1), r2.getstring(2), r2.getstring(3), r2.getfloat(4)); o.aggiungiriga(p, r2.getint(5)); }... ordini.add(o); Si noti come l'ordine corrente venga aggiunto alla collezione ordini soltanto quando siano state recuperate tutte le informazioni su di esso (righe comprese). Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-66

67 La pagina ordini.jsp Complementi di Tecnologie Web M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12-67

MyShopDB = MyShop + MySQL

MyShopDB = MyShop + MySQL MyShopDB = MyShop + MySQL Adattiamo l applicazione MyShop in modo da poter utilizzare un database come fonte di dati, invece dei soliti file testuali. I nuovi sorgenti si trovano nel file MyShopDB.zip

Dettagli

MyShopDB = MyShop + MySQL

MyShopDB = MyShop + MySQL MyShopDB = MyShop + MySQL Adattiamo l applicazione MyShop in modo da poter utilizzare un database come fonte di dati, invece dei soliti file testuali. I nuovi sorgenti si trovano nel file MyShopDB.zip

Dettagli

Un esempio complesso

Un esempio complesso 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

Dettagli

Visualizzazione ordini in MyShopDB

Visualizzazione ordini in MyShopDB Visualizzazione ordini in MyShopDB Risolviamo gli esercizi della lezione scorsa, scrivendo una pagina ordini.jsp che visualizzi le intestazioni di ogni ordine (numero d ordine, data, nome, cognome, indirizzo,

Dettagli

Visualizzazione ordini in MyShopDB

Visualizzazione ordini in MyShopDB Visualizzazione ordini in MyShopDB Risolviamo gli esercizi della lezione scorsa, scrivendo una pagina ordini.jsp che visualizzi le intestazioni di ogni ordine (numero d ordine, data, nome, cognome, indirizzo,

Dettagli

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

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi. Introduzione a JDBC JDBC (Java Database Connectivity) è la parte delle API di J2SE che fornisce le primitive per la connessione a basi di dati relazionali: si inviano comandi SQL; si recuperano i risultati

Dettagli

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

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi. Introduzione a JDBC JDBC (Java Database Connectivity) è la parte delle API di J2SE che fornisce le primitive per la connessione a basi di dati relazionali: si inviano comandi SQL; si recuperano i risultati

Dettagli

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

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi. Introduzione a JDBC JDBC (Java Database Connectivity) è la parte delle API di J2SE che fornisce le primitive per la connessione a basi di dati relazionali: si inviano comandi SQL; si recuperano i risultati

Dettagli

La connessione ai database MySQL tramite script PHP versione 5.5

La connessione ai database MySQL tramite script PHP versione 5.5 La connessione ai database MySQL tramite script PHP versione 5.5 Php è un linguaggio di scripting che estende le funzionalità del server Web, mentre MySQL è un programma server che si occupa della gestione

Dettagli

SQL per le applicazioni D B M G

SQL per le applicazioni D B M G SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface

Dettagli

SQL per le applicazioni D B M G

SQL per le applicazioni D B M G SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface

Dettagli

2011 Politecnico di Torino 1

2011 Politecnico di Torino 1 SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface

Dettagli

2011 Politecnico di Torino 1

2011 Politecnico di Torino 1 SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface

Dettagli

Laboratorio di sistemi Autenticazione utente mediante scriplet Jsp [NetBeans]

Laboratorio di sistemi Autenticazione utente mediante scriplet Jsp [NetBeans] Figura 1 - La pagina input_user.jsp appena caricata Figura 2 - Lascio vuoti entrambi i campi o immetto un solo valore Figura 3 - Immetto dei valori che non esistono nel database autent_utente_scriplet.pdf

Dettagli

2011 Politecnico di Torino 1

2011 Politecnico di Torino 1 Modalità d uso SQL per le applicazioni Indipendentemente dalla soluzione CLI adottata, esiste una strutturazione comune dell interazione con il DBMS apertura della connessione con il DBMS esecuzione di

Dettagli

2011 Politecnico di Torino 1

2011 Politecnico di Torino 1 SQL per le applicazioni Esercitazione PHP e MySQL Svolgimento D B M G Passi di risoluzione creazione e popolamento della base di dati Creazione di un script SQL Passo 2 creazione di una query d interrogazione

Dettagli

Connessione con MySQL

Connessione con MySQL Connessione con MySQL Architettura Server-Side Eventuali parametri cookie sessioni Elaborazione SELECT... DATABASE Quando i dati sono molti e la persistenza deve andare altre la sessione o la durata

Dettagli

Corso di PHP. Prerequisiti. 8.1 PHP e MySQL. Conoscenza MySQL Tecnica della programmazione

Corso di PHP. Prerequisiti. 8.1 PHP e MySQL. Conoscenza MySQL Tecnica della programmazione Corso di PHP 8.1 PHP e MySQL 1 Prerequisiti Conoscenza MySQL Tecnica della programmazione procedurale ad oggetti Principi di programmazione web Programmazione elementare in PHP 2 1 Introduzione In questa

Dettagli

ESERCITAZIONE: AZIENDA

ESERCITAZIONE: AZIENDA ESERCITAZIONE: AZIENDA Homework 24 ottobre 2002 Emanuel Weitschek emanuel@dia.uniroma3.it Prerequisiti (software) PostgreSQL pgadmin Driver JDBC Ambito Si consideri una base di dati che contiene informazioni

Dettagli

JDBC. Paolo Atzeni. 11 marzo Progettazione di applicazioni, una premessa

JDBC. Paolo Atzeni. 11 marzo Progettazione di applicazioni, una premessa JDBC Paolo Atzeni 11 marzo 2002 Progettazione di applicazioni, una premessa Il paradigma a tre livelli (three-tier) JDBC: la API per far interagire applicazioni Java con basi di dati marzo 2002 P. Atzeni,

Dettagli

Procedura di login e sessione

Procedura di login e sessione Procedura di login e sessione Costruire una pagina Web con un form di login per l inserimento delle credenziali dell utente (email, password). Si consideri il database db1 su server MySQL con la tabella

Dettagli

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

I file WAR. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-1 I file WAR WAR è una contrazione di Web ARchive. I file WAR consentono di archiviare un intera applicazione web in un unico file. Tomcat fornisce (tramite il Tomcat Manager) un interfaccia grafica per

Dettagli

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

Il linguaggio PHP. Insegnarvi tutto il PHP? Non esattamente Obiettivo: insegnarvi ad interagire via web con una base dati Programmazione Web Il linguaggio PHP Il nostro obiettivo Insegnarvi tutto il PHP? Non esattamente Obiettivo: insegnarvi ad interagire via web con una base dati Accedere ai dati inseriti dall utente nei

Dettagli

Laboratorio di Progettazione Web

Laboratorio di Progettazione Web PHP e MySQL Laboratorio di Progettazione Web AA 2007/2008 Chiara Renso ISTI- CNR - c.renso@isti.cnr.it PHP e MySQL L accesso a MySQL server da PHP si può effettuare con semplici funzioni. La sequenza dei

Dettagli

PHP ESSENTIALS #10. By WI400 Team. : database e sql

PHP ESSENTIALS #10. By WI400 Team. : database e sql PHP ESSENTIALS #10 By WI400 Team : database e sql sql dialetto e sintassi SQL: Sintassi SQL E possibile inserire un record con l istruzione SQL INSERT: INSERT INTO users VALUES mario', md5 mario'), Mario',

Dettagli

Connessione con MySQL

Connessione con MySQL Connessione con MySQL Architettura Server-Side Eventuali parametri cookie sessioni Elaborazione SELECT... DATABASE Quando i dati sono molti e la persistenza deve andare altre la sessione o la durata

Dettagli

Tema Di Progetto 1 Descrizione

Tema Di Progetto 1 Descrizione Tema Di Progetto 1 Descrizione Acquisto On Line Applicazione Web-based per la simulazione di un flusso di acquisto di un prodotto on-line. Deve essere generata una (o più) pagine di catalogo con contenuto

Dettagli

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web Tecnologie di Sviluppo per il Web Programmazione su Basi di Dati: JDBC Concetti Fondamentali versione 1.0 G. Mecca mecca@unibas.it Università della Basilicata JDBC >> Sommario Concetti Fondamentali Introduzione

Dettagli

Spiegazioni esercizio Gestione Tabella con PHP e MySQL

Spiegazioni esercizio Gestione Tabella con PHP e MySQL Spiegazioni esercizio Gestione Tabella con PHP e MySQL foglio_di_stile.css (foglio di stile esterno) Questo file contiene: 1. la struttura generale delle quattro pagine web dinamiche: index.php, inserisci.php,

Dettagli

D B M G Il linguaggio HTML

D B M G Il linguaggio HTML Programmazione Web Il linguaggio HTML Il linguaggio HTML Concetti di base Le interfacce utente in HTML I form Le tabelle Il passaggio dei parametri contenuti nei form @2011 Politecnico di Torino 1 Concetti

Dettagli

Programmazione Web D B M G. Il linguaggio HTML

Programmazione Web D B M G. Il linguaggio HTML Programmazione Web Il linguaggio HTML Il linguaggio HTML Concetti di base Le interfacce utente in HTML I form Le tabelle Il passaggio dei parametri contenuti nei form HTML: HyperText Markup Language Standard

Dettagli

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61 Capitolo 5 Array e collezioni c 2005 Pearson Education Italia Capitolo 5-1 / 61 Sommario: Array e collezioni 1 Array Array di oggetti Lunghezza di un array Accesso agli elementi di un array Array e cicli

Dettagli

@2011 Politecnico di Torino 1

@2011 Politecnico di Torino 1 Concetti di base Programmazione Web Il linguaggio HTML HTML consente di annotare un testo per contrassegnare le parti che lo compongono Le annotazioni sono realizzate tramite i "tag" Visualizzare documenti

Dettagli

VARIABILI, ASSEGNAZIONE, DECISIONI

VARIABILI, ASSEGNAZIONE, DECISIONI LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 1 / 6 LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) T-SQL PROGRAMMAZIONE PARTE TERZA VARIABILI, ASSEGNAZIONE, DECISIONI Tratto da Gregory A. Larsen, http://www.databasejournal.com/features/mssql/article.php/3087431/t-sql-programming-part-1---defining-variables-and-if-logic.htm

Dettagli

Verso l architettura MVC-2 i JavaBeans

Verso l architettura MVC-2 i JavaBeans Verso l architettura MVC-2 i JavaBeans 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 2 / 2 0 1 3 Limiti dell approccio PROGRAMMA UNICO Il programma unico (servlet) svolge tre tipi di

Dettagli

JDBC. Marco Tessarotto Programmazione dei Web Server Anno Accademico

JDBC. Marco Tessarotto Programmazione dei Web Server Anno Accademico JDBC Marco Tessarotto Programmazione dei Web Server Anno Accademico 2004-2005 JDBC JDBC (Java Database Connectivity) è una API Java per accedere ed elaborare dati in una sorgente dati (di solito un db

Dettagli

Programmazione Web D B M G. Il linguaggio HTML

Programmazione Web D B M G. Il linguaggio HTML Programmazione Web Il linguaggio HTML Il linguaggio HTML Concetti di base Le interfacce utente in HTML I form Le tabelle Il passaggio dei parametri contenuti nei form HTML: HyperText Markup Language Standard

Dettagli

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

NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) E N G I N E = I Esempio base: tabella amici Creare un sistema informatico che permetta di memorizzare il cognome, nome e data di nascita degli amici. Quindi creare una tabella per memorizzare i valori richiesti. Si chiede

Dettagli

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

D B M G. Basi di dati. Programmazione Web: HTML. Programmazione Web. Il linguaggio Politecnico di Torino 1 Programmazione Web Il linguaggio HTML Il linguaggio HTML Concetti di base Le interfacce utente in HTML I form Le tabelle Il passaggio dei parametri contenuti nei form @2011 Politecnico di Torino 1 Concetti

Dettagli

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

3.3.6 Gli operatori Le funzioni di accesso al tipo Le strutture di controllo Le funzioni IIndice Capitolo 1 Da dove partiamo: pagine web statiche 1 1.1 Principi di base.............................. 1 1.1.1 Il paradigma client-server.................... 1 1.1.2 Ipertesto, multimedia, ipermedia................

Dettagli

SIMULAZIONE SECONDA PROVA

SIMULAZIONE SECONDA PROVA SIMULAZIONE SECONDA PROVA L azienda Gamma è una società multinazionale di produzione e commercializzazione di prodotti di abbigliamento. Essa ha intuito l opportunità di indagare i nuovi modelli individuali

Dettagli

Introduzione alle JSP

Introduzione alle JSP Introduzione alle JSP Corso di Sistemi Web e Basi Dati Prof. Antonio d Acierno Java Server Page JSP Riferimenti http://java.sun.com/products/jsp http://www.coreservlets.com http://www.html.it/jsp Le JSPs

Dettagli

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

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

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

D B M G. Basi di dati. Programmazione Web: HTML. Programmazione Web. Il linguaggio Politecnico di Torino 1 Programmazione Web Il linguaggio HTML Il linguaggio HTML Concetti di base Le interfacce utente in HTML I form Le tabelle Il passaggio dei parametri contenuti nei form @2011 Politecnico di Torino 1 Concetti

Dettagli

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

Lato client: vuol dire che le operazioni programmate vengono svolte e visualizzate direttamente sul computer dell'utente collegato Introduzione al linguaggio PHP Hypertext preprocessor Lato client: vuol dire che le operazioni programmate vengono svolte e visualizzate direttamente sul computer dell'utente collegato Lato server: vuol

Dettagli

Utilizzando per la connessione al database un driver di Tipo 1:

Utilizzando per la connessione al database un driver di Tipo 1: Basi di Dati Esercitazione JDBC 25 maggio 2005 Paolo Cappellari Esercizi Considerando il seguente schema: Fornitori (CodiceFornitore, Nome, Indirizzo, Citta) Prodotti (CodiceProdotto, Tipo, Marca, Modello)

Dettagli

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

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti Microsoft Access Nozioni di base Contatti: Dott.ssa Silvia Bonfanti silvia.bonfanti@unibg.it Introduzione In questa lezione vedremo lo strumento Microsoft Access ed impareremo come realizzare con esso

Dettagli

Array. // utente pippo $utente1 = array( username => pippo, password => pippo123, ruolo => amministratore );

Array. // utente pippo $utente1 = array( username => pippo, password => pippo123, ruolo => amministratore ); Array Esercizio 1 Implementare un servizio che permetta il login di utenti ad un sistema e la possibilità di visualizzare articoli. Il servizio riceve in ingresso, tramite GET, l username e la password

Dettagli

Prova scritta del 13 luglio 2010

Prova scritta del 13 luglio 2010 Matricola: Cognome: Nome: Insegnamento: LAB Basi di dati LAB Basi di dati e web Basi di dati e web 4 CFU Laboratorio di Basi di dati (Laboratorio di Basi di dati e Web) Prova scritta del 13 luglio 2010

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi

Dettagli

@2011 Politecnico di Torino 1

@2011 Politecnico di Torino 1 Il linguaggio HTML Programmazione Web Concetti di base Le interfacce utente in HTML I form Il passaggio dei parametri contenuti nei form Il linguaggio HTML Concetti di base Concetti di base HTML: HyperText

Dettagli

Un contatore di accessi

Un contatore di accessi Un contatore di accessi Scriviamo una servlet che conta il numero di accessi e lo visualizza. Sfruttiamo il fatto che Tomcat, quando riceve la richiesta di una servlet, crea un istanza della classe corrispondente.

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 10 Architettura Model-View-Controller (MVC) L'architettura MVC può essere applicata anche alla tecnologia PHP secondo diversi approcci. In questa

Dettagli

@2011 Politecnico di Torino 1

@2011 Politecnico di Torino 1 Il linguaggio HTML Programmazione Web Concetti di base Le interfacce utente in HTML I form Il passaggio dei parametri contenuti nei form Il linguaggio HTML Concetti di base Concetti di base HTML: HyperText

Dettagli

A livello fisico, un istanza di base di dati Oracle è composta. Gubiani & Montanari Oracle Database 3

A livello fisico, un istanza di base di dati Oracle è composta. Gubiani & Montanari Oracle Database 3 Oracle Database Express Edition Donatella Gubiani e Angelo Montanari Gubiani & Montanari Oracle Database 1 (Oracle XE) è una versione gratuita della base di dati È facile da installare e gestire Può essere

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Connessione al DB con PHP Anno accademico 2016-2017 Paolo Perlasca Parte di questi lucidi è tratta da una versione precedente di Marco Mesiti, Stefano Valtolina, Daniele Riboni

Dettagli

Corso di Access. Prerequisiti. Modulo L2 A (Access) Le query

Corso di Access. Prerequisiti. Modulo L2 A (Access) Le query Corso di Access Modulo L2 A (Access) 2.3.1 Le query 1 Prerequisiti Concetto di database relazionale Utilizzo elementare del computer Concetti fondamentali di basi di dati Interrogazione di un DB 2 1 Introduzione

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Prova d Esame 19.07.2005 Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private int counter;

Dettagli

per il primo accesso per gli accessi successivi

per il primo accesso per gli accessi successivi Selezionando il link Accedi con Codice Fiscale e Password, si entra nella parte protetta del sistema e verrà quindi presentata la mappa di Login in cui l'utente dovrà inserire le proprie credenziali, come

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

Access 2007 Colonna di ricerca

Access 2007 Colonna di ricerca Pagina 1 di 7 Lezioni on line -> Gestire i dati Access 2007 Colonna di ricerca Quando si riempiono i campi dei record che formano una tabella, può essere utile e comodo poter scegliere, in un elenco dei

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

scrivere window.alert(). 2 Nell esempio sarebbe scritto solo var hello, senza pertanto attribuire alla variabile hello alcun valore

scrivere window.alert(). 2 Nell esempio sarebbe scritto solo var hello, senza pertanto attribuire alla variabile hello alcun valore In genere il metodo alert() è usato per verificare il valore delle variabili durante la fase di correzione degli errori (debugging), fase che può essere svolta anche con l ausilio di appositi programmi

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI DI CALCOLATORI Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Installazione di EasyPhp. Avviare EasyPhp. La finestra di amministrazione di EasyPhp

Installazione di EasyPhp. Avviare EasyPhp. La finestra di amministrazione di EasyPhp Installazione di EasyPhp Scaricare la versione più recente di EasyPhp dal sito ufficiale (http://www.easyphp.org/). Scegliere la versione di sviluppo (DEVELOPMENT SERVER) più adatta al proprio sistema

Dettagli

e-shop Ordina online i tuoi prodotti con pochi e semplici clic!

e-shop Ordina online i tuoi prodotti con pochi e semplici clic! Ordina online i tuoi prodotti con pochi e semplici clic! ACQUISTI IMPERO ONLINE GUIDA UTENTE Introduzione e-shop, il sito web per gli acquisti Impero online e-shop garantisce l accesso a 10 000 articoli

Dettagli

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste Corso di Basi di Dati 9. Esercitazioni in SQL: Check, asserzioni, viste A.A. 2016 2017 Check Come abbiamo visto, SQL permette di specificare vincoli sugli attributi e le tabelle attraverso il comando check

Dettagli

Lezione 6. Siti, Utenti e Sessioni

Lezione 6. Siti, Utenti e Sessioni Lezione 6 Siti, Utenti e Sessioni Classificazione dei siti Siti statici Sono siti con contenuti che variano poco frequentemente Dal punto di vista tecnologico sono costituiti da pagine html Siti dinamici

Dettagli

Ogni ufficio è formato da 100 dipendenti, i quali hanno a loro volta 3 clienti ciascuno. Inoltre, ad ogni ufficio sono stati assegnati 4 fornitori.

Ogni ufficio è formato da 100 dipendenti, i quali hanno a loro volta 3 clienti ciascuno. Inoltre, ad ogni ufficio sono stati assegnati 4 fornitori. Tecnologia delle Basi Dati Analisi del dbms Postgresql. Luigi Cestoni Prima Parte Descrizione del Database Abbiamo realizzato un database costituito da quattro tabelle: 1. dipendente( id,nome,cognome,eta,telefono,idufficio)

Dettagli

Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O / Servlet: interazione con un DBMS

Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O / Servlet: interazione con un DBMS Servlet & JDBC 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 0 / 2 0 1 1 Servlet: interazione con un DBMS In Java è possibile interagire con un DBMS attraverso l uso della libreria JDBC

Dettagli

SQL: le funzioni di aggregazione

SQL: le funzioni di aggregazione SQL: le funzioni di aggregazione funzioni predefinite che agiscono sui valori contenuti in insiemi di righe della tabella: Conteggi Somme Medie Massimi, minimi Funzione Count La funzione COUNT conta il

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Prova d Esame 19.04.2005 Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private int counter;

Dettagli

GUIDA ALL UTILIZZO DEL. Portale Privato per la gestione e distribuzione di contenitori, chiavi, trasponder

GUIDA ALL UTILIZZO DEL. Portale Privato per la gestione e distribuzione di contenitori, chiavi, trasponder GUIDA ALL UTILIZZO DEL Portale Privato per la gestione e distribuzione di contenitori, chiavi, trasponder ELENCO REVISIONI 13/12/06 Versione : prima pubblicazione SOMMARIO Premessa... 2 1. Accedere al

Dettagli

Una metodologia di progettazione di applicazioni web centrate sui dati

Una metodologia di progettazione di applicazioni web centrate sui dati Una metodologia di progettazione di applicazioni web centrate sui dati A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 0 / 2 0 1 1 Progettazione logica di un sito web centrato sui dati Si

Dettagli

Corso di PHP. Prerequisiti. 6.2 PHP e il web 2. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Corso di PHP. Prerequisiti. 6.2 PHP e il web 2. Conoscenza HTML Tecnica della programmazione Principi di programmazione web Corso di PHP 6.2 PHP e il web 2 1 Prerequisiti Conoscenza HTML Tecnica della programmazione Principi di programmazione web 2 1 Introduzione In questa Unità continuiamo con l illustrazione di alcune importanti

Dettagli

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione MYSQL E PHP Per poter interagire con un database in rete mediante uno script php bisogna innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione MySQL_connect(nome del host, nome utente,

Dettagli

Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O / Servlet & JDBC 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 2 / 2 0 1 3 Servlet: interazione con un DBMS In Java è possibile interagire con un DBMS attraverso l uso della libreria JDBC

Dettagli

Sistema Informativo del Turismo

Sistema Informativo del Turismo Sistema Informativo del Turismo Manuale Utente per l inserimento della movimentazione turistica da file e specifiche tecniche di compilazione dei file di movimentazione turistica Maggio 2012 Versione:

Dettagli

GUIDA APPLICATIVA NUMERAZIONE UNITARIA INTERMEDIARIO

GUIDA APPLICATIVA NUMERAZIONE UNITARIA INTERMEDIARIO GUIDA APPLICATIVA INTERMEDIARIO VERSIONE 5.0 INDICE DEL DOCUMENTO 1. Numerazione unitaria... 3 2. Nuova Autorizzazione... 4 2.1. Compilazione di una richiesta... 5 2.2. Upload file... 7 2.3. Inserimento

Dettagli

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Domande utili alla preparazione dell orale di Informatica all Esame di Stato Domande utili alla preparazione dell orale di Informatica all Esame di Stato 1.Al livello fisico un database si appoggia ai files per contenere i suoi dati? 2.Esistono altri modelli di organizzazione oltre

Dettagli

Esame Laboratorio di Programmazione

Esame Laboratorio di Programmazione Esame Laboratorio di Programmazione 20 Giugno 2014 NOA Non è possibile usare le classi del package prog.io del libro di testo L obiettivo è scrivere una applicazione che permette di costruire delle torri

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 0 (svolta) Multithreading in Java Luca Foschini Anno accademico 2009/2010 Esercitazione 0 1 Modello

Dettagli

ESAME DI STATO I.T.E. A.S

ESAME DI STATO I.T.E. A.S ESAME DI STATO I.T.E. A.S. 2012-2013 Un grande museo deve realizzare un Sistema Informatico per la gestione della biglietteria online. La biglietteria online consentirà di acquistare i biglietti sia per

Dettagli

GUIDA OPERATIVA INTEGRAZIONE MODULO AGOF24

GUIDA OPERATIVA INTEGRAZIONE MODULO AGOF24 GUIDA OPERATIVA INTEGRAZIONE MODULO AGOF24 GESTIONE OPERATIVA OPERAZIONI DA ESEGUIRE IN HRPortal Definizione dei percorsi di AGOF24 Per effettuare il trasferimento dei dati mensili utili alla generazione

Dettagli

SOLUZIONE SECONDA PROVA ESAME DI STATO TRAMONTANA

SOLUZIONE SECONDA PROVA ESAME DI STATO TRAMONTANA Esame di Stato Istituto Tecnico Commerciale Proposta di soluzione della seconda prova Indirizzo: PROGRAMMATORI - CORSO DI ORDINAMENTO Tema di: INFORMATICA GENERALE ED APPLICAZIONI GESTIONALE Anno Scolastico:

Dettagli

SECONDA PARTE.omissis. . omissis

SECONDA PARTE.omissis. . omissis SECONDA PARTE.omissis. 2. In relazione al tema proposto nella prima parte, si immagini di volere gestire sul server Web un sistema di semplici NEWS interne alla scuola, caratterizzate da un autore, un

Dettagli

DOCUMENTO DI INTEGRAZIONE CON GAMMA EVOLUTION INSTALLAZIONE DEL PLUGIN IN TUSTENA CRM

DOCUMENTO DI INTEGRAZIONE CON GAMMA EVOLUTION INSTALLAZIONE DEL PLUGIN IN TUSTENA CRM DOCUMENTO DI INTEGRAZIONE CON GAMMA EVOLUTION INSTALLAZIONE DEL PLUGIN IN TUSTENA CRM ATTENZIONE: Il plugin è compatibile solamente con la versione 11 di Tustena. Il pacchetto di configurazione contiene

Dettagli

Select From Where...

Select From Where... Select From Where... SELECT Le colonne che saranno mostrate e in che ordine. Calcoli su colonne FROM La tabella o le tabelle usate dall interrogazione WHERE Condizione che deve essere soddisfatta dalle

Dettagli

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto SQL Università degli Studi di Salerno Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto A.A. 2005/2006 Select La forma di select cui siamo arrivati

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Esercitazione 8 Introduzione al calcolatore e Java Linguaggio Java, basi e

Dettagli

L'ambiente DB2 in LAB (e come collegarsi da remoto)

L'ambiente DB2 in LAB (e come collegarsi da remoto) L'ambiente DB2 in LAB (e come collegarsi da remoto) Sistemi Informativi T Versione elettronica: L00.DB2inLAB.pdf Il server IBM DB2 Il server DB2, edizione Express-C, è installato su una macchina Linux

Dettagli

Note ed esercizi aggiuntivi

Note ed esercizi aggiuntivi Corso di Programmazione Anno Accademico 2015 2016 Prof. Giovanni Pighizzini ed esercizi aggiuntivi Gli esercizi proposti sono utili per rivedere gli esempi riportati, che sono stati sviluppati e discussi

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

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

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi Progetto B Progettare un applicazione web basata su Servlet e JSP che permetta la collaborazione di diversi utenti nel creare, aggiornare e gestire un archivio di pagine personali degli autori di un giornale.

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Linguaggi di Programmazione Programmazione. Insieme delle attività e tecniche svolte per creare un programma (codice sorgente) da far eseguire ad un computer. Che lingua comprende

Dettagli

Basi di Dati Esercitazione JDBC

Basi di Dati Esercitazione JDBC Basi di Dati Esercitazione JDBC 30 Maggio 2006 Ing. Paolo Papotti Esercizi Considerando il seguente schema: Fornitori (CodiceFornitore, Nome, Indirizzo, Citta) Prodotti (CodiceProdotto, Tipo, Marca, Modello)

Dettagli

Raccolta e memorizzazione dei dati immessi nei moduli dai visitatori

Raccolta e memorizzazione dei dati immessi nei moduli dai visitatori Raccolta e memorizzazione dei dati immessi nei moduli dai visitatori Raccolta e memorizzazione dei dati immessi nei moduli dai visitatori Per impostazione predefinita, i risultati dei moduli vengono salvati

Dettagli

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Autore: Prof. Agostino Sorbara ITIS M. M. Milano Polistena (RC) con questo nome si indica in genere un pezzo di programma, dotato di una propria identità: un modulo, ad esempio, potrebbe essere l insieme di alcune funzioni C, o Pascal, che risiedono in un unico file

Dettagli