A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

49
a.a. 2004/05 Tecnologie Web 1 Applicazioni Web server-side: Java Servlet

Transcript of A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

Page 1: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 1

Applicazioni Web server-side: Java Servlet

Page 2: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 2

Ricordiamoci che…

• Il Web è basato su un’architettura client-server• Server = processo (programma in esecuzione) che

– resta “in ascolto” (in attesa di richieste) su una macchina server

– ad ogni richiesta esegue un’azione per gestirla (recuperare una pagina web, eseguire un programma, …)

– restituisce al chiamante risultato (pagina richiesta, risultato di esecuzione del programma, …)

• Client = programma che effettua richieste al server• Il protocollo applicativo utilizzato dal Web è HTTP,

che è basato su due tipi di azioni– richiesta (request) da client a server– risposta (response) da server a client

Page 3: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 3

La richiesta del client è espressa mediante un URL (identificatore univoco di una risorsa sul Web), può richiedere:• La visualizzazione, sul client, di una pagina statica:

http://www.di.unito.it/people/goy.html

• La visualizzazione, sul client, di una pagina dinamica, frutto di un’elaborazione precedentemente avvenuta sul server: http://www.di.unito.it/negozio/prezzo.jsp

• L’esecuzione, sul server, di un programma:http://www.di.unito.it/negozio/calcolaPrezzo

In questi ultimi due casi è possibile includere nella richiesta dei dati (parametri) su cui la pagina dinamica o il programma potranno lavorare:http://www.di.unito.it/negozio/prezzo.jsp?prec=100&spesa=25http://www.di.unito.it/ negozio/calcolaPrezzo?prec=100&spesa=25

HTTP request: URL

Page 4: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 4

HTTP request: metodo GET

La richiesta del client può utilizzate due diverse modalità:1) Il metodo GET• il client inserisce i parametri (dati) contenuti nella richiesta

HTTP in coda all’URL sono visibili nella barra dell’indirizzo del browser!!! Per es: http://www.di.unito.it/negozio/prezzo.jsp?prec=100&spesa=25http://www.di.unito.it/ negozio/ calcolaPrezzo?prec=100&spesa=25

• Tipo di informazioni trasmissibile è limitato (molti browser limitano lunghezza di URL+query a 255 caratteri)

2) Il metodo POST• i dati (parametri) vengono incapsulati all’interno del

messaggio di richiesta (e non in coda all’URL) e quindi NON sono visibili all’utente

• Può inviare al server quantità “illimitata” di dati

Page 5: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 5

Applicazioni web server-side

In generale un’applicazione web (server-side) è composta di molte risorse, statiche (es. pagine HTML) o dinamiche (programmi eseguibili)I programmi che appartengono ad un’applicazione web server-side sono programmi come altri ma:• li si deve poter invocare attraverso il web server

quando il server riceve la richiesta, deve poter identificare ed eseguire il programma richiesto

• il web server deve poter passare al programma la HTTP request (affinchè il programma la interpreti)

• quando il programma ha ottenuto il risultato, lo “impacchetta” e lo invia al web server che lo spedisce al client via HTTP response

Page 6: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 6

Tecnologie server-side: CGI

Common Gateway Interface

• la tecnologia CGI permette ad un web server di invocare un programma esterno passandogli i dati contenuti nella HTTP request

• il programma invocato processa la HTTP request, esegue il suo lavoro (per es. query a database) e restituisce il risultato al web server che, attraverso la HTTP response, lo invia al client

• supportata praticamente da tutti i web server

• programmi CGI possono essere scritti in molti linguaggi diversi, ma il più usato è Perl

• E’ una tecnologia vecchia, superata in particolare dalle Java Servlet

Page 7: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 7

Tecnologie server-side: Java ServletJava Servlet = tecnologia server-side offerta in ambiente Java• Una servlet è un programma Java che gestisce HTTP

request e restituisce HTTP response estende le funzionalità del web server

• Le servlet girano nel processo del web server e agiscono come livello intermedio tra: – richieste provenienti da HTTP clients (web browser, ...)– database e altre sorgenti informative gestite dal server

• Le servlet “caricate” nel processo del server, “vivono” (restano in esecuzione) finché non vengono esplicitamente “scaricate” (l’esecuzione viene terminata) possono gestire innumerevoli richieste da parte dei client

