Post

Upload di un file in Java con le Servlet 3.0

DOMANDA: Esiste un modo per effettuare l'upload di un file via JSP/Servlet senza utilizzare librerie di terze parti? RISPOSTA: Una delle problematiche che più spesso si presenta a chi progetta siti web è l' upload di un file da un form a una JSP/Servlet. Sino all'avvento delle Servlet 3.0 e all'introduzione dell'annotazione @MultipartConfig era necessario utilizzare le ottime librerie messe a disposizione da O'reilly (COS) o da Apache (FileUpload) . In realtà anche senza librerie di terze parti e Servlet 3.0 era possibile effettuare un upload, ma sicuramente il codice da utilizzare non era dei più puliti. Ve lo dimostro con un esempio vecchia maniera (senza utilizzo di librerie di terze parti) che, dopo aver letto il file dalla request, lo salva sul disco del server: Il form .JSP per l'upload del file: <html> <head><title>Test File Upload</title></head> <body> <form name...

Scrivere un file su un percorso di rete (protocollo ftp)

DOMANDA: Come si crea e scrive un file in remoto? RISPOSTA: La scrittura di un file in remoto (su un percorso di rete o share NAS) si può effettuare facilmente attraverso l'utilizzo del protocollo ftp e (naturalmente) Java!  Il seguente snippet costruisce una connessione verso il nostro percorso di rete ed esegue il salvataggio di un file di testo ( prova.txt ) con contenuto ciao mondo! . package rete; public class ScritturaFileRemota { public static void main (String [] args){ URL urlDiRete = new URL("ftp://"+username+":"+password+"@"+percorso_di_rete+"/prova.txt"); URLConnection connessioneDiRete = urlDiRete.openConnection(); connessioneDiRete.setDoOutput(true); BufferedWriter in =  new BufferedWriter(new OutputStreamWriter(connessioneDiRete.getOutputStream())); in.write("ciao mondo!"); in.close(); } } Se l'accesso al vostro percorso di rete è sogge...

Catturare le coordinate del Mouse

DOMANDA: Come posso ottenere le coordinate della posizione del puntatore del mouse in Java? RISPOSTA: Per catturare le coordinate del mouse in Java è necessario utilizzare la classe java.awt.MouseInfo che ci mette a disposizione il metodo getPointerInfo() attraverso il quale possiamo ottenere le informazioni riguardo le coordinate del puntatore. Nell'esempio qui di seguito abbiamo la classe CoordinateMouse che ogni 50 millisecondi aggiorna questi due valori mostrandoli sulla console: package mouseclick; import java.awt.MouseInfo; public class CoordinateMouse { public static void main(String[] args) throws InterruptedException{ while(true){ Thread.sleep(50); System.out.print("(x) "+MouseInfo.getPointerInfo().getLocation().x); System.out.print(" - "); System.out.print("(y) "+MouseInfo.getPointerInfo().getLocation().y); System.out.println(); } } } Eseguendo l'esempi...

Modificare una riga di un file

DOMANDA: Come si modifica una riga di un file senza creare un file di appoggio duplicato? RISPOSTA: La soluzione più semplice, ma anche più dispendiosa, è quella di leggere ciclicamente dal file di origine una riga, controllare se è quella da modificare e scriverla in un nuovo file continuando sino all' EOF (end-of-file); al termine si cancella il file di origine e si lascia il nuovo. Ovviamente tutta questa procedura è molto laboriosa, in particolare di fronte a file di dimensioni notevoli. L'esempio che vi proponiamo oggi fa in modo di modificare al volo la riga e di scriverle direttamente sullo stesso file di origine : package file; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; public class ModificaFile { public static void main(String[] args) { FileInputStream fstream = null; Data...

Meglio JBoss AS o Tomcat?

DOMANDA: E' meglio Apache Tomcat o JBoss Application Server? RISPOSTA: Come tutte le grandi dispute, l'unica vera risposta esatta è: "Dipende!" . In breve Tomcat fornisce un Servlet Container che supporta tutte le specifiche delle servlet (la versione 7 di Tomcat supporta anche le Servlet 3.0). JBoss AS (Application Server) , oltre al supporto delle Servlet 3.0 supporta tutto JEE 6 .  Ad intuito si può quindi capire come Tomcat sia più abbastanza rispetto a JBoss AS e, qualora necessitassimo di altre potenzialità incluse in JEE , abbiamo la facoltà di aggiungere manualmente le varie componenti. Ad esempio, se volessimo aggiungere Hibernate all'interno del nostro Apache Tomcat , basterà scaricare ed aggiungere le giuste librerie al server. Certo, di sicuro è richiesta una certa padronanza e conoscenza del funzionamento di Tomcat, ma non è affatto complicato. Se, invece, la nostra applicazione ha bisogno di un supporto integrato a diverse tec...

JSP Error: IllegalStateException

DOMANDA: Quando provo ad effettuare il forward o il sendRedirect di una JSP ad un'altra risorsa ottengo queste IllegalStateException: con il forward: java.io.IOException: Error: Attempt to clear a buffer that's already been flushed java.lang.IllegalStateException: Error: Attempt to clear a buffer that's already been flushed con il sendRedirect: java.lang.IllegalStateException    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:438) RISPOSTA: Inserendo questa riga di codice all'inizio della JSP si risolve il problema: <%@ page autoFlush =" true " buffer =" 1094kb " %>    Vi starete chiedendo perché.  Bene, cerchiamo di spiegarlo brevemente. Quando si inoltra una request ad un'altra risorsa con un forward o un sendRedirect() si ottiene una IllegalStateException qualora la response (o parte di essa) fosse già stata inviata al client. Quindi, quando otteniamo questo errore è molt...

Enumerare le interfacce di rete e loro caratteristiche

DOMANDA: Come posso creare un elenco delle interfacce di rete con le relative caratteristiche? RISPOSTA: Rispondo subito con un esempio chiarificatore nella classe ElencoInterfacceDiRete : package interfaccedirete; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; public class ElencoInterfacceDiRete {    public static void main(String args[]) throws SocketException {       Enumeration<NetworkInterface> interfaces =              NetworkInterface.getNetworkInterfaces();       while (interfaces.hasMoreElements()) {          NetworkInterface netInterf = interfaces.nextElement();          Enumeration<InetAddress> indirizzi = netInterf.getInetAddresses();           while (indirizzi.hasMoreElements...