Post

Costruttori multipli

DOMANDA: In Java si può chiamare un costruttore da un altro costruttore? RISPOSTA: Certamente. In questo post vedremo il modo più elegante per evitare ridondanza di codice e massimizzare la manutenibilità delle nostre classi. Tutto quello che c'è da sapere è la parola chiave this(args)  che viene utilizzata per richiamare il costruttore dell'oggetto stesso. Ovviamente   args  sono gli eventuali parametri da passare al costruttore e che identificano la sua firma. Il modo migliore è partire dal costruttore con meno argomenti richiamando via via quello più corposo.  Vediamolo con un esempio (classe Costruttori.java ): package costruttori; public class Costruttori {     private int x;     private int y;    private int z;     // primo costruttore     public Costruttori() {       this (3); //richiamo il secondo    }     // secondo costruttore     public Costruttori( int x) {         this (x, 4); //richiamo il terzo    }     // terzo c

Modalità di Import

DOMANDA: Che differenza c'è tra l'import completo esplicitando il nome della classe e l'ometterlo utilizzando il wildcard "*" (asterisco)? import java.io.*; import java.io.BufferedReader; RISPOSTA: A discapito di quanto possa sembrare, il file .class non avrà differenze né di grandezza , né di velocità di esecuzione . Infatti l' import indica al compilatore soltanto dove andare a cercare le classi che utilizziamo. La prova scientifica di quanto affermato è possibile averla ricavando il checksum md5 di una classe scritta con gli import espliciti ed una con il  wildcard "*" . Il risultato sarà identico. Quindi l'unica differenza tra le due modalità di importare sta nella velocità di compilazione (perché ci metterà del tempo in più per trovare la classe all'interno del package indicato con l'asterisco). In ogni caso parliamo di tempi ridottissimi e quindi trascurabili per i medi progetti. Concludendo, gli unici

Problemi con Eclipse: punto esclamativo rosso

Immagine
DOMANDA: Non mi parte il progetto in Eclipse oppure mi parte ma senza le ultime modifiche apportate. Ho un punto esclamativo grande vicino al nome del progetto: Il Punto Esclamativo Rosso Come posso risolvere? RISPOSTA: E' uno dei problemi diffusi e difficili da rilevare perché sembra non avere un motivo apparente e, soprattutto, non ha un chiaro messaggio di errore. Il punto esclamativo vicino alla cartella del progetto è l'unico output visivo. Fortunatamente per risolverlo è sufficiente settare correttamente il Build Path del progetto. Facciamo click destro sul progetto -> Build Path -> Configure Build Path : Configure Build Path Vi si aprirà questa finestra piena di x rosse (assicuratevi di selezionare il tab Libraries ): Libraries Le x rosse stanno ad indicare che le librerie e i relativi path non esistono più o sono stati cambiati. Dovete andare a modificarli selezionando la libreria errata e cliccando su edit . A que

La "Compilazione" Java

Immagine
DOMANDA: Java è un linguaggio interpretato o compilato? RISPOSTA: In realtà Java è un linguaggio ibrido , sia compilato che interpretato . Diamo un'occhiata al processo globale: Fasi della compilazione 1.  Il primo step è il file .java che viene inviato al compilatore Java (javac) che lo trasforma in un file .class 2.  Il file .class  contiene il  Bytecode , un codice intermedio tra il compilato e il file in chiaro ed è comprensibile a tutte le Java Virtual Machine ( JVM ) installate sui diversi dispositivi (ricordiamo che la JVM è specifica per l'architettura su cui è installata). Se provate ad aprire con il Blocco Note (o un qualunque editor di testo) un file .class vi renderete conto che il file è in parte intellegibile, in parte no. 3.  La Java Virtual Machine internamente ha un Compilatore Just In Time ( JIT ) che si occupa di interpretare il Bytecode trasformandolo in codice comprensibile al calcolatore. Tale operazione non è svo

Pagina di provenienza (Referer)

DOMANDA: In una JSP (Java Server Page) posso risalire all'indirizzo della pagina di provenienza? RISPOSTA: Come in molti altri linguaggi, questa operazione è possibile anche con le Java Server Pages e ovviamente con le Servlet . L'url di provenienza prende il nome di Referer  e, grazie ai metodi già forniti dalla classe HttpServletRequest ,   possiamo riuscire nel nostro intento con questa riga di codice: String provenienza = request.getHeader( "Referer" ); Ecco un breve esempio di Servlet (Referer) : package referer; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet( "/Referer" ) public class Referer extends HttpServlet {    private static final long serialVersionUID = 1L;    publ

SendRedirect e Forward

DOMANDA: Che differenza c'è tra response.sendRedirect() e dispatcher.forward()? RISPOSTA: Benché l'effetto apparente sia quasi lo stesso, c'è una profonda differenza tra i due modi di reindirizzamento . Vediamolo nella pratica. Creiamo una piccola pagina HTML per l'invio dei dati ( "index.jsp" ): <html> <head> <title> Blog Domande e Risposte JAVA </title> </head> <body> <form method="POST" action="servlet/sendRedirect"> SendRedirect <input type="hidden" name="param" value="Lancill Blog" /> <input type="submit" value="Invia" /> </form> <form method="POST" action="servlet/forward"> Forward <input type="hidden" name="param" value="Lancill Blog" /> <input type="submit" value="Invia" /> </form> </body&

Spring Security 3.1: Hello World

Immagine
DOMANDA: Come faccio a installare Spring Security 3.1 e lanciare un'applicazione funzionante in 5 minuti? RISPOSTA: Niente paura: ecco un tutorial veloce che fa al caso vostro. Scaricate e scompattate nelle directory che preferite: Spring Security 3.1 Apache commons logging 1.1.1   AOP Alliance API 1.0 (binary jar) CGLIB JSTL 1.2 A questo punto creiamo un Progetto Web Dinamico di nome "HelloSecurity". Il progetto dovrà apparire così: Schema del progetto HelloSecurity con a destra il dettaglio delle librerie.  Scriviamo prima i files di configurazione. Dispatcher-servlet.xml: <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:security = "http://www.springframework.org/schema/security" xmlns:p = "http://www.springframework.org/schema/p" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation =