|
|
|
| << | < | > | >> |Indice
PREFAZIONE XI
Il nostro approccio didattico xi
Una panoramica del libro xiii
Ringraziamenti xvii
Gli autori xx
Deitel & Associates, Inc. xxi
CAPITOLO 1:
I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE I 1
1.1 Introduzione 1
1.2 Un semplice esempio di input-output realizzato
mediante GUI 2
1.3 Una panoramica dei componenti Swing 5
1.4 Visualizzare testo e immagini in una finestra 8
1.5 I campi di testo e la gestione degli eventi 13
1.6 Tipi di eventi GUI comuni e interfacce Listener
(ascoltatore) 20
1.7 Come funziona la gestione degli eventi 23
1.8 I pulsanti 24
1.9 Pulsanti che mantengono lo stato 28
1.9.1 JCheckBox 28
1.9.2 JRadioButton 31
1.10 Caselle combinate 35
1.11 Gli elenchi 38
1.12 Gli elenchi a selezione multipla 41
1.13 La gestione degli eventi del mouse 44
1.14 Classi adapter 49
1.15 Una sottoclasse di JPanel 53
1.16 La gestione degli eventi della tastiera 57
1.17 I gestori di layout 60
1.17.1 FlowLayout 62
1.17.2 BorderLayout 65
1.17.3 GridLayout 68
1.18 I pannelli 70
1.19 Aree di testo 72
1.20 Riepilogo 75
Esercizi di autovalutazione 76
Soluzione agli esercizi di autovalutazione 77
Esercizi 77
(Esercizio facoltativo) Caso di studio Interfaccia
utente e grafica: estendere l'interfaccia 80
CAPITOLO 2: LA GRAFICA E JAVA2D 83
2.1 Introduzione 83
2.2 I contesti e gli oggetti grafici 85
2.3 Controllare i colori 86
2.4 Controllare i tipi di caratteri 94
2.5 Disegnare linee, rettangoli e ovali 100
2.6 Disegnare archi 104
2.7 Disegnare poligoni e polilinee 106
2.8 Java2D API 109
2.9 Riepilogo 117
Esercizi di autovalutazione 117
Risposte agli esercizi di autovalutazione 118
Esercizi 118
(Esercizio facoltativo) Caso di studio interfaccia
utente e grafica: aggiungere Java2D 121
CAPITOLO 3: LA GESTIONE DELLE ECCEZIONI 125
3.1 Introduzione 125
3.2 Introduzione alla gestione delle eccezioni 126
3.3 Un esempio senza la gestione delle eccezioni 127
3.4 Gestione delle eccezioni ArithmeticException
e InputMismatchException 129
3.5 Quando usare la gestione delle eccezioni 136
3.6 La gerarchia delle eccezioni in Java 136
3.7 La clausola finally 139
3.8 Riavvolgimento dello stack 144
3.9 printStackTrace, getStackTrace e getMessage 146
3.10 Eccezioni concatenate 149
3.11 Dichiarare nuovi tipi di eccezioni 150
3.12 Precondizioni e postcondizioni 152
3.13 Asserzioni 152
3.14 Riepilogo 154
Esercizi di autovalutazione 155
Risposte agli esercizi di autovalutazione 155
Esercizi 156
CAPITOLO 4: FILE E STREAM 159
4.1 Introduzione 159
4.2 La gerarchia dei dati 160
4.3 File e stream 162
4.4 La classe File 164
4.5 Creare un file ad accesso sequenziale 169
4.5.1 Creare un file di testo ad accesso sequenziale169
4.5.2 Leggere dati da un file di testo
ad accesso sequenziale 176
4.5.3 Caso di studio: un programma per
l'interrogazione dei crediti 179
4.5.4 Aggiornare un file ad accesso sequenziale 185
4.6 La serializzazione degli oggetti 185
4.6.1 Creare un file ad accesso sequenziale usando
la serializzazione degli oggetti 186
4.7 I file ad accesso causale 195
4.7.1 Creare un file ad accesso casuale 196
4.7.2 Scrivere dati in un file ad accesso casuale 201
4.7.3 Leggere dati sequenzialmente da un file
ad accesso casuale 205
4.7.4 Un caso di studio: un programma per
l'elaborazione delle transazioni 208
4.8 Ulteriori classi del package java.io 217
4.9 Aprire dei file con JFileChooser 219
4.10 Riepilogo 223
Esercizi di autovalutazione 224
Risposte agli esercizi di autovalutazione 225
Esercizi 226
CAPITOLO 5: LA RICORSIONE 231
5.1 Introduzione 231
5.2 I concetti fondamentali della ricorsione 231
5.3 Un esempio di ricorsione: il fattoriale 233
5.4 Un esempio che usa la ricorsione: la serie di
Fibonacci 236
5.5 La ricorsione e la pila delle chiamate 239
5.6 Ricorsione e iterazione 241
5.7 Permutazione di stringhe 243
5.8 Le Torri di Hanoi 248
5.9 I frattali 251
5.10 Il backtracking ricorsivo 262
5.11 Riepilogo 263
5.12 Risorse Internet e World Wide Web 264
Esercizi di autovalutazione 265
Risposte agli esercizi di autovalutazione 266
Esercizi 267
CAPITOLO 6: ALGORITMI DI RICERCA E ORDINAMENTO 271
6.1 Introduzione 271
6.2 Algoritmi di ricerca 272
6.2.1 La ricerca lineare 272
6.2.2 La ricerca binaria 277
6.3 Algoritmi di ordinamento 283
6.3.1 Selection sort 283
6.3.2 Insertion sort 287
6.3.3 Merge sort 291
6.4 Invarianti 297
6.5 Riepilogo 299
Esercizi di autovalutazione 299
Risposte agli esercizi di autovalutazione 299
Esercizi 300
CAPITOLO 7: LE STRUTTURE DATI 303
7.1 Introduzione 303
7.2 Classi wrapper sui tipi primitivi 304
7.3 Autoboxing e auto-unboxing 305
7.4 Classi auto-referenziali 306
7.5 Allocazione dinamica della memoria 306
7.6 Liste concatenate 307
7.7 Le pile 317
7.8 Le code 322
7.9 Gli alberi 325
7.10 Riepilogo 332
Esercizi di autovalutazione 332
Risposte agli esercizi di autovalutazione 333
Esercizi 334
Sezione speciale: costruite il vostro computer 339
CAPITOLO 8: I TIPI GENERICI 355
8.1 Introduzione 355
8.2 Motivazione per i metodi generici 356
8.3 I metodi generici: implementazione e
traduzione a tempo di compilazione 358
8.4 Ulteriori problematiche: metodi che usano
un parametro tipo come tipo di ritorno 362
8.5 Sovraccarico dei metodi generici 365
8.6 Classi generiche 366
8.7 I tipi "raw" 377
8.8 I "caratteri jolly" nei metodi con parametri tipo 382
8.9 I tipi generici e l'ereditarietà 386
8.10 Riepilogo 387
8.11 Risorse Internet e World Wide Web 387
Esercizi di autovalutazione 387
Risposte agli esercizi di autovalutazione 388
Esercizi 388
CAPITOLO 9: LE COLLEZIONI 391
9.1 Introduzione 391
9.2 Una panoramica delle collezioni 392
9.3 La classe Arrays 393
9.4 L'interfaccia Collection e la classe Collections 396
9.5 Le liste 397
9.5.1 ArrayList e Iterator 398
9.5.2 LinkedList 400
9.5.3 Vector 405
9.6 Algoritmi 410
9.6.1 L'algoritmo sort 410
9.6.2 L'algoritmo shuffle 414
9.6.3 Gli algoritmi reverse, fill, copy, max e min 417
9.6.4 L'algoritmo binarySearch 419
9.6.5 Gli algoritmi addAll, frequency e disjoint 421
9.7 La classe Stack del package java.util 423
9.8 La classe PriorityQueue e l'interfaccia Queue 426
9.9 Insiemi 428
9.10 Le mappe 431
9.11 La classe Properties 435
9.12 Wrapper di sincronizzazione 439
9.13 Collezioni non modificabili 439
9.14 Implementazioni astratte 440
9.15 Riepilogo 440
Esercizi di autovalutazione 441
Risposte agli esercizi di autovalutazione 441
Esercizi 441
CAPITOLO 10: INTRODUZIONE ALLE APPLET JAVA 445
10.1 Introduzione 445
10.2 Applet dimostrative fornite con il
Java Software Development Kit 446
10.3 Una semplice applet Java: disegnare una stringa 451
10.3.1 Eseguire un'applet nel contenitore
appletviewer 453
10.3.2 Eseguire un'applet in un browser Web 455
10.4 Il ciclo di vita delle applet 456
10.5 Inizializzare una variabile di istanza mediante
il metodo init 457
10.6 Il modello di sicurezza "sandbox" 459
10.7 Risorse riguardanti le applet disponibili sul Web 460
10.8 Riepilogo 461
Esercizi di autovalutazione 461
Risposte agli esercizi di autovalutazione 461
Esercizi 461
CAPITOLO 11: LA MULTIMEDIALITΐ: APPLET E APPLICAZIONI 463
11.1 Introduzione 463
11.2 Caricare, visualizzare e riscalare le immagini 464
11.3 Animare una sequenza di immagini 467
11.4 Mappe di immagini 473
11.5 Caricare e riprodurre i clip audio 476
11.6 Riprodurre video e altri formati multimediali
usando Java Media Framework 479
11.7 Riepilogo 484
11.8 Risorse in Internet e World Wide Web 485
Esercizi di autovalutazione 486
Risposte agli esercizi di autovalutazione 487
Esercizi 487
Sezione speciale: progetti multimediali avanzati 488
CAPITOLO 12:
I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 491
12.1 Introduzione 491
12.2 Slider 492
12.3 Le finestre: note aggiuntive 496
12.4 Usare i menu all'interno dei frame 497
12.5 I menu popup 506
12.6 Pluggable Look-and-Feel 509
12.7 Interfacce con documenti multipli 513
12.8 Livelli di componenti GUI 518
12.9 I gestori di layout: BoxLayout e GridBagLayout 520
12.10Riepilogo 535
Esercizi di autovalutazione 535
Risposte agli esercizi di autovalutazione 536
Esercizi 536
CAPITOLO 13: IL MULTITHREADING 539
13.1 Introduzione 539
13.2 Gli stati dei thread: il ciclo di vita di un thread541
13.3 Le priorità e la schedulazione dei thread 543
13.4 Creare ed eseguire i thread 544
13.5 La sincronizzazione dei thread 549
13.6 La relazione produttore/consumatore senza
sincronizzazione 551
13.7 La relazione produttore/consumatore con
sincronizzazione 559
13.8 La relazione produttore/consumatore:
il buffer circolare 565
13.9 La relazione produttore/consumatore:
ArrayBlockingQueue 573
13.10 Il multithreading con le GUI 576
13.11 Altre classi e interfacce di java.util.concurrent 582
13.12 I monitor e i lock sui monitor 583
13.13 Riepilogo 589
Esercizi di autovalutazione 589
Risposte agli esercizi di autovalutazione 590
Esercizi 591
CAPITOLO 14: JAVA E LE RETI 593
14.1 Introduzione 593
14.2 Manipolare gli URL 594
14.3 Leggere un file su un server Web 600
14.4 Costruire un semplice server usando i socket
di flusso 603
14.5 Costruire un semplice client usando i socket
di flusso 605
14.6 Interazioni client/server con connessioni socket
di flusso 606
14.7 Interazione client/server senza connessione
con datagrammi 619
14.8 Tris client/server usando un server multithreaded 627
14.9 La rete e la sicurezza 642
14.10 Caso di studio: DeitelMessenger Chat Server
e Client 643
14.10.1 La classe DeitelMessengerServer e
le classi di supporto 643
14.10.2 DeitelMessengerClient e classi di supporto 652
14.11 Riepilogo 670
Esercizi di autovalutazione 670
Risposte agli esercizi di autovalutazione 671
Esercizi 671
CAPITOLO 15: COLLEGARE JAVA AI DATABASE CON JDBC 675
15.1 Introduzione 675
15.2 I database relazionali 676
15.3 Una panoramica dei database relazionali:
il database books 677
15.4 SQL 681
15.4.1 Le query SELECT 681
15.4.2 La clausola WHERE 682
15.4.3 La clausola ORDER BY 684
15.4.4 L'uso di INNER JOIN per combinare i dati
di più tabelle 686
15.4.5 L'istruzione INSERT 687
15.4.6 L'istruzione UPDATE 688
15.4.7 L'istruzione DELETE 689
15.5 Istruzioni per installare MySQL e MySQL Connector/J689
15.6 Istruzioni per impostare un account utente MySQL 690
15.7 Creare il database books con MySQL 691
15.8 Manipolare i database con JDBC 691
15.8.1 Connettersi a un database e interrogarlo 691
15.8.2 Interrogare il database books 697
15.9 Le procedure memorizzate (stored procedure) 708
15.10 L'interfaccia RowSet 709
15.11 Riepilogo 712
15.12 Risorse Internet e World Wide Web 712
Esercizi di autovalutazione 713
Risposte agli esercizi di autovalutazione 713
Esercizi 713
CAPITOLO 16: I SERVLET 717
16.1 Introduzione 717
16.2 Panoramica e architettura dei servlet 719
16.2.1 L'interfaccia Servlet e il ciclo di vita
dei servlet 719
16.2.2 La classe HTTPServlet 721
16.2.3 L'interfaccia HttpServletRequest 722
16.2.4 L'interfaccia HttpServletResponse 723
16.3 Impostare il server Apache Tomcat 724
16.4 La gestione delle richieste HTTP get 726
16.4.1 Installare un'applicazione Web 731
16.5 Gestire una richiesta HTTP get contenente dati 735
16.6 Gestire le richieste HTTP post 738
16.7 Ridirigere le richieste ad altre risorse 741
16.8 Applicazioni multi-livello: usare JDBC da un
servlet 745
16.9 File welcome (file di benvenuto) 752
16.10 Riepilogo 754
16.11 Risorse Internet e World Wide Web 754
Esercizi di autovalutazione 755
Risposte agli esercizi di autovalutazione 755
Esercizi 755
CAPITOLO 17: JAVA SERVER PAGES (JSP) 757
17.1 Introduzione 757
17.2 Panoramica di Java Server Pages 758
17.3 Il primo esempio di Java Server Page 759
17.4 Oggetti impliciti 761
17.5 Gli script 761
17.5.1 Componenti degli script 762
17.5.2 Esempio di script 763
17.6 Azioni standard 767
17.6.1 L'azione
|
| << | < | > | >> |Pagina XIPrefazioneBenvenuti nel mondo di Java! Alla Deitel & Associates, scriviamo libri di testo per corsi di programmazione di livello universitario e lavoriamo molto per mantenere i nostri libri aggiornati. Questo libro, Java, Tecniche avanzate di programmazione, completa l'esposizione del linguaggio che abbiamo iniziato in Java, Fondamenti di programmazione. Questi due libri possiedono tutto quanto è richiesto da professori e studenti per un'esperienza di apprendimento del linguaggio Java che sia informativa, interessante, stimolante e divertente. Questo libro è aggiornato all'ultima versione di Java, Java 2 Platform, Standard Edition (J2SE), versione 5.0. Rispetto all'edizione precedente, abbiamo aggiornato e messo a punto il testo, la strategia didattica e lo stile del codice. Più avanti nella prefazione troverete una panoramica del libro, che aiuta sia i docenti, sia gli studenti e i professionisti a rendersi conto di quanto il testo copra il linguaggio Java. Che siate un docente, uno studente, un programmatore professionista o principiante, questo libro ha molto da offrirvi. Java è un linguaggio di programmazione per sviluppare applicazioni informatiche industriali per dispositivi che vanno dai telefoni cellulari e dai PDA fino ai più grandi server aziendali. Abbiamo controllato attentamente il nostro testo rispetto alla Specifica del linguaggio Java (disponibile sul sito Web java.sun.com/docs/books/jls/index.html). Quindi, i programmi che creerete studiando questo testo dovrebbero funzionare con ogni piattaforma Java compatibile con J2SE 5.0.
Oltre ai commenti che ci sono giunti dalle revisioni dell'edizione
precedente, abbiamo integrato nel testo finale i commenti di 44 noti
professionisti del mondo accademico e dell'industria, che vengono elencati nel
paragrafo
Ringraziamenti.
Concluderemo questa prefazione con informazioni sugli autori e sulla
Deitel & Associates, Inc.
Il nostro approccio didattico
Questo libro contiene un'ampia varietà di esempi, esercizi e progetti che
prendono spunto da molte situazioni, e che offrono agli studenti la possibilità
di risolvere problemi reali. Il libro prende in esame i principi della
progettazione del software, insistendo sull'importanza della chiarezza dei
programmi ed evitando l'uso di terminologia complessa a favore di esempi chiari
e diretti, il cui codice è stato testato sulle piattaforme Java più diffuse.
Imparare Java usando l'approccio LIVE-CODE Il libro presenta una grande quantità di esempi di codice Java. Ogni nuovo argomento viene presentato nell'ambito di un programma Java completo e funzionante, seguito sempre da una o più finestre che mostrano l'input/output del programma in questione. Viene quindi usato il linguaggio di programmazione per insegnare il linguaggio di programmazione, e la lettura di questi programmi offre un'esperienza molto simile alla loro scrittura ed esecuzione reale su di un computer.
Tutto il codice presente nel libro si trova in Internet, all'indirizzo
www.apogeonline.com/libri/88-503-2389-1/scheda. Il nostro consiglio è quello di
scaricare tutto il codice, eseguendo poi ogni singolo programma via via che
appare nel testo. Potete anche modificare il codice degli esempi e vedere cosa
succede, e imparare così il linguaggio programmando.
Obiettivi
Ogni capitolo inizia con la presentazione degli
Obiettivi.
Gli studenti possono così sapere in anticipo ciò che andranno ad apprendere e,
alla fine della lettura del capitolo, potranno verificare se hanno raggiunto o
meno questi obiettivi.
Migliaia di righe di codice in molti programmi di esempio
Le funzionalità di Java vengono presentate nell'ambito di programmi Java
completi e funzionanti. Ogni programma è seguito dalle immagini degli output che
vengono prodotti, così che gli studenti possano assicurarsi della correttezza
dei risultati. I programmi presentati vanno da poche linee di codice a esempi
composti da varie centinaia di righe di codice.
Centinaia di illustrazioni e figure
Il libro offre un'ampia varietà di grafici, immagini e output di programmi.
Abbiamo convertito tutti i diagrammi di flusso in diagrammi di attività UML.
Usiamo anche diagrammi di classe UML per modellare le relazioni tra classi che
incontriamo nel testo.
Centinaia di suggerimenti per il programmatore Il libro offre molti suggerimenti riguardanti la programmazione per aiutare gli studenti a concentrarsi sugli aspetti più importanti dello sviluppo di programmi. Questi consigli vengono forniti attraverso le sezioni chiamate Buona abitudine, Errore tipico, Collaudo e messa a punto, L'esperienza dell'utente, Obiettivo efficienza, Obiettivo portabilità e Ingegneria del software. | << | < | > | >> |Pagina 445CAPITOLO 10
Introduzione alle applet Java
Obiettivi Comprendere la differenza tra un'applet e un'applicazione Osservare alcune delle capacità più interessanti di Java attraverso le applet dimostrative fornite con il JDK Imparare a scrivere delle semplici applet Java Imparare a scrivere dei semplici documenti HTML (HyperText Markup Language), per caricare ed eseguire un'applet in un contenitore
Imparare cinque metodi che sono chiamati automaticamente da un
contenitore di un'applet durante il ciclo di vita dell'applet stessa
10.1 Introduzione [Nota: questo capitolo e i suoi esercizi sono stati intenzionalmente concepiti in modo da risultare concisi e semplici per tutti i lettori che volessero imparare le nozioni di base sulle applet già dopo aver letto i primi capitoli del libro. Nel seguito del volume avremo modo di discutere delle applet più complesse, ad esempio nel capitolo 11 dedicato al multimedia, oppure nei capitoli 13 e 14, dedicati rispettivamente al multithreading e alla programmazione di rete.] Questo capitolo fornisce un'introduzione alle applet Java, un tipo di programma che può essere inserito in un documento HyperText Markup Language (HTML), cioè una pagina Web. Quando un browser carica una pagina Web contenente un'applet, questa viene caricata ed eseguita. Ciò permette di creare dei programmi che possono essere eseguiti semplicemente caricando la pagina Web appropriata. Il browser che esegue l'applet viene genericamente detto contenitore dell'applet (applet container). Il JDK include il contenitore di applet appletviewer che useremo nel libro per collaudare le applet durante lo sviluppo, prima di inserirle in una pagina Web. Se volete eseguire le vostre applet all'interno di un browser Web, sappiate comunque che alcuni Web browser non supportano direttamente la piattaforma Java 5.0. Potete visitare il sito java.com dal quale potete poi scaricare il run-time Java (IRE) per la versione 5.0 adatta al vostro browser. Sono attualmente supportati diversi browser, quindi ci sono buone probabilità che tra essi ci sia anche quello che state usando. | << | < | > | >> |Pagina 539CAPITOLO 13
Il multithreading
Obiettivi Capire la programmazione con il multithreading Capire come il multithreading sia in grado di migliorare le prestazioni Comprendere il ciclo di vita di un thread Comprendere il concetto di priorità e schedulazione dei thread Comprendere come creare, gestire e distruggere dei thread Capire la sincronizzazione dei thread Conoscere le relazioni produttore-consumatore e capire come implementarle con i thread
Saper visualizzare l'output da thread multipli in una GUI Swing
13.1 Introduzione Sarebbe bello se tutti potessimo fare "una sola cosa per volta" e "farla bene", ma purtroppo non è così che va il mondo. Il corpo umano esegue un'enorme quantità di operazioni in parallelo o, come si dirà spesso all'interno di questo capitolo, in modo concorrente. La respirazione, la circolazione sanguigna e la digestione, per esempio, possono tutte avvenire in modo concorrente. Tutti i sensi (vista, tatto, olfatto, gusto e udito) possono essere impiegati in parallelo. Allo stesso modo, anche i computer eseguono più operazioni in modo concorrente, come compilare un programma, spedire un file e ricevere messaggi di posta elettronica. [Nota: solo i computer che hanno più di un processore possono eseguire delle operazioni in modo realmente concorrente. I sistemi operativi usano varie tecniche per simulare la concorrenza su computer con un singolo processore, ma su tali computer può essere eseguito solo un compito alla volta]. La maggior parte dei linguaggi di programmazione non permette ai programmatori di specificare attività concorrenti. Questi linguaggi, infatti, forniscono generalmente solo un gruppo di strutture di controllo che permettono ai programmatori di eseguire un'azione alla volta, per passare poi all'azione successiva dopo che quella precedente è stata completata. Storicamente, la concorrenza è stata implementata come primitiva del sistema operativo disponibile solo a programmatori di sistema esperti. Il linguaggio di programmazione Ada, sviluppato dal Dipartimento della Difesa degli Stati Uniti, fu il primo linguaggio a fornire primitive che supportassero la concorrenza, per produrre applicazioni di controllo di dispositivi militari. Nonostante Ada si sia evoluto negli anni, esso non ha mai trovato grandi consensi nell'ambito accademico e commerciale. Java è oggi l'unico, tra i linguaggi di programmazione più diffusi, che permette ai programmatori di applicazioni di gestire con facilità le primitive per la gestione della concorrenza. Il programmatore specifica che le applicazioni contengono dei thread di esecuzione, ognuno indicante una porzione di programma che può essere eseguita parallelamente ad altri thread. Questa funzionalità, chiamata multithreading, offre ai programmatori Java potenzialità non disponibili nei linguaggi C e C++, su cui Java è in parte basato. [Nota su molte piattaforme, i programmi C e C++ possono eseguire il multithreading usando librerie di codice specifiche per la piattaforma]. | << | < | > | >> |Pagina 593CAPITOLO 14
Java e le reti
Obiettivi Comprendere il ruolo degli URL, dei socket e dei datagrammi nell'ambito della gestione delle reti in Java Implementare le applicazioni Java con funzionalità di rete usando socket e datagrammi Capire come implementare i client e i server Java che comunicano tra di loro Capire come implementare applicazioni collaborative basate sulle reti
Costruire un server che opera in multithreading
14.1 Introduzione C'è molto interesse intorno a Internet e al World Wide Web. Internet "lega" il mondo dell'informazione. Il World Wide Web rende Internet facile da usare e gli fornisce le capacità multimediali. Le organizzazioni vedono Internet e il World Wide Web come cruciali nelle proprie strategie riguardo i sistemi informativi. Java fornisce diverse funzionalità legate alle reti che rendono semplice lo sviluppo di applicazioni basate su Internet e sul World Wide Web, e permette ai programmi di cercare informazioni e collaborare con programmi in esecuzione su altri computer nel mondo, in una nazione o all'interno di un'organizzazione. Java permette inoltre alle applet e alle applicazioni di comunicare tra loro (rispettando i vincoli di sicurezza). Le funzionalità di rete di Java sono raggruppate in diversi package. Le funzionalità di base sono dichiarate dalle classi e dalle interfacce del package java.net, attraverso le quali Java offre comunicazioni basate su flussi che permettono alle applicazioni di vedere le reti come flussi di dati. Le classi e le interfacce del package java.net offrono anche comunicazioni basate su pacchetti per trasmettere pacchetti individuali di informazioni, usati per esempio per trasmettere audio e video attraverso Internet. In questo capitolo, vedremo come creare e manipolare dei socket e come comunicare con pacchetti di dati. La nostra discussione delle reti si focalizzerà su entrambe le parti di una relazione client/server. Il client richiede che venga eseguita qualche azione, il server la esegue e risponde al client. Un'implementazione comune del modello richiesta-risposta è quella tra i browser Web e i server Web. Quando l'utente seleziona un sito Web da visitare con il browser (l'applicazione client), viene spedita una richiesta al server Web appropriato (l'applicazione server). Il server di solito risponde al client spedendogli una pagina HTML appropriata. Parleremo inoltre delle comunicazioni Java basate su socket, che permettono a un programma di leggere da o di scrivere in un socket proprio come se si trattasse di un file. Vedrete inoltre come creare e utilizzare i socket. Java offre due tipi di socket: di flusso (stream socket) e di datagramma (datagram socket). Nel primo caso, un processo stabilisce una connessione con un altro processo; mentre la connessione è in atto, i dati scorrono tra i processi attraverso un flusso continuo. Questi socket forniscono un servizio orientato alla connessione. Il protocollo utilizzato per la trasmissione è il noto TCP (Transmission Control Protocol). Nel caso dei socket di datagramma, vengono trasmessi pacchetti di informazioni. Questo protocollo non è il più adatto a tutti i programmi perché, diversamente da TCP, il protocollo utilizzato, vale a dire UDP (User Datagram Protocol), è un servizio senza connessione, che non garantisce che i pacchetti giungano a destinazione nel modo corretto: i pacchetti possono arrivare nell'ordine sbagliato, oppure andare persi, oppure ancora essere duplicati. Con il protocollo UDP, quindi, è necessaria una notevole attività di programmazione aggiuntiva per gestire questi problemi. I socket di flusso e il protocollo TCP sono quindi più adatti alla maggior parte dei programmi Java. |