Note pratiche sullo sviluppo di servlet (I)



Похожие документы
Un contatore di accessi

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

Tener traccia del client

Tomcat struttura delle directory

Introduzione alla programmazione Http lato server in Java

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

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

Programmazione server-side: Java Servlet

Servlet API. Programmazione in Ambienti Distribuiti A.A

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition

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

Architetture Web: un ripasso

Laboratorio di Basi di Dati e Web

Laboratorio di Basi di dati

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

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

SERVLET & JSP DISPENSE

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition

Server-side Programming: Java servlets Parte II

Tecnologie di Sviluppo per il Web

Gestire le sessioni con le Servlet

Tito Flagella - Introduzione alla programmazione di Servlet

Laboratorio di sistemi Prima Web Application JSP [Java]

Laboratorio di Basi di Dati

Appunti di Informatica 1

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

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

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

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 /

Svantaggi delle servlet

Database & WWW. Basi di dati Architetture e linee di evoluzione P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

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

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

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

RISOLUTORE AUTOMATICO PER SUDOKU

Il Protocollo HTTP e la programmazione di estensioni Web

Laboratorio di reti II: Servlet

JAVA SERVLET: I filtri

Architettura MVC-2: i JavaBeans

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso basi di dati Installazione e gestione di PWS

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Accesso Web a Data Base

Protocolli applicativi: FTP

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

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

Application Server per sviluppare applicazioni Java Enterprise

Corso di Reti di Calcolatori L-A

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Registratori di Cassa

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

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:

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

Parte II: Reti di calcolatori Lezione 10

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

Architettura Client-Server

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

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

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Strumenti per la programmazione

Il Web-Service SDMX dell ISTAT

19. LA PROGRAMMAZIONE LATO SERVER

Funzioni non documentate Openoffice.org. 3 Base mini-howto

Laboratorio di Programmazione di Rete

Programmare in Java. Olga Scotti

Amministrazione Trasparente

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

4.1 FAX Sollecito consegne via (Nuova funzione)

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

Corso di Applicazioni Telematiche

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

1 JSPDynPage, componenti portale e Java Server Pages

Tutorial web Application

Approfondimenti. Contenuti

Il linguaggio HTML - Parte 4

Dispensa di database Access

Guida all utilizzo del compilatore lcc-win32 per creare una applicazione console

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

SERVIZIO TELEMATICO ENTRATEL. Applicazione Autentica-Apri Multifile

TERMINALE. Creazione e gestione di una postazione terminale di Eureka

Транскрипт:

Note pratiche sullo sviluppo di servlet (I) Nel caso in cui sulla macchina locale (PC in laboratorio/pc a casa/portatile) ci sia a disposizione un ambiente Java (con compilatore) e un editor/ambiente di sviluppo a cui si è abituati, è più comodo realizzare e testare le servlet in locale e poi trasferirle sul server finale (e.g., latoserver.dimi.uniud.it). Tuttavia è possibile lavorare direttamente su latoserver.dimi.uniud.it collegandosi tramite ssh (PuTTY sui sistemi Windows in laboratorio) e creando i vari sorgenti con gli editor vi o pico. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-1

Note pratiche sullo sviluppo di servlet (II) Se si decide di sviluppare le servlet in locale esistono vari programmi che permettono di trasferire i file sulla macchina remota in modo sicuro: scp; CoreFTP (www.coreftp.com); il programma PSFTP fornito assieme a PuTTY sui sistemi Windows in laboratorio. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-2

Esempio: utilizzo di PSFTP Lanciare il programma (da menu, oppure direttamente dalla cartella di installazione di PuTTY: C:\Programmi\PuTTY\PSFTP.EXE). A questo punto si hanno a disposizione i comandi: lcd <percorso> (per spostarsi nel filesystem locale)!dir (per visualizzare il contenuto della directory locale corrente) open <nome utente>@host (per collegarsi come <nome utente> al server host) cd <percorso> (per spostarsi nel filesystem remoto) dir (per visualizzare il contenuto della directory remota corrente) put <nomefile> per copiare sul server il file <nomefile> get <nomefile> per copiare sulla macchina locale il file <nomefile> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-3

Gli argomenti dei metodi doget/dopost Osserviamo che le servlet sono dei veri e propri programmi Java che vengono invocati dal contenitore di servlet (e.g., Tomcat) per soddisfare le richieste dei client. L interfaccia con il protocollo HTTP messa a disposizione del programmatore consiste nell utilizzo dei metodi dei due argomenti di tipo HttpServletRequest e HttpServletResponse. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-4

