Web e Network
Comunicazione mediante WebSocket e Tomcat 7
10 ott
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.
JSP: gestire le eccezioni con la direttiva page
11 set
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.
Java EE 5: creare un contatore di utenti online
25 mag
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.
Java EE 5: esempio di utilizzo dei filtri
23 mag
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.
Java EE 5: download di una pagina
17 mag
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
15 mag
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).
Echo Server multithreaded in Java
2 mag
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.
Host Lookup in Java
27 apr
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.
Echo Server in Java
25 apr
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.
Rappresentazione di un indirizzo IP in Java
24 apr
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