• gestiscono ogni HTTP request in un thread separato parallelismo in esecuzione (anche se i programmi e i dati generali sono in copia unica)

Page 8: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 8

Java Servlet: vantaggi

• Essendo programmi duraturi – permettono a web server di gestire interazioni

complesse con iclient (non solo singole risposte a singole richieste, ma anche sequenze di request-response con gestione di stato dell’interazione)

– permettono di integrare la logica dell’applicazione in processo di scambio di HTTP request e response

• Essendo scritte in Java– sono indipendenti dalla piattaforma su cui devono

girare (portabilità)– possono sfruttare tutti i vantaggi dati dalla

disponibilità delle librerie Java e dalla JVM• Sono più efficienti dei CGI (perchè non creano un nuovo

processo per ogni richiesta del client come fanno i CGI)

Page 9: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 9

Java Servlet: Web Container - I

Per costruire un’applicazione web basata sull’uso di servlet è necessario un Web Container (o Servlet Container o Servlet Engine); il Web Container:– “carica” le servlet nel processo del web server (alla

prima invocazione della servlet)– supporta il protocollo HTTP (per gestire il flusso

request/response)– gestisce al suo interno più applicazioni, ognuna

identificata da un servlet context (nome univoco)

contenutistatici

(pag. html, immagini)

Web Container

HTTPServer

client(browser)

HTTP request

HTTP response

Page 10: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 10

Java Servlet: Web Container - II

• Il Web Container è un Java runtime che ospita ed esegue applicazioni web (crea, inizializza ed invoca servlet e JSP)

• Tipi di Web Container:– Web Container incluso nel web server: web server

scritti in Java includono Web Container Es: Jakarta Tomcat (di Apache)

– Web Container in J2EE application server: application server che gestiscono Enterprise Java Beans includono anche web server e web container

– Web Container in runtime separato: web servers come Apache e Microsoft IIS necessitano di runtime separato per gestire le servlets, più un plug-in che gestisce la comunicazione tra web server e Web Container

Page 11: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 11

Applicazioni web: ambiente Java

Java servletJava servletJava servletJava servlet

JSPJSP

Java classes,archives

Java classes,archives

Java classes,archives

Deployment descriptor (web.xml)

Applicazione web

Java servletJava servletJava servletJava servlet

JSPJSP

Java classes,archives

Java classes,archives

Java classes,archives

Deployment descriptor (web.xml)

Applicazione web

Web Container (es. Jakarta Tomcat)

sweb5 sweb8

servletcontext

servletcontext

Page 12: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 12

Java Servlet: invocazione - IInvocazione di un’applicazione basata su Java Servlet

Web Container

webserver

browser

Servlet/JSPinstances

Applicazione web

HTTPrequest

1: il web browser inviauna richiesta

2: il web server identifical’applicazione (via servlet

context del Web Container, es. sweb5) e delega la gestione della richiesta

3: il Web Container identifica il tipo di applicazione (JSP,

servlet). Se si tratta di unaservlet, identifica la servlet

instance e delega la richiesta (passa i dati in HTTP request e

l’oggetto HTTP response, in cui si aspetta il risultato)

sweb5

Page 13: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 13

Java Servlet: invocazione - II

Web Container

webserver

browser

Servlet/JSPinstances

Applicazione web

HTTPresponse

6: il web server invia la risposta al browser

5: il Web Container invia la risposta

al web server

4: la servlet:• interpreta la HTTP request • gestisce la richiesta• invia il risultato al Web Container attraverso HTTP response

sweb5

Page 14: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 14

Java Servlet: invocazione - III

L’invocazione di una servlet può essere fatta da:

• Form HTML, utilizzando sia POST sia GET

• Link (URL con parametri):http://www.di.unito.it/ negozio/calcolaPrezzo?prec=100&spesa=25in questo caso la richiesta utilizza il metodo GET

Una servlet può gestire sia richieste inviate tramite POST (grazie al metodo doPost), sia richieste inviate tramite GET (grazie al metodo doGet)

NB: I metodi doPost e doGet contengono le istruzioni da eseguire quando la servlet riceve la richiesta: è il programmatore a doverli implementare!

Page 15: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 15

FORM HTML - I

Page 16: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 16

FORM HTML - II

<FORM METHOD = "GET/POST" ACTION = cosa-fare>

... campi del modulo ...