HttpServletRequest E un interfaccia, definita in javax.servlet.http, che aggiunge alla soprainterfaccia ServletRequest (per servlet generiche), definita in javax.servlet, metodi specifici per le richieste HTTP. Rappresenta la richiesta di un client verso una servlet. L oggetto corrispondente viene creato dal container (e.g., Tomcat) al momento della richiesta e passato al metodo opportuno della servlet. Metodi fondamentali: getinputstream: per leggere informazioni inviate dal client; getparameter: per estrarre i parametri della richiesta. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-5

HttpServletResponse E un interfaccia, definita in javax.servlet.http, che aggiunge alla soprainterfaccia ServletResponse (per servlet generiche), definita in javax.servlet, metodi specifici per le richieste HTTP. Rappresenta la risposta al client da parte di una servlet. L oggetto corrispondente viene creato dal container (e.g., Tomcat) al momento della richiesta e passato al metodo opportuno della servlet. Metodi fondamentali: setcontenttype: per specificare il tipo MIME del contenuto che verrà spedito al client; getwriter: restituisce il flusso di dati verso il client. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-6

Errori comuni Tomcat manager: FAIL - Application at context path /test could not be started Causa: errore di parsing - controllare il file web.xml. HTTP Status 404 Causa: servlet non trovata controllare l URL della servlet ed i link ad essa relativi controllare che il tag <url-pattern> abbia un / iniziale (a differenza degli URL relativi che si usano nelle pagine HTML per richiamare le servlet). HTTP Status 500 Errore interno (eccezione) della servlet. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-7

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. Utilizziamo una variabile d istanza privata i nel modo seguente: la azzeriamo all inizio dell esecuzione della servlet; la incrementiamo ad ogni accesso. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-8

