Tutorial web Application Installazione della JDK: Java viene distribuito con la jdk e il jre acronimi di Java Development Kit e Java Runtime Environment rispettivamente. La jdk è l'ambiente di sviluppo serve cioè per sviluppare il codice Java mentre la jre serve solo per eseguire il codice java, la jdk contiene l'interprete, il compilatore e le classi di supporto mentre la jre solo interprete e compilatore. Per installare la jdk procedere in questo modo: 1. effettuare il download della jdk (qualunque versione va bene ma è consigliabile l'ultima disponibile) dopo l'installazione sarà stata copiata la seguente cartella su file system: copiare il path (percorso) della jdk in questo modo:
o, in alternativa, entrare nella cartella jdk: e cliccare su uno qualsiasi dei file o delle cartelle premendo il tasto destro del mouse selezionare 'proprietà' e nella finestra che compare:
selezionare il percorso (tasto sinistro del mouse sopra premuto e premere il tasto ctrl + c). copiato il percorso tasto destro su 'computer' e selezionare 'proprietà':
nella schermata successiva: scegliere 'impostazione avanzata di sistema' e 'variabili di ambiente':
scegliere 'nuova' in variabili di sistema: inserire come nome variabile 'JAVA_HOME' e come valore il percorso alla jdk: quindi tselezionare la variabile 'path' quindi 'modifica':
inserire all'inizio il percorso della jdk con in più '\bin' (il percorso alla cartella bin della jdk) con un carattere punto e virgola a fine path: nel nostro caso: dopo aver premuto 'ok' per verificare la corretta installazione avviare una shell dos (start comando 'cmd'), digitando 'java version' comparirà il messaggio di quale jdk risulta installata: la jre si installa allo stesso modo escluso la definizione del path e della cartella '\bin'.
creiamo il web project in myeclipse: Selezionare file/new/web project se la voce non è presente selezionare file/new/others :
e inserire nel filtro 'web':
scegliere la voce 'web project' e proseguire, nella schermata successiva:
scegliamo come project name 'FirstWebApplication', automaticamente il nostro Context Root sarà '/FirstWebApplication'. Nota: Il context Root è importante perchè permette di chiamare la nostra applicazione deployata (installata) in Tomcat in questo modo:
la nostra web application, una volta creatab, avrà la seguente struttura: questa struttura è STANDARD nel senso che è la stessa per OGNI applicazione web realizzata in Java. Si trovano all'interno i seguenti componenti: cartella ROOT: è la cartella principale del progetto, nel nostro caso è la cartella FirstWebApplication MANIFEST.MF: contiene informazioni sull'archivio WAR (WebARchivie) che contiene la nostra applicazione web lib: directory presente sotto la directory WEB-INF che può contenere eventuali librerie che servono all'applicazione web.xml: è un file che contiene informazioni sulla nostra web application, si chiama Deployment Descriptor ed è un file xml index.jsp: è una pagina jsp, tutte le pagine html, jsp si trovano a livello della cartella root
Installiamo Apache Tomcat 7 sul nostro computer: dopo aver fatto il download del web server Tomcat memorizziamo la sua cartella nel percorso 'c:programmi': quindi premiamo su start e tasto destro su 'computer' e scegliamo 'proprietà':
scegliamo 'impostazioni di sistema avanzate': clicchiamo su 'variabili d'ambiente': quindi 'nuova' in variabili di sistema:
in 'nome variabile' inserire 'APACHE_HOME' e nel valore variabile inserire il percorso su file system alla cartella di apache tomcat:
tornare in Myeclipse e selezionare la voce configure server : nella schermata successiva cliccare su tomcat 7 (la versione che abbiamo installato sul pc altrimenti va scelta quella corrispondente): cliccare su 'enable' per abilitare il server in MyEclipse (in modo che lo 'veda'):
successivamente cliccare sul tasto 'browse' e selezionare la directory di installazione di Tomcat: quindi : cliccare sul tasto 'ok'.
Ora tasto destro sulla nostra applicazione e selezioniamo 'Run as/myeclipse Server Application': selezioniamo 'Tomcat 7.x' che è il server che abbiamo installato ESTERNAMENTE A MYECLIPSE mentre il primo, 'MyEclipse Tomcat' è quello che viene installato INSIEME a MyEclipse:
il messaggio nella console di output ci informa che il server è in running mode (in esecuzione): se apriamo il browser Firefox e digitiamo nella barra degli indirizzi 'http://localhost:8080': se vogliamo capire quali applicazioni sono installate e slo stato (ad esempio se sono in running mode cioè in esecuzione) dobbiamo cliccare su 'Manager App':
ma non ci farà accedere perchè è necessario fornire le credenziali per l'accesso: quello che bisogna fare è : 1. stoppare apache tomcat: infatti lo stato del server risulta 'stopped' come si vede se clicchiamo sul tab 'server' (se non è presente selezionare 'window/show view/other' come in figura:
nel filtro inserire 'server' e selezionare la voce 'Servers' cliccando su 'ok':
Riprendendo il discorso sullo stato del server, deve risultare in stato 'stopped': posizionarsi sotto la cartella 'conf' di tomcat ed aprire il file 'tomcat-users.xml':
aggiungere la seguente riga appena prima di '</tomcat-users>': <user username="tomcat" password="tomcat" roles="manager-gui"/> cioè: ora di nuovo: Ora tasto destro sulla nostra applicazione e selezioniamo 'Run as/myeclipse Server Application':
selezioniamo 'Tomcat 7.x' che è il server che abbiamo installato ESTERNAMENTE A MYECLIPSE mentre il primo, 'MyEclipse Tomcat' è quello che viene installato INSIEME a MyEclipse:
il messaggio nella console di output ci informa che il server è in running mode (in esecuzione): se apriamo il browser Firefox e digitiamo nella barra degli indirizzi 'http://localhost:8080': cliccando su managerapp inseriamo come user e password rispettivamente 'tomcat' e 'tomcat' in pratica i corrispondenti inseriti nel file 'tomcat-users.xml':
clicchiamo su 'ok' e procediamo, nella seguente schermata vediamo la nostra applicazione in stato 'running': cliccando su '/FirstWebApplication' viene chiamata la nostra web application, in particolare la pagina 'index.jsp' contenuta nella nostra applicazione:
NOTA: viene caricata la pagina 'index.jsp' per default poiché nel deployment descriptor 'web.xml' (il deployment descriptor (ricordo è un file xml di configurazione che specifica informazioni sull'applicazione web su cosa contiene e su come deve funzionare) viene specificato nel tag '<welcome-file' quanto segue: se come url viene specificato SOLO il contesto (la root) dell'applicazione web (come nel caso precedente dove abbiamo digitato localhost:8080/firstwebapplication ) viene caricata la pagina specificata nel tag '<welcome-file>'. Ovviamente si può specificare un'altra pagina (html o jsp esistente).
Partiamo ora col realizzare una servlet, ricordo che la servlet è in sostanza una classe java con funzionalità aggiuntive per gestire richieste e risposte HTTP: tasto destro sul nostro progetto e clicchiamo su 'new/servlet': nel caso in cui non compare nella finestra selezionare 'new/others' e inserire nel filtro 'servlet' come in figura:
nella schermata successiva inserire come nome della servlet: MyServlet e come package di appartenenza 'com.servlet' e deselezioniamo la checkbox 'dopost()': notiamo anche che la nostra servlet estende la classe HttpServlet per aggiungere funzionalità legate alle gestione HTTP. Nella successiva schermata:
vengono generati in automatico delle informazioni relative alla nostra servlet tar cui il Mapping URL in pratica si specifica la parte di URL che carica la nostra servlet e che è così composto: la nostra servlet:
ora se apriamo il deployment descriptor 'web.xml' notiamo: sono stati creati due Tag xml che individuano la nostra servlet e cioè '<servlet>' e '<servletmapping>'
entrambi servono affinchè Tomcat capisca che è stata installata la nostra servlet, il tag <servletmapping> specifica l'url per richiamare la nostra servlet : e specifica anche a quale servlet, di quale classe, fa riferimento: modifichiamo ora la nostra servlet per una prova iniziale, modifichiamo in particolare il metodo GET in questo modo: una ultima cosa, nel deployment descriptor modifichiamo per comodità il codice come segue:
in pratica la pagina 'start.html' verrà richiamata come pagina di benvenuto se, dopo aver deployato la nostra web application, digitiamo l'url seguente: http://localhost:8080/firstwebapplication/ che specifica quindi dolo la Root dell nostra web application. NOTA: Se volessimo chiamare la pagina 'index.sp' in questo caso dovremo digitare http://localhost:8080/firstwebapplication/index.jsp deployamo la nostra web application premendo tasto destro sul nostro progetto e selezionando 'run as/myeclipse Server Application' :
e selezioniamo il nostro server esterno di riferimento. quindi l'ouptut del browser digitando l'url corrispondente: Tornando al codice della nostra servlet, in particolare al metodo doget : riceve due oggetti uno 'request' per interagire con l'input el'altro 'response' per gestire l'output infatti successivamente nel codice la servlet utilizza quest'ultimo (e l'oggetto PrintWriter ) per fornire dell'html in output. Abbiamo aggiunto inoltre la riga di codice ' out.print( ok called servlet! );' per personalizzare la nostra servlet. Altra cosa da capire è che la servlet viene gestita (come ciclo di vita) da Tomcat, questi quando 'istaniza' la servlet chiama il metodo 'init()' e quando la 'distrugge' (termina ad esempio il metodo get()) richiama il metodo 'destroy()':
all'interno potremo anche metterci del codice di inizializzazione (in init()) e legato al rilascio di risorse (destroy()). INVIARE UN PARAMETRO ALLA NOSTRA SERVLET: clicchiamo due volte sulla pagina 'start.html' e dalla palette trasciniamo una textfield nel nostro form: NOTA: tutto quello che è contenuto in un form viene inviato alla servlet attraverso l'url questo risulta possibile perchè l'attributo 'action' del form specifica un path per richiamare la servlet:
Nella schermata che compare settiamo il nome della textfield e il numero di caratteri che può contenere: ora nella servlet dobbiamo fare in modo che nel metodo 'doget' recuperiamo il contenuto della textfield:
quindi effettuiamo il redeploying dell'applicazione e lanciamo il browser ottenendo: quindi clicchiamo su invia: otteniamo 'valore textfield giuseppe':
NOTA: guardiamo all'url nel browser: in pratica all'url della nostra servlet viene 'agganciato' un carattere '?' seguito da coppie 'chiavi=valore' nel nostro caso 'nome textfield=valore' (per il pulsante è semplicemente perchè è presente nel form. Le coppie chiavi=valore sono separate dal carattere '&' (ampersand) Forward e redirect: la nostra servlet può caricare altre risorse: servlet, pagine jsp, pagine html ecc. Ci sono due modi per caricare una risorsa e cioè forward e il redirect. La servlet carica una pagina JSP con il forward: creiamo una pagina jsp chiamata 'output.jsp':
cioè: modifichiamo la servlet in questo modo:
il RequestDispatcher è un oggetto che si ricava dall'oggetto request e permette il forwarding verso la nostra output.jsp in sostanza la servlet viene SOSTITUITA da 'output.jsp' COME SE LA RICHIESTA FOSSE PASSATA ALLA PAGINA JSP STESSA. L'output nel browser: da notare l'url nella barra: RIPORTA ANCORA L'URL PER RICHIAMARE LA SERVLET ANCHE SE ABBIAMO CARICATO LA PAGINA OUTPUT.jsp questo da l'idea che la pagina 'output'.jsp' può accedere agli oggetti request e response inviate alla servlet (le che a servlet a sua volta ha 'passato' alla jsp). IL REDIRECT si effettua in questo modo:
in pratica utilizzando l'oggetto 'response', quello che otteniamo rideployando e rilanciando l'applicazione è: in sostanza l'url che abbiamo fornito per il redirect e cioè: /FirstWebApplication/output.jsp essendo una NUOVA richiesta (come se fosse fatta da browser) va specificata a partire dalla ROOT. Se vogliamo che la nostra pagina output,jsp recuperi il valore della textfield possiamo farlo in più modi, ad esempio scrivendo nella nostra jsp:
oppure memorizzare nel metodo get della servlet la stringa della textfield come attributo: Il problema di passare i parametri in questo modo si evidenzia nella seguente situazione: dove servlet 1 riceve la richiesta, la inoltra a output.jsp che a sua volta richiama servlet 2 che restituisce l'output al browser:
in sostanza utilizzando questa modalità di passaggio di oggetti tra i componenti se nel grafico la servlet 1 vuole passare un oggetto alla servlet 2 deve farlo attraverso la pagina output.jsp per risolvere questo problema si può usare un oggetto HttpSession cioè un oggetto SESSIONE. Questo rappresenta un'area di memoria accessibile ( e visibile) da tutti i componenti: in questo senso la sessione è un'area di memoria condivisa. A livello di codice nella nostra servlet 1 scriveremo:
e ad esempio nella servlet 2: