Gestione di immagini/file in PostgreSQL e servlet



Documenti analoghi
GESTIONE IMMAGINI/FILE IN POSTGRESQL E JAVA SERVLET. Sara Migliorini Laboratorio Basi di Dati (Laurea in Informatica)

19. LA PROGRAMMAZIONE LATO SERVER

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

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

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

Laboratorio di Basi di Dati

Architettura MVC-2: i JavaBeans

Una metodologia di progettazione di applicazioni web centrate sui dati

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

04/05/2011. Lezione 6: Form

HTML HTML. HyperText Markup Language. Struttura di un documento. Gli elementi essenziali di un documento HTML sono i seguenti TAG: <HTML>...

Esercitazione 4 JDBC

Il linguaggio HTML - Parte 3

Lezione 6: Form 27/04/2012

Dott.ssa Adriana Pietramala

Sistema Gestionale FIPRO. Dott. Enea Belloni Ing. Andrea Montagnani

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

GERARCHIE RICORSIVE - SQL SERVER 2008

Tomcat & Servlet. Contenuti. Programmazione in Ambienti Distribuiti. Tomcat Applicazioni Web. Servlet JSP Uso delle sessioni

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Il Protocollo HTTP e la programmazione di estensioni Web

Introduzione JDBC interfaccia java.sql driver caricare i driver

Esercitazione sulle libpq - libreria C per PostgreSQL

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

Capitolo 4 Pianificazione e Sviluppo di Web Part

JDBC versione base. Le classi/interfacce principali di JDBC

Programmazione server-side: Java Servlet

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

View Mobile User s Guide

Tale attività non è descritta in questa dispensa

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Architettura MVC-2 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 /

Integrazione InfiniteCRM - MailUp

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

ESEMPI DI FORM (da

Servizio Telematico Paghe

ARCHIVIA PLUS - ARCHIFILE

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

JDBC di base. Le classi/interfacce principali di JDBC

I file di dati. Unità didattica D1 1

Introduzione alla programmazione Http lato server in Java

Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

2104 volume III Programmazione

Siti interattivi e dinamici. in poche pagine

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Lezione 9. Applicazioni tradizionali

Esempio di esecuzione di una pagina JSP: Il client chiede la pagina: sdfonline.unimc.it/info/modulo.jsp;

PHP e Structured Query Language

Gestire le sessioni con le Servlet

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Interazione con l utente : i moduli.

PHP e MySQL. Scripting server-side per accesso a DB MySQL

User Tools: DataBase Manager

Manuale d uso della libreria Volta Log

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

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

Le query. Lezione 6 a cura di Maria Novella Mosciatti

4.1 FAX Sollecito consegne via (Nuova funzione)

GovPay 2.0. Manuale Installazione

Manuale Intesa. Guida all apertura di un ticket di assistenza online

SOMMARIO... 3 INTRODUZIONE...

Esercitazione 8. Basi di dati e web

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

ALL FOR SCAN Versione Twain Manuale Utente. Versione 2.0A00. Luccarelli Srl

Casalini Crypto. Documento di protocollo tecnico VRS 2.1

Laboratorio di sistemi Prima Web Application JSP [Java]

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Applicazione ASP di esempio

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

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

Registratori di Cassa

Le presenti note vengono rilasciate per presentare le principali novità della release 2010 Sp1 di Contact Pro.

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Guida al sistema. Dott. Enea Belloni

Tener traccia del client

MySQL Database Management System

MANUALE UTENTE PROTEUS GRPIGD - GESTIONE RICHIESTE PROTOCOLLO INFORMATICO E GESTIONE DOCUMENTALE

Note pratiche sullo sviluppo di servlet (I)

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Guida all Installazione del ProxyFatturaPA

Java: la libreria delle classi

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA. Elaborato di Tecnologie del Software per Internet

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

GUIDA ALL USO DEL PANNELLO DI GESTIONE SITO WEB

BARCODE. Gestione Codici a Barre. Release 4.90 Manuale Operativo

Laboratorio di reti II: Gestione di database lato server

Transcript:

Gestione di immagini/file in PostgreSQL e servlet Alberto Sabaini Laboratorio di Basi di Dati Laurea in Informatica

Sommario Approcci Oggetti fondamentali Web Application Sommario Installare l esempio Sommario Approcci Oggetti fondamentali PostgreSQL Form Classi JAVA Web Application Nozioni preliminari Servlet DBMS Visualizzazione Installare l esempio 2 / 41

Sommario Approcci Oggetti fondamentali Web Application ApprocciInstallare l esempio Sommario Approcci Oggetti fondamentali PostgreSQL Form Classi JAVA Web Application Nozioni preliminari Servlet DBMS Visualizzazione Installare l esempio 3 / 41

Sommario Approcci Oggetti fondamentali Web Application ApprocciInstallare l esempio Obiettivo Nostro obiettivo è...... vedere come poter memorizzare e gestire file, e in particolare immagini, tramite PostgreSQL e una Web Application. Oggi vedremo come gestire immagini, ma le stesse idee possono essere facilmente estese a qualunque tipo di file. 4 / 41

Sommario Approcci Oggetti fondamentali Web Application ApprocciInstallare l esempio Possibili approcci Vi sono due possibili approcci che possono essere seguiti: 1. memorizzare nel DB direttamente le immagini; 2. salvare le immagini sul disco e memorizzare nel DB i loro path. Vedremo entrambi gli approcci tramite l esempio di una semplice Web Application che: memorizza nome e cognome di una persona; ad ogni persona associa una foto/immagine. 5 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Sommario Approcci Oggetti fondamentali PostgreSQL Form Classi JAVA Web Application Nozioni preliminari Servlet DBMS Visualizzazione Installare l esempio 6 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Tipo di dato bytea Al fine di memorizzare file, immagini e video in PostgreSQL: possiamo utilizzare il tipo di dato bytea; bytea permette di memorizzare stringhe binarie, cioè sequenze di byte; le stringhe binarie si distinguono dalle stringhe di caratteri perché consentono di codificare anche valori che non sono ammessi dalla codifica dei caratteri scelta per il DB. le operazioni sono operazioni generiche su byte e non dipendono dalla codifica scelta per i caratteri. 7 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA multipart/form-data content type Il tag HTML FORM possiede l attributo enctype. Esso permette di specificare la codifica dei valori da trasmettere alla pressione del tasto submit. Normalmente i parametri di una richiesta HTTP vengono codificati usando ASCII e usando i caratteri di escape per i caratteri riservati. Tale codifica è identificata da application/x-www-form-urlencoded. Tale codifica è inefficiente per trasmettere grandi quantità di dati, come i file. A tal fine è possibile usare la codifica multipart/form-data. Questa codifica è stata definita dall Internet Engineering Task Force (IETF): http://www.ietf.org/rfc/rfc1867.txt 8 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Input FILE Insieme al nuovo tipo di codifica è stato anche definito il nuovo tipo FILE per gli INPUT delle FORM. <INPUT TYPE="FILE" NAME="IMAGE" SIZE=35> Quando selezionato esso permette di scegliere un file dal disco. Il file selezionato viene poi codificato e inviato tramite la codifica multipart/form-data. 9 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Esempio <FORM METHOD="POST" ACTION=... ENCTYPE="multipart/form-data">... <INPUT TYPE="FILE" NAME="IMAGE" SIZE="35">... </FORM> ENCTYPE Bisogna specificare che i dati della form verranno inviati tramite la codifica multipart/form-data. 10 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Esempio <FORM METHOD="POST" ACTION=... ENCTYPE="multipart/form-data">... <INPUT TYPE="FILE" NAME="IMAGE" SIZE="35">... </FORM> TYPE Il tipo di input FILE è simile agli altri tipi di input ma permette di specificare un file. 11 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Esempio <FORM METHOD="POST" ACTION=... ENCTYPE="multipart/form-data">... <INPUT TYPE="FILE" NAME="IMAGE" SIZE="35">... </FORM> METHOD Dovendo inviare grandi quantità di dati non è possibile usare il metodo GET. Dobbiamo usare il metodo POST che invia i dati in background. 12 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA Libreria cos.jar In JAVA la gestione di contenuti, tra cui file e immagini, codificati con multipart/form-data si avvale della libreria jar cos http://www.servlets.com/cos/ Al suo interno la classe più importante è com.oreilly.servlet.multipartrequest All interno del metodo dopost di una servlet un oggetto MultipartRequest può essere ottenuto dall oggetto HttpServletRequest MultipartRequest multi; multi = new MultipartRequest(request,"/tmp/"); Il secondo parametro specifica dove salvare temporaneamente eventuali file. 13 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA MultipartRequest Da una variabile di tipo MultipartRequest è possibile recuperare eventuali parametri della servlet, similmente a come si fa con oggetti HttpServletRequest, usando il metodo getparameter() String par; par = (String)multi.getParameter(nomeParametro); Nel caso di file si utilizza il metodo getfile() che restituisce un oggetto di tipo File che punta al file temporaneo salvato nella directory specificata prima. File f = multi.getfile(nomeparametro); È poi possibile operare come si vuole sul file. 14 / 41

Sommario Approcci Oggetti fondamentali Web Application PostgreSQL Installare Forml esempio Classi JAVA FILE In JAVA si possono leggere e scrivere files tramite le classi FileInputStream e FileOutputStream. File fin = new File(filepathIN); File fout = new File(filepathOUT); // A p r o i f i l e s t r e a m in i n g r e s s o ( da c u i l e g g e r e // il f i l e o r i g i n a l e )... FileInputStream fis = new FileInputStream(fIN); //... e in u s c i t a ( su c u i s c r i v e r e l i m m a g i n e ) FileOutputStream fos = new FileOutputStream(fOUT); // c o p i o b y t e p e r b y t e l i m m a g i n e d a l l o s t r e a m // in i n g r e s s o a q u e l l o in u s c i t a while (fis.available()>0) fos.write(fis.read()); // c h i u d o g l i s t r e a m fis.close(); fos.close(); 15 / 41

Sommario Approcci Oggetti fondamentali PostgreSQL Form Classi JAVA Web Application Nozioni preliminari Servlet DBMS Visualizzazione Installare l esempio 16 / 41

Funzionalità La Web Application di esempio permette di: inserire nel DB un nuovo record impostando nome e cognome della persona e l immagine da associarvi un check box nella form di inserimento dei dati permette di scegliere se checkbox selezionato: l immagine va memorizzata direttamente nella tabella; checkbox deselezionato: l immagine va salvata in un apposita cartella per poi inserirne il path nel DB. recuperare i record nella tabella tramite un apposita form di ricerca in cui scegliere nome e/o cognome o nessuno dei due (per ottenere tutte le tuple). 17 / 41

Struttura La Web Application è composta da: quattro JSP per la presentazione di risposte, risultati, ecc... una servlet centrale (photos), che riceve tutte le richieste, esegue le operazioni richieste e richiama la JSP per la presentazione dei risultati una classe DBMS (più eventuali bean) che gestisce l interazione tra photos e il database La servlet sceglie quale operazione eseguire osservando il valore di un apposito parametro, command. 18 / 41

DB di riferimento La Web Application si basa sulla tabella peoplepicture: Vincoli: Colonna Tipo Proprietà id serial primary key name varchar(30) not null surname varchar(30) not null picturepath varchar(128) picture bytea UNO tra picturepath e picture DEVE essere NON NULLO UNO SOLO tra picturepath e picture DEVE essere NON NULLO 19 / 41

Path e immagini Il campo picturepath memorizza il path assoluto di un immagine. Il campo picture memorizza un immagine vera e propria, a tal fine è definito di tipo bytea. 20 / 41

Flusso delle richieste Servlet photos invocazione default doget upload search forms.html error.jsp dopost img src confirm.jsp view.jsp store search Classe DBMS INSERT SELECT DB 21 / 41

Metodo dopost public void dopost(httpservletrequest request, HttpServletResponse response) {... // Essendo i parametri della form di tipo Multipart, // ottengo l oggetto MultipartRequest da cui e // possibile ottenere eventuali parametri MultipartRequest multi = new MultipartRequest(request,"/tmp/"); // ottengo il parametro command che controlla quale // azione deve essere eseguita String command = (String)multi.getParameter("command");... 22 / 41

Metodo dopost: SEARCH if (command.equals("search")) { // sfruttando la classe DBMS eseguo la ricerca con //i parametri dati dall utente e passo i risultati //a view.jsp per visualizzarli // ottengo gli eventuali ulteriori parametri NAME e SURNAME String name = multi.getparameter("name"); String surname = multi.getparameter("surname"); // tramite la classe DBMS ricerco nel DB //le informazioni richieste Vector result = dbms.search(name,surname);... } 23 / 41

Metodo dopost: UPLOAD if (command.equals("upload")) {... // ottengo i valori del checkbox String[] store = multi.getparametervalues("storedb"); // ottengo il file scelto dall utente File f = multi.getfile("image");... if (f==null) { // inoltro un errore da visualizzare alla JSP } else { filename = multi.getfilesystemname("image"); if (store==null) { // costruisco il path assoluto in cui memorizzare //l immagine il metodo System.getenv () permette di // recuperare il valore di una variabile d ambiente. //Il file viene memorizzato in una sottocartella "uploads" String filepath = System.getenv("CATALINA BASE") + + "/uploads/" + filename; 24 / 41

Metodo dopost: UPLOAD } } File fout = new File(filepath); // scrivo in fout il file f... dbms.storepeoplepicture(name,surname,filepath); // richiamo confirm.jsp per visualizzare la conferma // dell upload/ inserimento... } else { // memorizzo nel DB direttamente l immagine dbms.storepeoplepicture(name,surname,f); // richiamo confirm.jsp per visualizzare la conferma // dell upload/ inserimento... } 25 / 41

Metodo doget: FORMS Il metodo doget viene richiamato in automatico senza parametri alla prima invocazione della servlet. In questo caso esso richiama la JSP per mostrare le form di upload/ricerca. 26 / 41

Metodo doget: img src La JSP deve mostrare le immagini recuperate dal DB. Per farlo specifica tali immagini in tag HTML <img> (vedi slide 34). I browser, seguendo il protocollo http, ottengono le immagini richieste dai tag <img> in successive automatiche richieste al server inviate tramite il metodo GET. Dato che le immagini non sono direttamente accessibili dal browser, la servlet, nel metodo doget, deve farsi carico di rispondere anche a queste richieste successive, fornendo le immagini. Nel nostro caso un immagine contenuta nel DB viene richiesta fornendo l id della tupla, mentre un immagine salvata su disco viene richiesta specificandone il path. La risposta della servlet è simile nei due casi, perciò vediamo solo il primo caso. 27 / 41

Metodo doget: img src if (id!=null) { // ottengo lo stream di output verso la JSP PrintWriter out = response.getwriter(); int i; DBMS dbms = new DBMS(); //la classe DBMS restituisce un InputStream con cui // costruisco un buffered input stream InputStream is = dbms.searchpicture(integer.parseint(id)) BufferedInputStream bis = new BufferedInputStream(is); // imposto il tipo della risposta alla JSP response.setcontenttype("image/jpeg"); // imposto la dimensione in byte della risposta alla JSP response.setcontentlength(bis.available()); // byte per byte copio l immagine letta dal DB sullo stream // verso la JSP while ((i = bis.read())!= -1) out.write(i); // chiudo lo stream in lettura bis.close(); } 28 / 41

Inserire un file in PostgreSQL void storepeoplepicture(string name, String surname, File f) { String insertpic = "INSERT INTO peoplepicture" + + "(name,surname,picture) VALUES (?,?,?)"; Connection con = null; PreparedStatement pst = null; con = DriverManager.getConnection(urldblab, user, passwd); pst = con.preparestatement(insertpic); pst.clearparameters(); pst.setstring(1, name); pst.setstring(2, surname); //l impostazione di campi binari avviene tramite setbinarystream //il secondo parametro e il FileInputStream da cui PostgreSQL // leggera il file da inserire. //Il terzo parametro e la dimensione in byte del file pst.setbinarystream(3,new FileInputStream(f),(int)f.length()); //i comandi SQL senza ritorno, come INSERT o UPDATE, // devono essere eseguiti con il comando execute () // anziche executequery come avviene per le SELECT pst.execute(); con.close(); } 29 / 41

Leggere un file da PostgreSQL InputStream searchpicture(int id) { String getpic="select picture FROM peoplepicture WHERE id=?"; PreparedStatement pstmt = null; Connection con = null; ResultSet rs = null; InputStream is = null; con = DriverManager.getConnection(urldblab, user, passwd); pstmt = con.preparestatement(getpic); pstmt.clearparameters(); pstmt.setint(1, id); rs = pstmt.executequery(); rs.next(); //l immagine, di tipo bytea nel DB, viene ottenuta come //un binary stream, in particolare un InputStream is = rs.getbinarystream("picture"); con.close(); return is; } 30 / 41

forms.html <FORM NAME="search" ACTION="/photos/servlet/photos" METHOD="POST" ENCTYPE="multipart/form-data"> Name: <INPUT TYPE="text" NAME="name"><BR> Surname: <INPUT TYPE="text" NAME="surname"><BR> <INPUT TYPE="HIDDEN" NAME="command" VALUE="SEARCH"> <INPUT TYPE="SUBMIT" NAME="submit" VALUE="SEARCH"> </FORM> <FORM NAME="FileUpload" METHOD="POST" ACTION="/photos/servlet/photos" ENCTYPE="multipart/form-data"> Name: <INPUT ID="insname" TYPE="TEXT" NAME="NAME"><BR> Surname: <INPUT ID="inssurname" TYPE="TEXT" NAME="SURNAME"><BR> <INPUT ID="upfile" TYPE="FILE" NAME="IMAGE" SIZE="35" ONCHANGE="preview( DOimg, upfile );"><BR> Store directly in DB <INPUT TYPE="CHECKBOX" NAME="storeDB" VALUE="storeDB"><BR> <INPUT TYPE="HIDDEN" NAME="command" VALUE="UPLOAD"> <IMG SRC="../immagini/nopreview.png" ID="DOimg" STYLE="max-height:250px;max-width:250px"><BR><BR> <INPUT TYPE="SUBMIT" NAME="submit" VALUE="UPLOAD" ONCLICK="return checkdata()"> </FORM> 31 / 41

forms.html: preview dell immagine È possibile visualizzare un preview che andrà inviata, prima che si prema il bottone di upload. <INPUT ID="upfile" TYPE="FILE" NAME="IMAGE" SIZE="35" ONCHANGE="preview( DOimg, upfile );"> function preview(immid,previewid) { var immagine = document.getelementbyid(immid); var upload = document.getelementbyid(previewid); var filename = upload.value; var fileextension = (filename.substring(filename.lastindexof(".")+1)); fileextension = fileextension.tolowercase(); if (fileextension == "jpg" fileextension == "jpeg") { immagine.src = upload.files.item(0).getasdataurl(); } else { immagine.src = "../immagini/nopreview.png"; alert ("Attenzione sono ammessi solo file jpg e jpeg."); } } 32 / 41

forms.html: validazione dei dati <INPUT TYPE="SUBMIT" NAME="submit" VALUE="UPLOAD" ONCLICK="return checkdata()"> </FORM> function checkdata() { var upload = document.getelementbyid( upfile ); var nome = document.getelementbyid( insname ).value; var cognome = document.getelementbyid( inssurname ).value; var filename = upload.value; var fileextension = (filename.substring(filename.lastindexof(".")+1)); var fileextension = fileextension.tolowercase(); if (filename == "") { alert ("Selezionare un immagine."); return false; } else if (nome == "") { alert ("Inserire il nome."); return false; } else if (cognome == "") { alert ("Inserire il cognome."); return false; } else if (fileextension == "jpg" fileextension == "jpeg") { return true; } else { alert ("Attenzione sono ammessi solo file jpg e jpeg."); return false; } } 33 / 41

view.jsp: visualizzazione delle immagini <% Vector result = (Vector)request.getAttribute("data"); PeoplePictureBean ppb = null; %> <h1>risultati:</h1> <table border="1"> <tr><th>name</th><th>surname</th><th>picture</th></tr> <% for (int i=0; i<result.size(); i++) { ppb =(PeoplePictureBean)result.get(i); if (ppb.getpicturepath() == null) { %> <tr><td><%=ppb.getname()%></td><td><%=ppb.getsurname()%></td> <td align="center"> <img height="200px" src="/photos/servlet/photos?id=<%=ppb.getid()%>"> </td></tr> <% } else { %> <tr><td><%=ppb.getname()%></td> <td><%=ppb.getsurname()%></td> <td align="center"> <img height="200px" src="/photos/servlet/photos?path=<%=ppb.getpicturepath()%>"> </td></tr> <% } } %> </table> 34 / 41

view.jsp: visualizzazione delle immagini Il browser quando incontrerà i tag img accederà all URL indicata nell attributo src. Ciò risulterà in una richiesta GET alla servlet (specificando id o path) che risponderà inviando l immagine da visualizzare. 35 / 41

error.jsp: visualizzazione degli errori <% String msg = (String)request.getAttribute("msg"); %> <h1><%=msg%></h1> 36 / 41

confirm.jsp: conferma dell upload <% String msg = (String)request.getAttribute("msg"); %> <h1><%=msg%></h1> 37 / 41

Sommario Approcci Oggetti fondamentali Web Application Installare Installare l esempio l esempio Sommario Approcci Oggetti fondamentali PostgreSQL Form Classi JAVA Web Application Nozioni preliminari Servlet DBMS Visualizzazione Installare l esempio 38 / 41

Sommario Approcci Oggetti fondamentali Web Application Installare Installare l esempio l esempio Far funzionare la web application (I) Seguire i seguenti passi: 1. nel proprio database dblabxx (non did2013!!!) creare la tabella peoplepicture descritta nella slide 19 2. in tomcat/lib scaricare (ed eventualmente rinominare) la libreria cos.jar 3. in fondo al file.bashrc nella propria home aggiungere le righe: CLASSPATH=$CLASSPATH:.:$CATALINA_BASE/lib/cos.jar export CLASSPATH necessarie ad aggiungere la libreria cos.jar al classpath 4. in webapps scaricare e scompattare il file photos webapp.tgz: si otterrà il context photos. 39 / 41

Sommario Approcci Oggetti fondamentali Web Application Installare Installare l esempio l esempio Far funzionare la web application (II) 5. in tomcat/src scaricare e scompattare photos src.tgz. Si otterrà una cartella photos contenente i sorgenti dell applicazione 6. modificare DBMS.java inserendo i propri dati (username, password e nome db) per la connessione al proprio DB (non did2013!!!) 7. compilare i sorgenti nella cartella classes del context photos 8. in tomcat creare la cartella uploads 9. avviare Tomcat 10. in Firefox aprire http://localhost:8080/photos/servlet/photos 40 / 41

Sommario Approcci Oggetti fondamentali Web Application Installare Installare l esempio l esempio Far funzionare la web application (III) 11. si dovrebbe ottenere questa schermata: 41 / 41