<INPUT TYPE="SUBMIT" VALUE="Invia"><INPUT TYPE="RESET" VALUE="Cancella">

</FORM>

Attributi del tag FORM:

METHOD: specifica il modo in cui vengono inviati i dati: GET = "in chiaro" (in coda all'URL specificato

nell'attributo ACTION) POST = "nascosti" (all'interno dlel'oggetto che viene

inviato al server)

Page 17: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 17

FORM HTML - III

ACTION: è un URL che contiene il richiamo di un’azione, cioè un programma; può essere, per es.: mailto:indirizzo-di-email invia una email

all’indirizzo specificato, con i dati del modulo una pagina ASP, PHP, JSP (cioè una pagina

contenente un programma in grado di riceverle i dati del modulo e di decodificarli)

una Servlet Java o uno Script CGI invia i dati del modulo ad un programma che è in grado di riceverli e decodificarli

Page 18: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 18

FORM HTML - IV

I pulsanti:<INPUT TYPE="SUBMIT" VALUE="Invia">

viene eseguita l’azione specificata in ACTION

<INPUT TYPE="RESET" VALUE="Cancella">

vengono cancellati tutti i dati già inseriti

Page 19: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 19

FORM HTML - V

Campi del modulo (ovvero le modalità per richiedere i dati):

<TEXTAREA NAME="commento" ROWS="10" COLS="20"></TEXTAREA>

<INPUT TYPE="TEXT" NAME="nome" VALUE="" SIZE="20">

<INPUT TYPE="CHECKBOX" NAME="interessi" VALUE="">

<INPUT TYPE="RADIO" NAME="partec" VALUE="">

Page 20: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 20

FORM HTML - VI

<SELECT NAME="eta"><OPTION VALUE="fino5">fino a 5 anni</OPTION><OPTION VALUE=“da6a11">da 6 a 11 anni</OPTION> ...

</SELECT>

<INPUT TYPE="HIDDEN" NAME=“id" VALUE="35FF6">parametro nascosto che viene inviato al server senza che l’utentelo veda

Page 21: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 21

Architettura logica e flusso dati

HTTP request (POST)

Applicazione Web

FORM HTML

Come ti chiami?

Quanti anni hai?

da 18 a 25

maria

