Visualizzazione ordini in MyShopDB



Похожие документы
MyShopDB = MyShop + MySQL

Accesso Web a Data Base

Tener traccia del client

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Esercitazione PAM. (Php Apache MySQL)

PHP e Structured Query Language

Introduzione JDBC interfaccia java.sql driver caricare i driver

Architettura MVC-2: i JavaBeans

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Non vedo l ora Realizzazione di un sistema per la gestione dell orario scolastico

Come utilizzare il nuovo HelpDesk Maggioli Informatica

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

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Lezione 9. Applicazioni tradizionali

JSP - Caso di studio 1 Una galleria di immagini

VIVAIO LAUDENSE RELAZIONE

Manuale d uso Lexun Area Riservata proprietà di logos engineering - Sistema Qualità certificato ISO 9001 Det Norske Veritas Italia

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

Dati relazionali e XML

CONCETTO DI ANNIDAMENTO

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

Al giorno d oggi, i sistemi per la gestione di database

JDBC. A. Bechini Accesso a DataD con Java

RELAZIONE DI PROGETTO DELL ESAME STRUMENTI PER APPLICAZIONI WEB

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

<?php include './include/page.php';

Vogliamo creare una anagrafe e poi creare delle query che rispondono a delle domandi. Utilizzando Microsoft Access

Obiettivo dell esercitazione

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

TOP DOWN. Preparati per il compito in classe Modulo 5

Form Editor. Dove NomeProfilo è personalizzabile.

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Sommario 1. Home Tickets Nuove richieste Knowledge Base Documenti Referenti... 5

Maschere. Microsoft Access. Maschere. Maschere. Maschere. Aprire una maschere. In visualizzazione foglio dati: Maschere

Gestire le sessioni con le Servlet

RepairsLab Manuale Utente. RepairsLab. Manuale Utente

Guida alla registrazione on-line di un NovaSun Log

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Procedura SMS. Manuale Utente

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D

OSSIF WEB. Manuale query builder

Corso di Informatica. Immissione di dati. Visualizzazione come foglio dati 1. Visualizzazione come foglio dati 2 11/01/2008

Area riservata. Manuale cliente v1.0

MODELLO TA Atto di trasferimento proprietà o godimento di azienda

MANUALE UTENTE FBA CARICAMENTO MASSIVO PRESENZE DOCENTI AVVISI 1/06 E 2/06

Microsoft Access Maschere

INTEGRAZIONE DI DOCUSOFT CON UN ALTRO SOFTWARE GESTIONALE CON IL MODULO ACQUIRE&VIEW

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

JDBC di base. Le classi/interfacce principali di JDBC

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A Esercitazione 08 DAO e Hibernate

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

MANUALE PER LA GESTIONE DEL SERVIZIO DI NEWSLETTER

Schede ADI ADP ADEM Prestazioni aggiuntive MMG. - Manuale - Data Solution Provider s.r.l.

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Analisi dei dati di Navision con Excel

GUIDA ALL USO DELL AREA RISERVATA

RE Genitori e Alunni

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Svantaggi delle servlet

MANUALE PARCELLA FACILE PLUS INDICE

Scopri il webshop di VWR International PBI 3. CREA IL CARRELLO DELLA SPESA

Z3 B1 Message Addon Invio Massivo Documenti via e Fax per SAP Business One

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

MODULO 5 ACCESS Basi di dati. Lezione 4

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC

SISTEMA TS AUTENTICAZIONE A SISTEMATS MODALITÀ OPERATIVE PER GLI UTENTI DEL SSN

GUIDA ALLE FUNZIONI DELL AREA RISERVATA DEL SITO

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

Sage Start Archivio file Guida. Dalla versione

IL DAT A B A S E DI ALGE B R A N D O

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Dispensa di database Access

1) Ditte Società da estrarre 2) Banca Banche da indicare nel Sollecito 3) Stato partita Cliente 4) Giorni di Scaduto

JDBC versione base. Le classi/interfacce principali di JDBC

Gestione Risorse Umane Web

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

ESTARWEB ISTRUZIONI SEZIONE DOCUMENTALE

Manuale d istruzione SBS

SIFORM MANUALE VOUCHER FORMATIVI A DOMANDA AZIENDALE

Il Web-Service SDMX dell ISTAT

Registrazione utente. Manuale Utente

Corso di Informatica RDBMS RDBMS. Corso di Laurea in Conservazione e Restauro dei Beni Culturali

Транскрипт:

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, pagamento, consegna, spese di spedizione). Facciamo inoltre in modo che, cliccando su un apposito link, sia possibile visualizzare il dettaglio dell ordine (gli articoli ordinati dal cliente). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-1

La query La query da utilizzare è: SELECT ID, Data, Nome, Cognome, Indirizzo, Pagamento, Consegna, SpeseSpedizione FROM intestazioni_ordini Aggiungiamo la clausola finale ORDER BY Data DESC per ottenere la lista degli ordini a partire dal più recente a quello più vecchio. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-2

L idea di base L idea di base è di creare un unica pagina ordini.jsp che visualizzi (a seconda del valore di un parametro) soltanto le intestazioni oppure anche il dettaglio delle righe dell ordine selezionato. Il parametro sarà passato attraverso il metodo GET di HTTP (nome del parametro: id). Esempio: ordini.jsp?id=5 visualizzerà le intestazioni di tutti gli ordini ed il dettaglio delle righe dell ordine n. 5. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-3

La query per le righe Quindi l interrogazione corretta per estrarre le righe corrispondenti all ordine passato come parametro è la seguente: "SELECT P.Prodotto, R.Prezzo, R.Quantita FROM prodotti AS P, righe_ordini AS R WHERE P.ID=R.IDProdotto AND R.IDOrdine="+idOrdine Dove idordine è una variabile inizializzata con idordine=request.getparameter("id"); Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-4

ordini.jsp (I)... <%if(session.getvalue("myshop.backofficeuser")==null) response.sendredirect("backoffice.jsp"); String idordine=request.getparameter("id"); try { Integer.parseInt(idOrdine); catch (NullPointerException e) { idordine="0"; catch (NumberFormatException e) { idordine="0"; Vector ordini=new Vector(); boolean nessunordine=true; Se l utente non si è autenticato, lo rimandiamo alla pagina di login dell area riservata (più avanti nei lucidi) Recupero e controllo del parametro id: contiene il numero d ordine di cui visualizzare il dettaglio delle righe (se è vuoto, si visualizzano soltanto le intestazioni). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-5

ordini.jsp (II) try { 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"); Estrazione degli ordini (intestazioni) %> 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)); 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); Estrazione delle righe dell ordine corrente Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-6

ordini.jsp (III) 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)); // Aggiunta della riga r2.close(); s2.close(); ordini.add(o); // Aggiunta dell ordine al Vector ordini r.close(); nessunordine=ordini.size()==0; s.close(); c.close();... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-7

ordini.jsp (IV) for(int i=0; i<ordini.size(); i++) { String stile=(i+1)%2==0? "riga2_tabella" : "riga1_tabella"; Ordine o=(ordine)ordini.elementat(i); boolean testid=integer.parseint(idordine)==o.numero; %> <tr> <td class='<%= stile%>'><%= o.numero%></td> <td class='<%= stile%>'><%= o.data%></td>... <td class='<%= stile%>'> <a href="ordini.jsp?id=<%=!testid? o.numero : 0%>"> <%=!testid? "dettagli" : "nascondi dettagli"%> </a> </td> Visualizzazione dei vari campi dell intestazione dell ordine Link che richiama la pagina stessa passando come parametro (modalità GET di HTTP) il numero d ordine di cui visualizzare il dettaglio delle righe. </tr> <% // codice per le righe Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-8

ordini.jsp (V): codice per le righe <%if(testid) {%>... <%... for(int j=0; j<o.numerorighe(); j++) { String stile2=(j+1)%2==0? "riga2_sotto_tabella" : "riga1_sotto_tabella"; ProdottoSelezionato ps=o.trovariga(j);%> <tr> <td class='<%= stile2%>'><%= ps.nome%></td> Visualizzazione delle righe dell ordine In una sotto-tabella della tabella delle intestazioni <td class='<%= stile2%>'><%= fmt.format(ps.prezzo)%></td> <td class='<%= stile2%>'><%= ps.quantitaselezionata%></td> <td class='<%= stile2%>'> <%= fmt.format(ps.prezzo*ps.quantitaselezionata)%></td> <tr> <%%> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-9

Proteggiamo l accesso a ordini.jsp La pagina degli ordini non dovrebbe essere pubblica (per ovvi motivi di sicurezza e privacy), ma accessibile soltanto all amministratore di MyShopDB. Dobbiamo quindi proteggerla realizzando una piccola area riservata con un meccanismo di autenticazione. Sfruttiamo quindi la tabella utenti_backoffice che contiene un utente per ogni record (composto dai campi Username e Password). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-10

Controllo dell avvenuta autenticazione Sfruttiamo una variante della classe Utente, già utilizzata a suo tempo con le servlet, per memorizzare nella sessione degli utenti che sono riusciti ad autenticarsi un oggetto di tale tipo. In questo modo potremo distinguere fra accessi legittimi o meno in base alla presenza di tale oggetto nella sessione (ed agire di conseguenza con il metodo sendredirect() dell oggetto predefinito response). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-11

backoffice.jsp (I)... <%if(session.getvalue( myshop.backofficeuser")!=null) response.sendredirect("ordini.jsp"); //recupero del nome utente dal form String username=request.getparameter("user"); if(username==null) username=""; //recupero della password dal form String password=request.getparameter("pwd"); if(password==null) password=""; // flag che rappresenta lo stato dell utente // default: non autenticato boolean autenticato=false; Se l utente si è già autenticato, lo inviamo alla pagina degli ordini. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-12

backoffice.jsp (II) 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;... catch (SQLException e) { response.sendredirect("errore.jsp"); if(autenticato) { Utente u=new Utente(username, password, "Amministratore"); session.putvalue( myshop.backofficeuser", u); response.sendredirect("ordini.jsp"); %> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-13

backoffice.jsp (III) <% if(!autenticato && username.length()>0) { %> <div class="errore"> </div> <div class="errore">nome utente e/o password non sono corretti!<br><br><a href="javascript:window.history.go(-1)"> Riprova.</a></div> <div class="errore"> </div> <% else { // form di autenticazione (vedi lucido seguente) %> Messaggio d errore: l utente ha sbagliato nome utente e/o password Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-14

backoffice.jsp (IV): form di autenticazione <form method="post" action="backoffice.jsp"> <table> <tr> <td class="intestazione_form">nome utente: </td> <td><input name="user" type="text" size="10"></td> </tr> <tr> <td class="intestazione_form">password: </td> <td><input name="pwd" type="password" size="10"></td> </tr> <tr> <td colspan="2"><input type="submit" Value="Login >>"> </td> </tr> </table> </form> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-15

I file JAR e JSP La classe Utente è stata inserita nel file myshop.jar. package MyShop; public class Utente { String username; String password; String descrizione; public Utente(String u, String p, String d) { username = u; password = p; descrizione = d; L archivio JAR va quindi copiato nella directory /home/<nome-utente>/servlets/web-inf/lib e importato con <%@ page import="myshop.*" %> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-16

Esercizio Modificare la pagina ordini.jsp aggiungendo la possibilità di visualizzare contemporaneamente le righe di tutti gli ordini. Aggiungere inoltre la possibilità di cancellare un ordine (intestazione e righe). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-17

Riferimenti (I) David Flanagan, Jim Farley, William Crawford Java Enterprise in a Nutshell (2nd Edition) O Reilly 2002 Capitoli 1, 2, 5, 6 SQL Reference Manual: cap. 12 java.sql Reference Manual: cap. 23 javax.servlet, javax.servlet.http, javax.servlet.jsp Reference Manual: cap. 36-38. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-18

Riferimenti (II) Wrox team Professional Java Server Programming J2EE 1.3 Edition Wrox 2001 Capitoli: 1 (introduzione a J2EE), 7-11 Approfondimenti su JDBC: cap. 3 (fino a Mapping SQL Types to Java, pag. 125) Approfondimenti sulla manutenzione di applicazioni web in JSP: cap. 14 Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2006/07-19