Web e Network

Comunicazione mediante WebSocket e Tomcat 7

Le WebSocket rappresentano una tecnologia che consente una comunicazione bidirezionale e full-duplex tra il client e il server.
In particolare, consente ad applicazioni browser-based di comunicare con un host remoto senza la necessità di aprire connessioni multiple utilizzando AJAX o IFrame, in combinazione con il long polling.

Lato client, le WebSocket sono implementate nella maggior parte dei browser di ultima generazione. La tabella riportata sul sito caniuse.com può essere d’aiuto.
Lato server, esistono diverse implementazioni di WebSocket. In questo articolo prenderemo in considerazione l’implementazione Java fornita da Apache Tomcat 7. Come indicato nella documentazione, l’API potrebbe essere soggetta a cambiamenti.

Continua >

JSP: gestire le eccezioni con la direttiva page

La direttiva page delle pagine JSP possiede un attributo, errorPage, che permette di specificare una pagina di errore da mostrare in caso avvenga un’eccezione non gestita.
La pagina di errore può settare a true l’attributo isErrorPage, in modo da ottenere l’oggetto implicito exception e ricavare la fonte dell’eccezione.

Continua >

Java EE 5: creare un contatore di utenti online

Per creare un contatore di utenti online (o meglio, di utenti che hanno attualmente una sessione aperta con il server), si può agire in diversi modi.
In questo esempio, utilizzeremo i listener. In particolare, faremo uso del listener javax.servlet.ServletContextListener (il listener del contesto dell’applicazione) e del listener javax.servlet.http.HttpSessionListener e dei relativi eventi.
Con il primo setteremo il contatore a zero, con il secondo controlleremo le creazioni e distruzioni delle sessioni, in modo da decrementare/incrementare il contatore.
Faremo uso dell’interfaccia javax.servlet.ServletContext, in modo da rendere disponibile il contatore a tutti i servlet dell’applicazione.

Continua >

Java EE 5: esempio di utilizzo dei filtri

Nello sviluppo di un’applicazione web Java, è possibile utilizzare una particolare interfaccia, javax.servlet.Filter, che consente di intercettare una richiesta prima che raggiunga la risorsa.
In questo modo, possiamo ottenere gli oggetti HttpServletRequest e HttpServletResponse prima che questi giungano al servlet.

Continua >

Java EE 5: download di una pagina

Il progetto seguente ha lo scopo di mostrare come gestire il download di un file richiesto da un client.
Per adattarlo alle proprie esigenze, bisogna cambiare i link del file index.jsp e il path e nome dei file nel servlet.

Il flusso del programma è il seguente:





Al client, quando invieremo il file, indicheremo, mediante la risposta HTTP, il contenuto della risposta e la lunghezza del file che gli invieremo.
Da notare che il file non deve essere disponibile a chiunque ma solo agli utenti registrati. Per questo motivo i file non saranno presenti nella directory dell’applicazione ma risiederanno in una directory non accessibile dall’esterno.

Qui è possibile accedere al progetto Netbeans:
JeeDownload.tar.gz

Java EE 5: ottenere i valori multipli di un parametro

Quando sviluppiamo applicazioni web in Java utilizzando i servlet o le JSP, può essere necessario ottenere i valori multipli di un determinato parametro passato tramite la richiesta HTTP dal client.
Utilizzando un oggetto javax.servlet.http.HttpServletRequest, abbiamo due semplici metodi per ottenerli:

Map getParameterMap()
String[] getParameterValues(String name)

Il secondo metodo ritorna un array di valori (eventualmente di lunghezza 1) corrispondenti al nome del parametro dato.
Il primo metodo, invece, ritorna una mappa dove le chiavi sono di tipo String (il nome del parametro), mentre i valori sono array di String (i valori del relativo parametro).

Continua >

Echo Server multithreaded in Java

Il codice seguente implementa un Echo Server multithreaded in Java.
Nel main, il server viene creato e si mette in attesa di connessioni.
Ogni volta che giunge una nuova connessione, viene creato un oggetto EchoThread, che implementa l’interfaccia Runnable, il quale gestisce la connessione con il client.
La comunicazione tra il thread e il client termina nel momento in cui il client si disconnette o invia la stringa quit.

Continua >

Host Lookup in Java

La creazione di un utility che converte un hostname in un indirizzo IP e viceversa può essere decisamente semplice, utilizzando la classe java.net.InetAddress.
In particolare, il programma accetterà un hostname o un IP come argomento (quale dei due sia stato passato viene deciso con una funzione che sfrutta le espressioni regolari, e quindi le classi Pattern e Matcher) e lo trasformerà di conseguenza.

Continua >

Echo Server in Java

Il codice che segue implementa un semplice Echo Server in Java.
Il programma crea un ServerSocket che resta in attesa di una connessione. Quando riceve una connessione in ingresso, legge i dati in ingresso fino al loro termine o fino a quando non viene incontrato il carattere di newline, ed effettua l’echo.
Il server si limita a ricevere, rispondere e chiudere la connessione, senza rimanere in attesa di ulteriori input.

Continua >

Rappresentazione di un indirizzo IP in Java

In Java, un indirizzo IP (sia IPv4 che IPv6) è rappresentato come un oggetto di classe java.net.InetAddress che, solitamente, contiene sia l’hostname che l’indirizzo IP.

La classe InetAddress non ha costruttori pubblici quindi la creazione di un’istanza di tale classe è affidata a diversi metodi statici:

// determina l'IP dell'indirizzo dell'host specificato
static InetAddress getByName(String host)
    throws UnknownHostException

// determina tutti gli IP dell'indirizzo dell'host specificato
static InetAddress[] getAllByName(String host)
    throws UnknownHostException

// ricava un InetAddress dall'indirizzo IP specificato
static InetAddress getByAddress(byte[] addr)
    throws UnknownHostException

// ricava un InetAddress dal nome dell'host e dall'IP specificato
static InetAddress getByAddress(String host, byte[] addr)
    throws UnknownHostException

// ritorna l'host locale
static InetAddress getLocalHost()
    throws UnknownHostException

Continua >