Il sorgente Java (I) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Contatore extends HttpServlet { private int i; // init viene eseguito solo alla prima richiesta // della servlet. public void init() { i=0; } // continua nel lucido successivo... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-9

Il sorgente Java (II) //... continua dal lucido precedente public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); out.println("<html>"); out.println("<head><title>contatore di "+ "accessi</title></head>"); out.println("<body>"); out.println("<strong>accessi registrati "+ "finora: "+(++i)+"</strong>"); out.println("</body></html>"); } } Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-10

Il metodo init() Il metodo init() di una servlet viene eseguito alla prima richiesta di quest ultima. E utile quindi per inserire il codice che inizializza la servlet. Nel nostro caso il metodo init() contiene soltanto l assegnamento i = 0 (che inizializza a zero il contatore di accessi). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-11

Modifiche al file index.html <HTML> <HEAD> <TITLE>Servlet di prova</title> </HEAD> <BODY> <TABLE>... <TR> <TD> <A HREF="servlet/Contatore">Un contatore di accessi</a> </TD> </TR> </TABLE> </BODY> </HTML> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-12

Modifiche al file web.xml <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>... <servlet> <servlet-name>contatore</servlet-name> <servlet-class>contatore</servlet-class> </servlet> <servlet-mapping> <servlet-name>contatore</servlet-name> <url-pattern>/servlet/contatore</url-pattern> </servlet-mapping> </web-app> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-13

Aspetto della pagina index.html CiaoMondo.class nome.html/ciaopersonalizzato.class Contatore.class Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-14

Ciclo di vita di una Servlet Non caricata. Prima richiesta: Caricata: il file.class viene caricato in memoria centrale. Inizializzata: viene eseguito il metodo init(). In servizio: risponde alle richieste con il metodo opportuno (per le servlet http vengono richiamati i metodi do<tipo richiesta>, e.g., doget() e dopost()). In attesa: rimane presente in memoria centrale, ma inattiva. In distruzione: viene eseguito il metodo destroy() e la servlet viene rimossa dalla memoria centrale. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-15

Un contatore di accessi persistente Modifichiamo la servlet che conta il numero di accessi in modo che conservi tale valore anche quando l applicazione web viene riavviata. Sfruttiamo i metodi init() e destroy(): in init() leggiamo dal file il valore iniziale del contatore i; in destroy() (al momento della rimozione dalla memoria della servlet) scriviamo sul file il valore corrente del contatore i. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-16

Codice Java (I) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ContatorePersistente extends HttpServlet { final static String NOME_FILE="contatore.txt"; private int i; private String path; // memorizzerà il percorso di NOME_FILE. public void init() { try { path=getservletcontext().getrealpath("")+"/"; DataInputStream f=new DataInputStream(new FileInputStream(path+NOME_FILE)); i=f.readint(); f.close(); } catch (IOException e) { i=0; } } // continua nel lucido successivo... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-17

Codice Java (II) //... continua dal lucido precedente public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); out.println("<html>"); out.println("<head><title>contatore di "+ "accessi</title></head>"); out.println("<body>"); out.println("<strong>accessi registrati "+ "finora: "+(++i)+"</strong>"); out.println("</body></html>"); } // continua nel lucido successivo... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-18

Codice Java (III) //... continua dal lucido precedente public void destroy() { try { DataOutputStream f= new DataOutputStream (new FileOutputStream(path+NOME_FILE)); f.writeint(i); f.close(); } catch (IOException e) { } } } Il metodo destroy() viene invocato al momento della rimozione della servlet dalla memoria centrale. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-19

Modifiche al file web.xml <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>... <servlet> <servlet-name>contatore2</servlet-name> <servlet-class>contatorepersistente</servlet-class> </servlet> <servlet-mapping> <servlet-name>contatore2</servlet-name> <url-pattern>/servlet/conpers</url-pattern> </servlet-mapping> </web-app> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-20

Modifiche al file index.html <HTML> <HEAD> <TITLE>Servlet di prova</title> </HEAD> <BODY> <TABLE>... <TR> <TD> <A HREF="servlet/ConPers">Un contatore di accessi persistente</a> </TD> </TR> </TABLE> </BODY> </HTML> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-21

Generare una tabella HTML a partire da un file di testo In questo esempio faremo generare alla servlet StampaTabella una tabella HTML 10x2 a partire dal contenuto di un file di testo. Il formato dei dati nel file di testo è il cosiddetto CSV (i.e., Comma Separated Value: valori separati da virgole). I dati della tabella saranno contenuti in un file di testo chiamato tabella.txt nella cartella servlets della propria home directory. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-22

Il codice Java (I) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class StampaTabella extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException, FileNotFoundException { String filepath=getservletcontext().getrealpath("")+"/tabella.txt"; BufferedReader input = new BufferedReader(new FileReader(filePath)); String linea = null; res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); out.println("<html>"); out.println("<head><title>tabella letta da file</title></head>"); Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-23

Il codice Java (II) out.println("<body>"); out.println("<table BORDER=\"1\">"); while((linea = input.readline())!= null) { out.println("<tr>"); String[] celle = linea.split(","); out.println("<td>"+celle[0]+"</td>"); out.println("<td>"+celle[1]+"</td>"); out.println("</tr>"); } } } input.close(); out.println("</table>"); out.println("</body></html>"); Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-24

Modifiche al file index.html <HTML> <HEAD> <TITLE>Servlet di prova</title> </HEAD> <BODY> <TABLE>... <TR> <TD> <A HREF="servlet/Tabella">Stampa di una tabella letta da file</a> </TD> </TR> </TABLE> </BODY> </HTML> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-25

Modifiche al file web.xml <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>... <servlet> <servlet-name>tabella</servlet-name> <servlet-class>stampatabella</servlet-class> </servlet> <servlet-mapping> <servlet-name>tabella</servlet-name> <url-pattern>/servlet/tabella</url-pattern> </servlet-mapping> </web-app> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-26

Note sul dispiegamento Ricordarsi di copiare nella cartella servlets della propria home directory su latoserver.dimi.uniud.it anche il file tabella.txt. Esempio di contenuto del file tabella.txt: Riga 1 Colonna 1,Riga 1 Colonna 2 Riga 2 Colonna 1,Riga 2 Colonna 2 Riga 3 Colonna 1,Riga 3 Colonna 2 Riga 4 Colonna 1,Riga 4 Colonna 2 Riga 5 Colonna 1,Riga 5 Colonna 2 Riga 6 Colonna 1,Riga 6 Colonna 2 Riga 7 Colonna 1,Riga 7 Colonna 2 Riga 8 Colonna 1,Riga 8 Colonna 2 Riga 9 Colonna 1,Riga 9 Colonna 2 Riga 10 Colonna 1,Riga 10 Colonna 2 Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-27

Esempio di esecuzione di StampaTabella Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-28

Esercizio Generalizzare la servlet che disegna la tabella in base al contenuto del file di testo tabella.txt in modo da funzionare con un numero arbitrario di colonne. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-29