CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
La mia prima applicazione in ZOPE
Prefazione
Un importante capitolo dell’Informatica moderna riguarda sicuramente Internet che, nella sua forma più diffusa, il Web, è entrata a fare parte del quotidiano. Sempre più attività vengono gestite via Internet, grosse moli di dati attraversano quotidianamente la Rete: dai dati borsistici ai messaggi interpersonali; la necessità di organizzare questi dati in modo da essere velocemente reperibili rappresenta appunto una tra le più importanti aree di questo settore.
In questo articolo viene
presentato uno strumento che permette la costruzione e il mantenimento di siti
Web dinamici, ossia capaci di accedere e di gestire dati memorizzati in sistemi
remoti che ne consentono l’organizzazione, presentando a priori alcuni aspetti
fondamentali della struttura delle applicazioni Web.
In particolare viene presentata una piccola applicazione in Zope che si
interfaccia con un database relazionale SQL esterno
Giugno 2002
Andrea Urso
Indice
Download
dei sorgenti di Gadfly Connection in formato .zexp importabili in ZOPE
Download
dei sorgenti in formato .zexp in ZOPE
Bibliografia:
Siti consultati:
Introduzione
Che cos’è un’applicazione
Web?.
È un’applicazione che utilizza la tecnologia Web (server Web, client Web,
protocolli standard Internet) per offrire, su richiesta da un browser, servizi
che comportano un’elaborazione remota di informazioni.
Esempi di applicazioni Web sono: i motori di ricerca, le prenotazioni online di
alberghi, il commercio elettronico.
Vogliamo porre l’attenzione sulle applicazioni di questo tipo che prevedono l’utilizzo di basi di dati remote.
Innanzi tutto vediamone alcuni vantaggi e svantaggi.
Vantaggi:
Svantaggi:
Distinguiamo fra: pagine statiche e pagine dinamiche.
Il contenuto delle pagine
statiche che compongono un sito è stabilito al momento della loro creazione.
Il contenuto delle pagine dinamiche è invece stabilito al momento della
richiesta da parte dell’utente.
Figura 1. Il Web per la pubblicazione di pagine statiche.
Figura 2. Il Web per la pubblicazione di pagine dinamiche.
Introduciamo adesso i livelli logico-funzionali di un’applicazione Web.
Possiamo distinguere tre possibili livelli:
Nella realizzazione delle applicazioni Web occorre affrontare i seguenti problemi:
Non esiste un unico modo di procedere. La prima cosa che distingue una soluzione da un’altra è la macchina (livello fisico - tier) sulla quale i programmi sono in esecuzione. Qui di seguito sono illustrate alcune possibili architetture.
Tier |
Configurazioni |
Legenda A: logica
dell’applicazione |
|||
Web Browser |
P,A |
P |
P |
P |
|
Web Server |
D |
A,D |
A | ||
Application Server |
A |
||||
Data Server |
D |
D |
A seconda di quale configurazione si realizza possiamo fare un’ulteriore distinzione fra:
La configurazione uno della tabella, sopra riportata, rappresenta la realizzazione di un client pesante, i livelli logico-funzionali P ed A, sono entrambi eseguiti sul Browser Web, cioè stanno entrambi sul lato client, mentre il livello D è realizzato sul lato server.
L’utilizzo di client leggeri o pesanti dipende molto da dove viene utilizzata l’applicazione. Per esempio se l’applicazione gira su Intranet, allora possono andare bene anche i client pesanti, mentre se l’applicazione gira su Internet, allora è consigliabile che i client siano leggeri.
Le configurazioni da due a quattro rappresentano varie possibilità di realizzare client leggeri, infatti sul lato client è presente solamente il livello P, mentre gli altri due livelli logico-funzionali possono essere eseguiti negli altri tier.
Recentemente sono stati sviluppati ambienti integrati per lo sviluppo di applicazioni Web, alcuni esempi rilevanti sono:
In questo articolo illustrerò alcuni aspetti del sistema ZOPE.
Innanzi tutto: che cos’è ZOPE?
ZOPE significa: Z Objects Publishing Environment. Si tratta di un Web Application Server la cui caratteristica è quella di creare applicazioni Web che per essere mantenute ed eseguite necessitano soltanto di un browser sul lato client, viene così eliminata la necessità di dover installare del software aggiuntivo realizzando quelli che vengono in gergo chiamati client leggeri. ZOPE è un software di tipo open source inizialmente ideato dalla Digital Creations e che oggi viene sviluppato in collaborazione con i molti membri della community che contribuiscono all’aggiunta e al miglioramento delle sue caratteristiche. È garantita la portabilità su piattaforme Windows, Linux e Solaris e la possibilità di utilizzare basi di dati di tipo relazionale realizzate con i più comuni Sistemi per la loro gestione (DBMS).
ZOPE è costituito da più moduli interagenti:
Zope è distribuito in due formati: uno pre-compilato per i vari sistemi operativi, da installare direttamente; oppure nella versione sorgente che deve essere compilata.
La versione pre-compilata ha il vantaggio di essere di facile installazione, mentre quella con i file sorgenti è più piccola e veloce da scaricare dalla Rete e inoltre è possibile effettuare modifiche (è Open Source!).
Ad esempio la distribuzione per Windows la si installa molto facilmente in quanto consiste in una serie di file compressi che nel momento stesso in cui si decomprimono (utilizzando WinZip) si installano correttamente nelle cartelle predefinite.
La versione di Zope di cui si è fatto uso in questa tesi è la 2.4.0. inclusa nel libro Zope web application construction kit (vedi bibliografia) installata su un PC con sistema operativo Windows 98.
Per iniziare l’installazione occorre eseguire il file Zope-2.4.0.exe cliccando sopra la relativa icona oppure dando il comando da DOS. A questo punto si aprirà una finestra che ci guiderà durante l’installazione, occorrerà specificare in quale folder (cartella) installare l’applicazione.
Alla fine verrà chiesto di inserire uno username ed una password che permetteranno di identificare l’amministratore di ZOPE. A questo punto i file cominceranno ad essere installati nella directory prescelta. Supponendo di avere scelto l’installazione standard, Zope utilizzerà il proprio server Web: ZServer, che il programma di installazione avrà configurato sulla macchina in cui si è deciso di installare Zope, l’unica cosa che adesso rimane da fare è mandarlo in esecuzione:
Eseguire
il programma start.exe contenuto in /programmi/WebSite.
Aprire un browser, per esempio Netscape digitando come URL https://localhost:8080/manage. Saranno
richiesti lo username e la password dell’amministratore, inseriti durante
l’installazione, quindi si entrerà nella pagina principale di Zope dalla quale
sarà possibile iniziare a sviluppare le proprie applicazioni Web.
Nota: l’indirizzo https://localhost:8080 ha uno specifico significato per il browser Web, significa: “questa macchina”. Se la macchina ha un nome differente e' ugualmente possibile accedere a Zope attraverso l’indirizzo https://NomeDellaMacchina.com:8080.
Cenni sul protocollo HTTP, CGI e ZServer.
Descriviamo brevemente il
protocollo HTTP
HTTP è l’acronimo di Hiper Text Transfer Protocol. Si tratta del
protocollo che permette la comunicazione fra un client Web e un server Web. Il
client apre una connessione con il server e gli invia una richiesta.
Il server elabora la richiesta e restituisce una risposta. Alla fine
della comunicazione la connessione viene chiusa.
Il cliente fa uso di un browser Web che deve essere capace di interpretare la risposta ricevuta e di aprire altre eventuali connessioni con il server Web, queste ultime invisibili all’utente, in modo da ricevere altre informazioni riguardanti ad esempio il modo in cui il documento deve essere visualizzato. Ad ogni richiesta corrisponde l’apertura e la successiva chiusura di una connessione. La richiesta eseguita da un cliente avviene attraverso l’invio di un URL e di altre informazioni relative al browser che si sta utilizzando.
Distinguiamo fra i metodi GET e POST, entrambi fanno richiesta di informazioni al server ma con alcune differenze.
Il metodo GET viene utilizzato in genere quando la richiesta al server Web è, per esempio, l’apertura di una nuova pagina richiamata cliccando su un link alla pagina.
Il metodo POST viene in genere utilizzato nell’esecuzione di form che comporta, per esempio, l’invio di dati al server.
Nel caso di pagine Web dinamiche si fa uso di ulteriori meccanismi come il CGI.
Descriviamo brevemente
che cos’è il CGI.
CGI è l’acronimo di Common Gateway Interface. Si tratta del metodo con
cui un server Web comunica con i programmi sviluppati per rispondere alle
richieste che gli utenti formulano attraverso il browser Web. L’input che
l’utente da attraverso un browser è processato da uno script CGI.
Figura 3. Generica richiesta Web processata da uno script CGI
In figura 3 è possibile distinguere i seguenti passi:
Svantaggi di questo metodo sono ad esempio i cicli di clock spesi dalla CPU in quanto ad ogni richiesta segue l’esecuzione di uno script CGI.
Zope invece è sempre attivo in background (a tale proposito viene definito un long running process o demone se si è sotto un sistema Unix) e non termina alla fine di una richiesta Web.
In questa maniera può rispondere alla richiesta successiva da parte del server Web evitando gli overhead in cui i programmi CGI occorrono ad ogni nuova richiesta.
Che cos’è ZServer.
Si tratta di un server Web scritto in C, che fa parte di ogni distribuzione di
Zope e che permette di eseguire Zope pur non avendo a disposizione un server
Web, come Apache.
In aggiunta ad un server Web, Zserver fornisce un server FTP e un server PCGI.
Alle volte è preferibile utilizzare Zope con un altro server Web (Apache per esempio) piuttosto che con Zserver. Apache fornisce infatti più servizi dello ZServer oppure permette di gestire un sito Web gestito con Zope solamente in parte.
Se non si utilizza lo Zserver, allora occorre configurare il server utilizzando l’applicazione PCGI. Si tratta di un’applicazione leggera che il server Web lancia ogni volta che si effettua una richiesta per dialogare con Zope.
Per utilizzare Zope con Apache occorre:
Installare Zope.
Copiare il file Zope.cgi in: home/httpd/cgi-bin/ utilizzando il comando Cp –p Zope.cgi /home/httpd/cgi-bin
Il parametro –p è importante in quanto Zope.cgi non può avere proprietari.
Assicurarsi che Apache trasferisca i dati di autenticazione a Zope editando il file httpd.conf. Per fare questo occorre essere in Linux come root, aprire il file Zope.cgi con un editor di testi ed aggiungere le seguenti righe di codice:
1:
RewriteEngine on
2: NevriteCond % ^(.*)
3: RewriteRule ^/Zope(.*) /home/httpd/cgi-bin/Zope.cgi$1
[e=HTTP_CGI_AUTHORIZATION:%1,t+application/x-httpd-cgi,l]
A questo punto è necessario fare ripartire Apache.
I Fondamenti di Zope: connessione e DTML
Tra gli aspetti di ZOPE, quelli che saranno trattati nei prossimi paragrafi sono relativi alla sua connessione ad una base di dati esterna indipendentemente dalla categoria (commerciali od open source) alla quale questa appartiene e a come realizzare le interfacce che ne permetteranno l’interrogazione attraverso un browser.
Per essere connesso ad una base di dati esterna ZOPE ha bisogno di un adattatore. Esistono differenti adattatori secondo quale sistema viene utilizzato per la gestione della base di dati: MySQL, Gadfly, ecc.
Attraverso questa connessione ZOPE invia ad esempio un comando SQL, questo viene elaborato e le informazioni richieste vengono restituite attraverso tale collegamento.
Per rendere possibile l’interrogazione della base di dati e la visualizzazione delle informazioni richieste attraverso un browser, è necessario creare pagine Web di tipo dinamico. Per renderle tali occorre utilizzare insieme al linguaggio HTML un altro linguaggio simile a quest’ultimo che prende il nome di DTML: Document Template Markup Language.
Per costruire applicazioni Web con ZOPE occorre utilizzare folder (cartelle) che conterranno gli oggetti che di volta in volta saranno creati.
I folder permettono di organizzare la struttura dell’applicazione. All’interno dei folder gli oggetti, con l’aggiunta di script, diventano parte integrante dell’applicazione. In questa maniera, oltre a costituire la vera e propria impalcatura che sorregge il sito, la struttura rende visibili i livelli logico–funzionali dell’applicazione.
Un’importante caratteristica di ZOPE è quella di poter chiamare un qualunque oggetto contenuto all’interno di un folder attraverso l’URL all’oggetto stesso. L’URL consiste nel cammino fino al folder che contiene l’oggetto da richiamare seguito poi dal nome di questo. Gli oggetti possono quindi essere richiamati e manipolati attraverso il browser.
Sono presenti due possibili tipi di metodi: DTML e ZSQL, con i quali si realizzano le applicazioni Web.
Nota: in ZOPE i metodi sono dei file che contengono codice eseguibile.
Vediamo come realizzare in ZOPE, attraverso tali metodi, i programmi dei tre livelli logico – funzionali che costituiscono un’applicazione Web e come questi sono distribuiti sulle macchine della rete (livello fisico – tier).
L’architettura principale di applicazioni Web realizzate con ZOPE è la seguente:
I metodi DTML sono realizzati in un linguaggio di scripting la cui sintassi è simile a quella dell’HTML, i comandi sono eseguiti da ZOPE sul lato servente e i risultati, inviati attraverso la rete, vengono visualizzati sul lato cliente tramite un browser Web.
Una volta dentro ZOPE, per creare un metodo DTML basta sceglierlo dal menu a tendina presente nella schermata principale (vedi figura 4). Verrà immediatamente caricata la forma che permetterà l’inserimento del codice nell’area di testo.
I metodi ZSQL sono utilizzati per contenere le interrogazioni ed i comandi SQL per manipolare i dati contenuti nel DBMS connesso. Anche per creare un metodo ZSQL basta sceglierlo dal menu a tendina nella schermata principale di ZOPE. Verrà immediatamente caricata la forma che permetterà l’inserimento del codice SQL nell’area di testo.
Come vedremo in seguito, i metodi possono richiamare e manipolare al loro interno altri metodi, siano questi definiti dal programmatore o facenti parte di librerie (API). Viene così realizzata la comunicazione tra i tre livelli logico – funzionali.
Figura 4. Schermata iniziale di ZOPE
Tag DTML. Qui di seguito sono presentati una serie di tag propri del linguaggio DTML di Zope e la loro funzionalità. Questi tag verranno utilizzati nello sviluppo dell’applicazione presentata nel Capitolo 3.
Come già detto, la sintassi è simile a quella del linguaggio HTML: si utilizzano tag racchiusi tra le parentesi < >.
<dtml-tag nome
attributo =”valore” >
Codice
</dtml-tag nome >
Questi tag consentono di operare sui dati in maniera mirata riguardo alla gestione di applicazioni Web e consentono di definire, con poche righe di codice, operazioni che altrimenti necessiterebbero dell’uso di costrutti più pesanti, come avviene ad esempio per il linguaggio Java. A tale proposito è bene mettere in rilievo la potenza dei metodi DTML eseguiti sul lato server che hanno infatti funzionalità equivalenti alle servlet Java permettendo, per esempio, l’interazione con una base di dati esterna. Questi metodi, che restituiscono HTML, differiscono invece dalle servlet Java poiché non mescolano il codice SQL con il codice DTML, ma chiamano gli appositi metodi ZSQL per svolgere le operazioni sulla base di dati connessa.
Connessione ad una base di dati esterna.
Per creare una connessione ad una base di dati esterna occorre installare l’opportuno adattatore, disponibile sul sito ufficiale di ZOPE (www.ZOPE.org).
È sufficiente scaricare dal sito il file compresso dell’adattatore desiderato, copiarlo nella directory di ZOPE ed eseguire le seguenti operazioni.
Supponiamo di voler connettere ZOPE ad una base di dati realizzata con MySQL.
Scaricando dal sito di ZOPE il relativo adattatore e spacchettandolo, questo si installerà automaticamente nella directory:
/lib/python/Products/ZMySQLDA contenuta nella directory di ZOPE.
Occorre scaricare anche il driver relativo alla base di dati che si vuole utilizzare ponendolo nella directory:
/lib/python/Products/ e spacchettare anche questo file.
Oltre a questo prodotto Zope sarà necessario installare il modulo MySQLdb presente nelle distribuzioni Python.
A questo punto la connessione ZMySQL sarà presente nel menu principale di ZOPE.
Nota: se per esempio si utilizza MySQL con il sistema operativo Windows, allora poichè la compilazione dei file è un po’ problematica in tali sistemi, occorre procurarsi i file del driver e dell’adattatore già compilati per tale sistema e sarà sufficiente porli nelle directory sopra elencate.
Vediamo adesso come realizzare la connessione fra ZOPE e la base di dati.
Innanzi tutto occorre far partire ZOPE attraverso un browser come Netscape o Explorer.
Se l’adattatore per la base di dati è stato correttamente installato, allora il menu contenente la lista degli oggetti nella schermata principale di ZOPE conterrà anche il nuovo oggetto ZMySQL. Sarà sufficiente selezionare tale oggetto per creare la connessione con il DBMS.
Del pacchetto di ZOPE fa parte anche un piccolo sistema per la gestione delle basi di dati: Gadfly. Le sue caratteristiche non sono minimamente comparabili con quelle di altri sistemi, come MySQL, ma sono ugualmente sufficienti per testare la connessione di ZOPE a una base di dati esterna, mostrare com’è possibile eseguire delle interrogazioni attraverso delle semplici interfacce e come realizzare i programmi dei tre livelli logico – funzionali. Gadfly, così come ZOPE, è stato scritto in Python e gira su qualunque sistema su cui è installato Python indipendentemente dal sistema operativo. Le applicazioni realizzate con ZOPE per essere eseguite sul lato cliente non hanno bisogno di alcun software preinstallato. È sufficiente il solo browser Web. Il pacchetto di ZOPE contiene già una versione di Python.
Nel prossimo paragrafo sarà mostrata la connessione a Gadfly.
Così com’è stato descritto precedentemente, prima di poter utilizzare una base di dati occorre effettuarne la connessione. Questo viene fatto creando un’istanza dell’adattatore della base di dati: scegliendo dal menu degli oggetti nella schermata principale di ZOPE la connessione a Gadfly, il browser aprirà automaticamente la pagina contenente la forma, mostrata in figura 5, per l’impostazione della connessione alla base di dati.
In generale, quando si crea un oggetto in ZOPE questo necessita di un identificatore univoco: Id, che è utilizzato come un URL all’oggetto.
Anche la connessione a Gadfly necessita dunque di un Id.
Occorre selezionare anche il folder che conterrà i dati, per esempio utilizzando ZOPE con il sistema operativo Windows, tale folder dovrà essere creato preventivamente all’interno di:
vargadfly e comparirà nella finestra Data Source.
Una volta compilata la forma e premuto il bottone Add, sulla schermata principale di ZOPE apparirà l’istanza della connessione a Gadfly così come mostrato in figura 6.
Cliccando col mouse su tale istanza si avranno più viste della connessione alla base di dati: Status, Properties, Test, Security, Undo, Ownership, Browse.
Verranno presentate solamente le viste Test e Browse.
Figura 5. Connessione a Gadfly
Figura 6. Istanza della connessione a Gadfly all’interno di un’applicazione
La finestra Test permette l’inserimento di codice SQL e la possibilità di testare le asserzioni inserite restituendo la schermata in figura 7, oppure errore se la sintassi dell’SQL non è corretta. In figura 8 è invece mostrata la finestra Browse nella quale è possibile vedere il nome e le proprietà dei campi delle tabelle create.
Figura 7. Finestra di Test
Figura 8. Test del comando SQL
Figura 9. Schermata Browse
Una volta creata la base di dati, occorre renderla accessibile dall’esterno, cioè un qualunque utente, sul lato client, deve essere in grado di poterla utilizzare. Sono quindi necessarie delle interfacce che permettano all’utente una semplice interazione con la base di dati. Nella realizzazione di tali interfacce, che rappresentano il livello logico della presentazione di un’applicazione Web, occorre tenere sotto controllo alcuni aspetti fondamentali quali la necessità di rendere chiari i contenuti delle pagine e snella la navigazione lungo il sito pur non trascurandone il lato estetico. È chiaro che senza tali interfacce l’aggiornamento di tabelle, e più in generale l’esecuzione di comandi SQL, attraverso la finestra Test, non rispecchierebbe queste specifiche. Una maniera per inserire i dati e per eseguire i controlli su di questi è data dalla possibilità di creare dei metodi intermedi, fra l’interfaccia che l’utente usa per immettere le proprie richieste e la base di dati, appartenenti al livello della logica applicativa. In ZOPE i metodi che vanno utilizzati a tale scopo in un’applicazione sono del tipo DTML e ZSQL.
La realizzazione di metodi DTML permette la creazione delle interfacce utente con cui inserire, per esempio, i dati in una tabella. Tali dati sono quindi inviati ad un secondo metodo DTML che costituisce l’applicazione su cui ad esempio realizzare i controlli necessari ad assicurare la correttezza dei dati inseriti. Alla fine questo metodo provvederà a chiamare un terzo metodo di tipo ZSQL che, attraverso la connessione con la base di dati, aggiornerà le tabelle.
Nelle prossime pagine sarà presentato un esempio di interazione fra ZOPE e una base di dati realizzata con Gadfly.
In questo capitolo sarà illustrato come realizzare un’applicazione Web che fa uso di una base di dati: le relative interfacce ed applicazioni attraverso gli strumenti che ZOPE mette a disposizione. Per ragioni di tipo logistico tale esempio è stato realizzato su un PC con sistema operativo Windows 98 e con l’impiego del DBMS Gadfly interno a Zope.
Scopo dell’applicazione è quello di rendere disponibile via Internet un servizio di interrogazione e modifica di una base di dati relativa agli studenti e agli esami da questi sostenuti. Ovviamente si tratta di un esempio giocattolo il cui scopo è solamente quello di porre in evidenza alcune peculiarità di ZOPE.
L’applicazione si presenta all’utente con una semplice interfaccia, vedi figura 10, dalla quale è possibile scegliere una delle seguenti opzioni:
1. Aggiungi un nuovo studente
Figura 10. Menu principale dell’applicazione web
Una volta scelta dal menu l’operazione da eseguire, viene subito caricata la forma che ne permette l’utilizzo, qui in figura 11 è mostrata l’interfaccia per l’inserimento di un nuovo studente e in figura 12, la risposta del sistema dopo l’inserimento.
Figura 11. Maschera per l’inserimento di un nuovo studente
Figura 12. Conferma della riuscita dell’inserimento
Le prossime due figure mostrano ciò che l’utente riceve nel caso si scelga di interrogare la base di dati per conoscere gli esami sostenuti da uno studente.
Figura 13. Ricerca degli esami sostenuti da uno studente
Figura 14. Esito della ricerca
A questo punto dovrebbe essere chiaro il funzionamento dell’applicazione, ma per completezza riportiamo qui di seguito lo schema della base di dati proponendoci nei prossimi paragrafi di spiegare tutti i passi della sua realizzazione.
Uno studente può aver sostenuto più di un esame. L’esame è stato sostenuto da un candidato.
Studenti:(Matricola, Cognome, Nome, AnnoDi Nascita, Provincia)
Esami: (Candidato*, Materia, Voto, Lode)
Operazioni ed interrogazioni sulla base di dati:
Creazione delle tabelle.
I passi da seguire sono:
Come è stato già detto, Gadfly non è un vero e proprio sistema per la gestione di basi di dati, infatti molte funzioni comuni a tali sistemi non sono implementate in esso, risulta comunque sufficiente per mostrare i vantaggi che si hanno nell’utilizzo di ZOPE per la realizzazione di pagine dinamiche.
Figura 15. Tabelle Studenti, Esami in Gadfly
Vediamo adesso l’implementazione dei tre livelli logico – funzionali dell’applicazione.
All’interno del folder StudentiEsami creiamo altri due subfolder che chiameremo:
Presentazionie Applicativi.
Questi conterranno rispettivamente:
Figura 16. Struttura ad albero dei folder dell’applicazione Studenti Esami.
Figura 17. I livelli logico-funzionali un’applicazione Web in ZOPE.
Figura 18. I livelli logico-funzionali un’applicazione Web in ZOPE.
Realizzazione del livello dei dati: I metodi Z SQL.
Per operare sulla base di dati realizzata con Gadfly sono necessari tanti metodi quante sono le operazioni che si intendono rendere possibili, per esempio: la creazione e la cancellazione di uno studente, la ricerca per numero di matricola e così via.
Ogni metodo ZSQL esegue le richieste effettuate dai programmi che implementano la logica della presentazione comunicando, agli stessi, l’esito delle operazioni o le informazioni recuperate dalla base di dati.
Dal menu della schermata principale di ZOPE scegliendo di aggiungere un metodo ZSQL, il browser caricherà la forma mostrata in figura 18 che permetterà l’inserimento del codice.
Il codice di tali metodi è una commistione fra codice SQL e DTML, quest’ultimo utilizzato per la comunicazione (passaggio dei valori delle variabili) con il livello della logica dell’applicazione Web.
Figura 18. Metodo Z-SQL
Qui di seguito sono riportati i metodi ZSQL necessari alla realizzazione delle operazioni e delle interrogazioni sulla base di dati StudentiEsami.
Cancella_Studente:
DELETE
FROM Studenti
WHERE matricola= <dtml-sqlvar Matricola>
Cancella dalla tabella Studenti tutti i campi relativi allo studente con quella matricola il cui valore è stato inserito nella variabile Matricola.
InserisciNuovoStudente:
INSERT
INTO Studenti
(Matricola, Cognome, Nome, AnnoDiNascita, Provincia)
VALUES
(<dtml-sqlvar Matricola type=int>,
<dtml-sqlvar Cognome type=string>,
<dtml-sqlvar Nome type=string>,
<dtml-sqlvar AnnoDiNascita type=int>,
<dtml-sqlvar Provincia type=string>
Esegue l’inserimento di un nuovo studente nella tabella Studenti i cui campi saranno riempiti con i valori delle variabili.
Ricerca_per_Matricola:
SELECT
*
FROM Studenti
WHERE matricola = <dtml-sqlvar Matricola type=int>
Ricerca all’interno della tabella Studenti lo studente associato ad una specifica matricola.
Tutti_gli_Studenti:
SELECT
*
FROM Studenti
Matricola:
SELECT
matricola
FROM Studenti
WHERE matricola= <dtml-sqlvar matricola type=int>
Aggiungi_Esame:
INSERT
INTO Esami(Candidato, Materia, Voto, Lode)
VALUES
(<dtml-sqlvar Candidato type=int>,
<dtml-sqlvar Materia type=string>,
<dtml-sqlvar Voto type=int>,
<dtml-sqlvar Lode type=string>
Inserisce nella tabella Esami i valori contenuti nelle variabili.
Cancella_Esame:
DELETE
FROM Esami
WHERE Materia = <dtml-sqlvar Materia type=string>
Tutti_gli_Esami:
SELECT
*
FROM Esami
Giunzione:
SELECT
matricola, cognome, materia, voto, lode
FROM Studenti, Esami
WHERE <dtml-sqlvar Candidato type=int> = candidato
AND matricola= candidato
Esegue un’interrogazione selezionando i campi da entrambe le tabelle (Studenti ed Esami) che soddisfano la condizione: matricola uguale candidato, dove candidato è stato inserito dall’esterno.
All’interno dei metodi Z SQL sopra elencati sono presenti alcuni tag del tipo:
<dtml-sqlvar nome_della_variabile>
Questo tag viene utilizzato all’interno di metodi ZSQL e permette l’inserimento di variabili nel codice SQL controllano il tipo dei dati. Attraverso le variabili avviene la comunicazione fra i livelli: logica dell’applicazione e gestione dei dati.
È dunque possibile testare i singoli metodi e procedere all’inserimento di alcuni dati.
Per ogni operazione da eseguire sulla base di dati ai metodi ZSQL vengono associati altri due metodi di tipo DTML necessari per l’inserimento dei dati attraverso il browser e per realizzare l’applicazione vera e propria. A tal proposito distinguiamo tra:
Con il primo tipo di nome è indicata l’interfaccia che viene visualizzata attraverso il browser e che permette all’utente l’inserimento dei valori nei campi necessari all’aggiornamento delle tabelle o all’esecuzione di un’interrogazione.
Con il secondo tipo di nome viene identificato il metodo applicativo, intermediario fra il primo metodo DTML e il rispettivo metodo ZSQL. Questo costituisce l’applicazione vera e propria nella quale sono eseguiti tutti gli eventuali controlli sui dati prima di interagire con il DBMS. L’importanza di tali metodi è data anche dal fatto che è di estrema utilità mantenere riuniti in un unico file l’insieme dei controlli da eseguire sui dati in modo da garantire una veloce individuazione delle eventuali modifiche da dovere apportare all’applicazione.
I primi due metodi qui presentati permettono l’inserimento di un nuovo studente nella tabella Studenti della base di dati.
Aggiungi_Form:
<h1>
Aggiungi un nuovo studente </h1>
</center>
<form action='Applicativi/MetodiDTML/Aggiungi_html'
method=post>
<table
width='100%'>
<tr>
<td> Matricola:</td>
<td> <input type='text' name='matricola'
size=6></td>
</tr>
<tr>
<td> Cognome:</td>
<td> <input type='text' name='cognome'
size=20></td>
</tr>
<tr>
<td> Nome:</td>
<td> <input type='text' name='nome'
size=20></td>
</tr>
<tr>
<td> Anno di nascita:</td>
<td> <input type='text' name='annodinascita'
size=4></td>
</tr>
<tr>
<td> Provincia:</td>
<td> <input type='text' name='provincia'
size=20></td>
</tr>
<td colspan=2>
<input
type='submit' value='Aggiungi record'>
</td>
</table>
</form>
<dtml-var standard_html_footer>
<dtml-var
standard_html_header>
<dtml-let result = MetodiZSQL.Matricola(matricola=matricola)'>
<dtml-if '_.len(result)= = 0'>
<center>
<h2>Lo studente è stato inserito</h2>
</center>
<dtml-call 'MetodiZSQL.InserisciNuovoStudente
matricola=_['matricola'],
cognome=_['cognome'],
nome=_['nome'],
annodinascita=_['annodinascita'],
provincia=_['provincia'])'>
<dtml-else>
<center>
<h2>Errore Matricola già esistente</h2>
</center>v </dtml-if>
</dtml-let>
<table>
<tr>
<td>
<form action='Applicativi/MetodiDTML/Aggiungi_Form'>
<input type='submit' value='Inserisci ancora'>v
</form>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
</td>
</tr>
</table>
<dtml-var standard_html_footer>
Del tutto analoghi ai due metodi precedenti sono quelli relativi all’inserimento di un nuovo esame nella tabella Esami.
I prossimi due metodi DTML sono quelli che implementano la ricerca di uno studente in base al suo numero di matricola.
Ricerca_Form:<dtml-var standard_html_header>
<center>
<h2>Ricerca di uno studente</h2>
</center>
<form action='Applicativi/MetodiDTML/Ricerca_html' method=post>
<table width='100%'>
<tr>
<td>Matricola:</td>
<td><input type='text' name='matricola'
size=6></td>
</tr>
<tr>
<td colspan=2><input type='submit'
value='Cerca'></td>
</tr>
</table>
</form>
<dtml-var standard_html_footer>
Ricerca_html:
<dtml-var standard_html_header>
<center>
<h2>Risultato della ricerca</h2>
</center>
<table width='100%' border=2>
<tr>
<th>Matricola</th>
<th>Cognome</th>
<th>Nome</th>
<th>Anno Di Nascita</th>
<th>Provincia</th>
</tr>
<dtml-in MetodiZSQL.Ricerca_per_Matricola(matricola=matricola)'>
<tr>
<td><dtml-var matricola></td>
<td><dtml-var cognome></td>
<td><dtml-var nome></td>
<td><dtml-var annodinascita></td>
<td><dtml-var provincia></td>
</tr>
</dtml-in>
</table>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
I prossimi due metodi DTML sono quelli relativi alla cancellazione di uno studente in base al numero di matricola.
Cancella_Form
<dtml-var standard_html_header>
<center>
<h1>Cancella uno studente </h1>
</center>
<form action='Applicativi/MetodiDTML/Cancella_html'
method=post>
<table width='100%'>
<tr>
<td>Matricola:</td>
<td><input type='text' name='matricola'
size=6></td>
</tr>
<tr>
<td colspan=2><input type='submit'
value='Cancella'></td>
</tr>
</table>
</form>
<dtml-var standard_html_footer>
<dtml-var
standard_html_header>
<center>
<h2>Studente cancellato</h2>
</center>
<br>
<dtml-call 'MetodiZSQL.Cancella_Studente(
matricola=_['matricola'])'>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
<dtml-var standard_html_footer>
I prossimi due metodi DTML sono quelli relativi alla ricerca di uno degli esami sostenuti da uno studente. La ricerca è basata sul numero di matricola dello studente.
Giunzione_Form
<table width='100%'>
<tr>
<center>
<h1> Ricerca degli esami sostenuti da uno studente </h1>
</tr>
</table>
<form action='Applicativi/MetodiDTML/Giunzione_html'
method=post>
<tr>
<td>Matricola:</td>
<td><input type='text' name='Candidato'
size=6></td>
</tr>
<td colspan=2>
<input type='submit' value='Cerca'></td>
</form>
</center>
<dtml-var standard_html_footer>
Giunzione_html
<dtml-var standard_html_header>
<center>
<h2>Risultato della ricerca</h2>
</center>
<table width='100%' border=2>
<tr>
<th>Matricola</th>
<th>Cognome</th>
<th>Materia</th>
<th>Voto</th>
<th>Lode</th>
</tr>
<dtml-in 'MetodiZSQL.Provagiunzione(Candidato=Candidato)'>
<tr>
<td><dtml-var matricola></td>
<td><dtml-var cognome></td>
<td><dtml-var materia></td>
<td><dtml-var voto></td>
<td><dtml-var lode></td>
</tr>
</dtml-in>
</table>
<form action='Index_html'>
<input type='submit' value='Menu principale'>
</form>
<dtml-var standard_html_footer>
Il metodo Index è invece il menu principale dal quale scegliere le operazioni da eseguire sulla base di dati.
Index_html
<center>
<h1>Menu principale</h1>
<p>
<h2>Base di dati Studenti - Esami </h2>
</center>
<p>
<br>
<a href='/StudentiEsami/Presentazioni/Aggiungi_Form'>
Aggiungi un nuovo studente</a>
<p>
<a href='/StudentiEsami/Presentazioni/Cancella_Form'>
Cancella studente</a>
<p>
<a href='/StudentiEsami/Presentazioni/RicercaForm_html'>
Ricerca uno studente</a>
<p>
<a href='/StudentiEsami/Presentazioni/Giunzione_Form'>
Visualizza esami di uno studente</a>
<p>
<br>
<dtml-var standard_html_footer>
Evoluzione di ZOPE e considerazioni personali.
Il principale obiettivo che si sono prefissati alla Digital Creations è quello di rendere sempre “più semplice” la vita agli sviluppatori di siti Web. ZOPE è un progetto che si è sviluppato nel corso di anni durante i quali sono venuti fuori diversi aspetti che saranno tenuti in considerazione nella realizzazione delle versioni più aggiornate:
ZOPE vs WebObjects.
Sia Zope che WebObjects forniscono gli strumenti necessari alla creazione di applicazioni basate sulla tecnologia Web. Entrambi sono del tipo object-oriented.
Disponibilità:
ZOPE è un sistema open source eseguibile sotto diversi sistemi operativi. Lo si può scaricare gratuitamente dal sito assieme a molto altro materiale utile per lo sviluppo di applicazioni.
WebObjects è un prodotto in commercio che si può acquistare via internet all’indirizzo https://store.apple.com al costo di 699 US$.
Linguaggi:
ZOPE è scritto in Python ed utilizza il linguaggio DTML immerso nell’HTML per creare i propri metodi. Prevede l’impiego di script Python e Perl.
WebObjects è scritto in Java e in C. Utilizza HTML per creare le pagine Web e prevede l’impiego di script in Java.
Considerazioni finali.
Il fatto che ZOPE sia open source e che la portabilità delle applicazioni su varie piattaforme è molto semplice e funzionale, fa sì che questo prodotto abbia una rapida diffusione. Sono già diverse le società che utilizzano ZOPE.
Il modo con cui ZOPE permette la programmazione delle applicazioni fa sì che i tempi di realizzazione di queste siano contenuti. Gli strumenti che vengono forniti per il mantenimento di tali applicazioni ne fanno un prodotto piuttosto valido.
Durante lo studio di ZOPE, ho trovato un po’ forzato l’impiego di termini come: oggetto, metodo e stato anche se, in una visione molto larga, tali definizioni possono essere considerate accettabili.
Nello sviluppo dell’applicazione presentata, ho potuto sperimentare una maggiore efficienza di ZOPE con l’impiego del browser Web Netscape Navigator, piuttosto che Microsoft Explorer, soprattutto per la gestione delle finestre di Test e di autorizzazione dell’accesso al sistema da parte dell’amministratore. Ciò mi ha portato a pensare che ZOPE sia stato sviluppato principalmente con l’ausilio di Netscape vedendo in questo il principale strumento di impiego. Seppur marginali rispetto al funzionamento generale, le inefficienze riscontrate con l’impiego di Explorer sono evidenti e possibili cause di problemi più grossi.
Per quanto riguarda l’utilizzo di sistemi operativi diversi (ho provato ZOPE sia con Windows 98 che con Linux Red Hat 7.0) non ho riscontrato sostanziali differenze.
L’applicazione utilizza il DBMS Gadfly che, seppur sufficiente allo scopo preposto, presenta parecchie limitazioni. L’insieme dei comandi SQL a disposizione del programmatore è molto limitato: sono del tutto assenti alcuni dei comandi fondamentali, per esempio per la gestione delle chiavi primarie e delle chiavi esterne, nonché l’impossibilità di definire le proprietà degli attributi delle tabelle create.
Un secondo aspetto di ZOPE, non in ordine di importanza, è quello relativo alle sue capacità di gestione e di mantenimento delle applicazioni sul server (utilizzando lo Zserver). In questo articolo tale aspetto è stato solamente accennato e l’applicazione presentata, che descrive in minima parte le potenzialità ZOPE, non mostra questo secondo aspetto. La possibilità di creare portali e di mantenerli è il principale impiego di ZOPE.
Durante la stesura di questo articolo il mio interesse e la mia curiosità per ZOPE sono aumentati, tanto da stimolarmi ad apprendere un linguaggio di scripting come Python, per sfruttare al meglio le potenzialità di questo application server
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1825
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved
Distribuie URL
Adauga cod HTML in site