SERVLET…Print(“Ciao, ” + nome); if (eta.equals(“da18a25”) { seleziona layout ‘giovane’}else if (eta.equals(“piu60”) { seleziona layout ‘semplice’}else { usa layout standard}…stampa il risultato su HTTP response

DB

webserver

Web Container

HTTP response

Page 22: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 22

Gestione di interazioni parallele

HTTP request (POST) Applicazione Web

Browser 1

Come ti chiami?

Quanti anni hai?

da 18 a 25

maria

SERVLET…Print(“Ciao, ” + nome); if (eta.equals(“da18a25”) { seleziona layout ‘giovane’}else if (eta.equals(“piu60”) { seleziona layout ‘semplice’}else { usa layout standard}…stampa il risultato su HTTP response

DB

webserver

Web Container

HTTP response

Browser 2

Come ti chiami?

Quanti anni hai?

da 16 a 35

paolo

HTTP request (POST)

HTTP response

Page 23: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 23

Sessioni utente e interazioni stateful - I• I servizi accessibili da web prevedono generalmente

interazioni complesse e il riconoscimento delle azioni eseguite dall’utente come un’unica sequenza. Es:– apri catalogo (automobili usate), visita pagina di prodotto

(berline), visualizza dettagli di auto X (FIAT Marea, Alfa 156, Ford Mondeo, …)

– acquista automobile X (carrello spesa)• Scegli colore auto, cilindrata, …• Scegli optionals• Inserisci dati personali• Inserisci dati carta di credito• …

serve un meccanismo per tracciare la sequenza di azioni effettuate dallo stesso browser durante l’interazione

Page 24: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 24

Sessioni utente e interazioni stateful - II

Sessione utente = "sessione di lavoro" tra l'applicazione e ogni singolo utente (il server, generalmente crea automaticamente un oggetto session per ogni utenteche si connette all'applicazione)

Se il protocollo utilizzato gestisce le sessioni utente (session tracking), il server riconosce richieste successive di stesso browser come parte di una sola interazione

applicazione

utente 1

utente 2

utente 3

sessione 1

sessione 2

sessione 3

ecc… ecc…

Page 25: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 25

Sessioni utente e interazioni stateful - III

Stato = il server ricorda i dati relativi alle precedenti richieste effettuate durante la stessa sessione (può quindi rispondere alle richieste tenendo conto di quanto già fatto). Es: mantenimento carrello spesa

NB: la gestione delle sessioni utente è necessaria per gestire stato, ma non sufficiente (per es: HTTP 1.1 supporta sessioni utente, ma non mantiene lo stato di interazione)

Page 26: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 26

Sessioni utente e interazioni stateful - IV • Protocollo stateless

– ogni richiesta utente è gestita separatamente il server non ha memoria delle precedenti richieste utente

– es: HTTP 1.0• Protocollo stateful

– permette di gestire risposte a richieste che dipendono dal contenuto e/o dai risultati di una richiesta precedente

– gestisce un canale (virtuale) di comunicazione che permette di vedere richieste e risposte multiple come parte della stessa connessione tra client e server

– es: FTP, telnet

Page 27: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 27

Tecniche di session tracking - I

Basate sullo scambio di un token identificativo (sessionId) tra client (C) e server (S):• C invia richiesta HTTP a S• S risponde associando token univoco T a risposta• C invia ulteriori richieste associando token T, che

permette a S di riconoscere C

serverS

clientCrisposta con token

richiesta con token

Page 28: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 28

Tecniche di session tracking - II • URL Rewriting

– token inserito in coda all’URL (come parametro) delle richieste eseguite dal client

• Hidden form fields– token inserito in campi nascosti delle form

• Cookies– token scritto in un cookie (file di testo memorizzato sul

client e restituito al server ad ogni richiesta HTTP)

• Sessioni che usano Secure Socket Layer (SSL)– SSL usa il protocollo di scambio di messaggi

crittografati HTTPS. Per stabilire connessioni, client e server generano delle session keys (chiavi simmetriche per crittografare e decrittare messaggi) che possono essere usate per identificare client e sessione utente

Page 29: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 29

Session tracking con Servlet

Le servlet offrono un meccanismo automatico per sessiontracking e mantenimento dello stato dell’interazione• L’interfaccia javax.servlet.HttpSession incapsula il

concetto di sessione utente e il Web Container implementa HttpSession

• L’interfaccia HttpServletRequest offre il metodo getSession() per accedere all’oggetto HttpSession associato alla richiesta utente corrente (HttpServletRequest)

NB: Normalmente il session tracking è implementato utilizzando i cookies se il browser ha disabilitato i cookies il Web Container può utilizzare URL rewriting (ma bisogna invocare metodi specifici)

NB: le sessioni utente devono scadere (timeout) per evitare di sovraccaricare il server nel caso in cui gli utenti non chiudano esplicitamente la sessione

Page 30: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 30

Mantenimento dello stato con Servlet

• L’oggetto HttpServletRequest può contenere anche degli attributi associati alla sessione utente

• Si tratta di coppie <nome, valore> (il valore può essere un oggetto complesso)

• Tali attributi sono usati per mantenere informazioni sullo stato della particolare sessione utente

• HttpServletRequest offre metodi per scrivere e leggere questi attributi– void setAttribute(String attrName, Object attr):

salva l’attributo <attrName, attr>nell’oggetto sessione– Object getAttribute(String attrName): restituisce

il valore associato al nome attrName nella sessione utente

Page 31: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 31

Interazione con database: JDBC

Page 32: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 32

Cos'è un database (relazionale)?

• I dati sono registrazioni della descrizione di una qualsiasi caratteristica della realtà, su un supporto che ne garantisca la conservazione, la comprensibilità e la reperibilità

• Una base di dati (database) è una collezione di dati organizzati in modo coerente, costruito con funzionalità ben precise, note già in fase di progettazione (esempi: rubrica telefonica personale, anagrafe, archivio di una biblioteca, archivio centrale del ministero delle finanze, segreteria studenti dell’università, …)

Ricordiamoci che…

database

Page 33: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 33

Definizione della base di dati (DB relazionale): – quali informazioni– quali relazioni tra le informazioni

Vari livelli nella definizione dei dati:

Vista 1 Vista 2 Vista n

Livello logico

Livello fisico

Livello concettuale

Ricordiamoci che…

Page 34: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 34

Livello concettuale:• Ha l'obiettivo di descrivere, a livello concettuale, la

conoscenza sulla realtà che si vuole modellare (linguaggi di rappresentazione della conoscenza)

• Individuare le entità rilevanti, le loro proprietà (attributi)…

… e le relazioni tra entità

LIBRO

N.invent

Anno_ed.

TitoloCasa_ed.

Collocaz.

Ripiano

Scaffale

scriveautore libro(1:n)

Ricordiamoci che…

Autore

Page 35: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 35

Livello logico:

• Rappresentazione tabellare dei dati

N.Inv Autore Titolo Anno_ed Casa_ed Collocaz

Tabella: LIBRI

Ricordiamoci che…

Page 36: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 36

Interazione con un database (relazionale):

Manipolazione dei dati:– inserimento di dati– cancellazione di dati– aggiornamento (update)– interrogazione

Ogni operazione di accesso alla base di dati vieneinterpretata, analizzata ed eseguita dal DBMS (DataBase Management System)

Ricordiamoci che…

database

DB

MS

Page 37: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 37

Si utilizza un linguaggio appositamente studiato per "parlare" con i database (relazionali): SQL (Structured Query Language)

• Esempio

• Produce come risultato una tabellache contiene tutti gli attributi nella clausola SELECT, che soddisfano la condizione nella clausola WHERE

nell'es: tutti i libri editi da Feltrinelli

Autore Titolo

I.Allende

S.Benni

D.Voltolini

Saltatempo

Dieci

Afrodita

Ricordiamoci che…

SELECT Autore, TitoloFROM LibriWHERE Casa_ed=Feltrinelli

Page 38: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 38

Accesso a database relazionali

• I produttori di RDBMS (Relational DBMS) offrono API (interfacce) per accedere ai dati gestiti dal DBMS

• L’accesso al database è basato su modello client-server il client accede al database mediante le API definite dai produttori

• RDBMS diversi hanno API diverse serve uno strumento per generalizzare l’accesso, in modo da separare l’applicazione (business logic) dal livello dei dati (in modo che il passaggio ad un database diverso non crei problemi)

• Un Database Driver è uno strumento che ci permette di comunicare in modo uniforme con diversi RDBMS

Page 39: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 39

ODBC e JDBC

• ODBC (Open Database Connectivity) driver– creato inizialmente per offrire API standard per

accesso SQL a piattaforme Microsoft Windows, è poi stato esteso ad altre piattaforme

– offre un accesso uniforme a database relazionali eterogenei (installando l’ODBC driver specifico per ogni database)

– definisce funzioni per accesso diretto ai dati (quindi non poi così standard)

• JDBC (Java DataBase Connectivity) driver offre un’interfaccia standardizzata tra applicazioni Java e database relazionali

Page 40: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 40

JDBC - I

• JDBC API (java.sql, incluso in J2SE) supporta l’esecuzione di query SQL e l’analisi dei risultati delle query

• Offre metodi per accedere a RDBMS SQL-compliant, astraendo da:– dettagli implementativi del database (MS Access? Oracle?

…?) e dei suoi API specifici– dettagli di comunicazione con i database specifici

• Permette ad una singola applicazione di connettersi a più database diversi, anche eterogenei (attraverso database driver diversi)

• JDBC basato su – linguaggio di interrogazione SQL– interfaccia di comunicazione X/Open CLI

Page 41: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 41

JDBC - IIX/Open CLI (Call Level Interface)

• interfaccia (API) standard per l’accesso a database relazionali, definita originariamente per ODBC

• indipendente da piattaforma e da database

• basata su idea di – includere query SQL in un’applicazione scritta in un

linguaggio ad alto livello (per es. Java)– pre-processare le query per generare chiamate di

funzioni native del database

Page 42: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 42

JDBC - III JDBC è stato sviluppato partendo da specifiche di driver

ODBC esistenti e di CLI, per identificare caratteristiche comuni e offrire interfaccia di comunicazione – compatibile con tutti i driver– facilmente implementabile in Java

Risultato: API per l’accesso a database che possono essere:– implementate su driver ODBC esistenti (prime

versioni)– direttamente integrate nel database, senza passare

attraverso ODBC (oggi molto diffuso)

Tipi di connessioni JDBC:• JDBC-ODBC Bridge• Part Java, part native driver• Intermediate Database Access Server• Pure Java Drivers

Page 43: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 43

JDBC-ODBC Bridge

Java Application

DataSourceJDBC

API

JDBC-ODBCBridge

ODBCAPI

ODBCLayer

JDBC driver : • traduce le chiamate JDBC in chiamate ODBC• invia chiamate ODBC al database (usando librerie ODBC)• delega al database l’esecuzione delle chiamate

poco efficiente per livelli multipli e traduzioni intermedie il client che gestisce l’applicazione deve installare JDBC-ODBC Bridge API e ODBC driver

Processo 1

Processo 2

Page 44: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 44

Part Java, part native driver

Java Application

DataSource

JDBCAPI

JDBC Driver

Vendorspecific

API

• JDBC driver traduce le chiamate JDBC in chiamate specifiche per il database• lI database processa le richieste e invia i risultati attraverso API specifiche (che inviano i risultati al JDBC driver)• JDBC driver traduce risultati in JDBC standard e invia ad applicazione + efficiente (- livelli di traduzione) il client deve installare driver e API nativi del DB

Page 45: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 45

Intermediate database access server(net-protocol all-Java driver)

Java ApplicationData

SourceJDBCAPI

JDBC Driver

Driver Server intermedio connette più client Java a più DB server:• JDBC Driver Server fa da gateway verso i server dei database• l’applicazione invia la richiesta JDBC via JDBC Driver al Driver Server• Driver Server completa la richiesta attraverso il native driver JDBC Driver Server nasconde i dettagli delle connessioni ai database server il protocollo di comunicazione col Driver Server è specifico, ma il Driver Server può usare protocolli diversi per comunicare con DB diversi

JDBCDriverServer

Native Driver

Page 46: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 46

Pure Java Drivers

Java ApplicationData

SourceJDBCAPI JDBC Driver

Il JDBC Driver converte le chiamate JDBC in chiamate in rete dirette utilizzando protocolli di rete specifici del database (socket) + efficiente semplice da utilizzare perchè non richiede librerie o software speciali

I principali produttori di database offrono JDBC Driver puri per accedere ai propri DBUna lista di JDBC driver: http://industry.java.sun.com/products/jdbc/drivers/

Page 47: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 47

Architettura di JDBC - I

Application

Driver Manager

JDBC Specific Driver

Connection

Statement

ResultSet

1) l’applicazioneinstalla il Driver Mgr e istanzia uno o più

JDBC drivers(specifici per DB)

3) Tabelle risultato contenutein oggetti ResultSet interrogabili

JDBC Specific Driver

Connection

Statement

ResultSet

2) l’applicazionechiede un oggetto

Connection al Driver Mgr e lo usa per

comunicare con il DB (via query SQL)

Page 48: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 48

Architettura di JDBC - II• Driver Manager (java.sql.DriverManager): classe che

permette di installare i driver per l’accesso ai database

• JDBC Specific Driver (java.sql.Driver): interfaccia – Venditori di DBMS implementano Driver (definendo I

metodi di accesso al loro database)– Il Driver JDBC traduce le chiamate JDBC in invocazioni

basate su API specifiche del database Software delle applicazioni indipendente dal particolare database (perché DriverManager e applicazione usano le interfacce, non le implementazioni)

• Connection (java.sql.Connection): interfaccia che permette di inviare query SQL (interfaccia java.sql.Statement) e di leggere i risultati (interfaccia java.sql.ResultSet); i produttori di database implementano l’interfaccia

Page 49: A.a. 2004/05Tecnologie Web1 Applicazioni Web server-side: Java Servlet.

a.a. 2004/05 Tecnologie Web 49

JDBC: tipi di dati

JDBC offre un insieme di tipi di dati corrispondenti ai tipi di dati SQL e Java (classe java.sql.Types). Per es:

JDBC Type Purpose SQL Type Java Type

DATALINK Rappresenta SQL DATALINK DATALINK java.net.URL

DATE Data strutturata come giorno,mese ed anno

DATE java.sql.Date

VARCHAR Stringa di lunghezza variabile VARCHAR String

INTEGER interi a 32-bit con segno INTEGER int

NULL Rappresenta NULL values NULL null per oggetti java, 0 pernumeri, false per boolean

JAVA_OBJECT Memorizzare oggetti Java --- Object

DOUBLE floating-point, doppiaprecisione con mantissa a 15 bit

DOUBLEPRECISION

double