Presentazione di PowerPoint - Server users.dimi.uniud.it

annuncio pubblicitario
Sviluppo di Applicazioni Web
con Java 2 Enterprise Edition
Ivan Scagnetto
Dipartimento di Matematica e Informatica
http://www.dimi.uniud.it/scagnett
[email protected]
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 1
Perché J2EE
• Perché ci consente di utilizzare Java per lo sviluppo
di applicazioni web:
– possiamo sfruttare tutti i principali package e librerie
di Java (connessione a DBMS, socket,
manipolazione di testo/immagini ecc.);
– possiamo “ragionare” ad oggetti, utilizzando pattern
di programmazione noti (e.g., MVC) ed integrando
così più facilmente la nostra applicazione con il
software preesistente (e.g., gestionali scritti in Java).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 2
Cosa aspettarsi da questo corso
• Introduzione al framework J2EE:
– Servlet/JSP;
– JDBC.
• Comprensione di concetti e meccanismi chiave per lo sviluppo
di applicazioni web:
– interazione con il protocollo HTTP;
– gestione di cookie e sessioni;
– connessioni a basi di dati.
• Esempi/casi di studio.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 3
Bibliografia
• Vincenzo Della Mea, Luca Di Gaspero, and Ivan Scagnetto.
Programmazione Web Lato Server (2a ed.).
ed.) Apogeo, 2010 (Cap.
4 e 5 per quanto riguarda questa parte su J2EE).
J2EE)
• Subrahmanyam Allaramaju, Cedric Buest, Marc Wilcox,
Sameer Tyagi, Rod Johnson, Gary Watson, Alan Williamson,
John Davies, Ramesh Naggapan, Andy Longshaw, Dr P G
Sarang, Tyler Jewell, and Alex Toussaint. Professional Java
Server Programming J2EE: 1.3 Edition (Programmer to
Programmer).
Programmer) WROX, 2001.
• Kris Magnusson, David Flanagan, Jim Farley, and William
Crawford. Java Enterprise in a Nutshell.
Nutshell O’Reilly, 2005.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 4
Sommario
• Introduzione
– Applicazioni Web
• Java 2 Enterprise Edition (cap. 5 di PWLS)
– Tomcat
– Servlet
– Sintassi ed esempi
• Link utili
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 5
Applicazioni Web
(Web Application)
• Sono applicazioni utilizzabili mediante il
web browser: (X)HTML sostituisce la
classica GUI.
GUI
• Permettono di eseguire dei programmi su
un server.
• Esempi:
– Web mail
– Commercio elettronico
– CMS ecc.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 6
Vantaggi delle applicazioni Web
• Installazione su un singolo computer (server).
– Facilità di gestione e manutenzione.
• Fruizione concorrente dell'applicazione da più
client.
– Unici requisiti richiesti: browser e connettività.
– Nessun bisogno di installare/gestire software ad-hoc.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 7
Java 2 Enterprise Edition
• J2EE è una versione particolare dell’ambiente di sviluppo Java
mirata allo sviluppo di applicazioni distribuite (≡ enterprise).
enterprise
• J2EE comprende diverse componenti fra cui:
–
–
–
–
–
–
–
servlet,
JSP,
JDBC,
supporto per XML,
RMI, Corba,
JNDI, JMS, JavaMail,
EJB ecc.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 8
Java 2 Enterprise Edition
• Focalizzeremo la nostra attenzione su:
–
–
–
Servlet,
Servlet
JSP (Java Server Pages),
JDBC (Java Database Connectivity).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 9
Java Servlet
•
•
•
•
Java Servlet: concetti fondamentali
L’API delle servlet
Esempio: la prima servlet
Tomcat (installazione e primo utilizzo)
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 10
Java Servlet
• Una Java servlet è un’estensione del server,
server
ovvero, una classe Java che può essere caricata
dinamicamente per estendere le funzionalità del
server.
• Di solito le servlet sono utilizzate nei web server
(in modo da fornire un’alternativa agli script CGI).
• Le servlet girano in una JVM sul server, quindi
sono sicure e portabili.
• A differenza delle applet non richiedono alcun
supporto per Java nel web browser.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 11
Vantaggi delle Servlet
• Tutte le richieste alle servlet vengono implementate
come thread distinti all’interno dello stesso processo: ne
derivano efficienza e scalabilità.
scalabilità
• Le servlet sono portabili:
portabili
– da un sistema operativo ad un altro;
– da un web server ad un altro (tutti i principali web server
supportano le servlet, direttamente o tramite plug-in, addon ecc.).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 12
Java Servlet e Web Server
Richiesta Servlet B
Richiesta Servlet B
thr
Servlet A
ead
thread
ea
r
th
Servlet B
d
Servlet C
Richiesta Servlet A
Web server con Java Servlet
JVM
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 13
Supporto per le Java Servlet
• Per utilizzare le Java Servlet occorre:
– JVM (sul server);
– Servlet API (classi javax.servlet e
javax.servlet.http), fornite in bundle con il
JSDK o incorporate in alcuni web server;
– un Servlet Engine (e.g., Tomcat); le tipologie
disponibili sono:
• standalone;
• add-on;
• embeddable.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 14
Tipologie di Server Engine
• Standalone Server Engine:
Engine si tratta di un server che
fornisce un supporto nativo per le Java Servlet.
• Add-on Servlet Engine:
Engine questa tipologia consiste in
plug-in che aggiungono il supporto alle servlet per
server esistenti e privi di tale supporto.
• Embeddable server engine:
engine questa tipologia consiste
in una piattaforma che supporta le servlet e che può
essere inserita in un’altra applicazione (il vero server).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 15
Scegliere un servlet engine
• Non tutti i servlet engine sono uguali.
• Prima di scegliere un particolare engine, conviene
testarlo per vedere se supporta le funzionalità
necessarie.
• La lista dei servlet engine disponibili è mantenuta
aggiornata dalla Sun al seguente URL:
http://java.sun.com/products/servlet/industry.html
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 16
Caratteristiche delle servlet
•
•
•
•
•
•
•
Portabilità
Potenza
Efficienza e persistenza
Sicurezza
Eleganza
Integrazione
Estendibilità e flessibilità
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 17
Portabilità
• Essendo scritte in Java e basandosi su un’API
standard, le servlet sono altamente portabili fra
diversi sistemi operativi e diversi server: “write
once, serve everywhere”.
everywhere
• Tuttavia la portabilità non è strettamente
necessaria: le servlet devono girare solo sul server
di sviluppo e produzione (cfr. la necessità di un
applet di girare su tutti i client possibili).
• Le servlet non utilizzano la parte più soggetta ad
errori e mal implementata di Java: l’AWT.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 18
Potenza
• Le servlet possono sfruttare tutta la potenza
delle API principali di Java:
–
–
–
–
–
–
networking,
multithreading,
manipolazione di immagini,
compressione dei dati,
connessione a basi di dati,
…
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 19
Efficienza e persistenza
• Una volta caricata nella memoria del server,
una servlet vi rimane come istanza di un
oggetto. Ogni successiva chiamata alla
servlet è quindi servita in modo immediato.
• La permanenza in memoria come istanza di
un oggetto permette ad una servlet di
mantenere uno stato.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 20
Sicurezza
• Le servlet ereditano la “type safety”
safety e meccanismi
come il “garbage collector”
collector direttamente dal
linguaggio Java.
• La mancanza dei puntatori in Java esclude
problemi legati alla gestione esplicita della
memoria (e.g., memory leak).
• Il meccanismo delle eccezioni protegge il server
dagli errori a run-time (e.g., divisioni per zero).
• Il Java security manager consente di ottenere un
ulteriore livello di sicurezza.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 21
Eleganza
• La pulizia e modularità del codice delle
servlet deriva direttamente dall’API delle
servlet stessa.
• Infatti l’API contiene molte classi utili per il
trattamento dei cookie, della sessione ecc.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 22
Integrazione
• A differenza degli script CGI, le servlet
sono strettamente integrate con il server.
• Ciò consente di utilizzare il server per
compiti come i seguenti:
–
–
–
–
convertire i percorsi dei file,
effettuare dei log,
controllare le autorizzazioni d’accesso,
…
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 23
Estendibilità e flessibilità
• L’API delle servlet è stata progettata per essere
facilmente estesa con nuove funzionalità.
• Inoltre, le servlet sono flessibili:
– possono generare una pagina web completa,
– possono essere incluse in una pagina statica con il tag
<SERVLET> (server-side include),
– la tecnologia Java Server Pages consente di inserire dei
frammenti di codice delle servlet direttamente in una
pagina statica (come in ASP o PHP).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 24
Servlet API
• Le servlet usano le classi e interfacce di due package:
– javax.servlet (servlet generiche indipendenti dal protocollo);
– javax.servlet.http (servlet specifiche per il protocollo
HTTP).
• Ogni servlet deve implementare l’interfaccia
javax.servlet.Servlet. Ciò solitamente avviene
estendendo:
– javax.servlet.GenericServlet (servlet generiche
indipendenti dal protocollo);
– javax.servlet.http.HttpServlet (servlet specifiche
per il protocollo HTTP).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 25
Servlet API
• Le servlet non hanno il metodo main().
• Il server invoca certi metodi specifici in risposta ad una
richiesta:
– service() viene chiamato ogni volta che una richiesta è
inoltrata ad una servlet.
• Una servlet generica deve quindi fare un overriding del
metodo service().
• Una servlet HTTP invece esegue l’overriding dei metodi
doGet() e doPost(). Il metodo service() in questo caso
coordina l’inoltro delle richieste ai due metodi precedenti e
non deve quindi essere modificato.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 26
La prima servlet: Ciao, mondo!
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CiaoMondo extends HttpServlet {
public void doGet(
doGet HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML "+
"1.1//EN\" \"http://www.w3c.org/TR/xhtml1/DTD/xhtml11.dtd\">");
out.println("<html xmlns=\"http://www.w3.org/1999/XHTML\""+
"xml:lang=\"it\" lang=\"it\">");
out.println("<head><title>Ciao, mondo!</title></head>");
out.println("<body>");
out.println("<strong>Ciao, mondo!</strong>");
out.println("</body></html>");
}
}
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 27
TheServlet:
“input/output”
classes
input/output
HttpServletRequest
Servlet
HttpServletResponse
(Java program)
L'interfaccia con il protocollo HTTP è rappresentata dalle classi
HttpServletRequest (input) e HttpServletResponse (output).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 28
Tomcat
• Il servlet engine che useremo sarà Tomcat:
http://tomcat.apache.org/
• Installato su latoserver.dimi.uniud.it sulla
porta 8080:
http://latoserver.dimi.uniud.it:8080
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 29
Tomcat
• E’ uno dei servlet engine più diffusi.
• Può funzionare sia come prodotto stand-alone, sia come
modulo del web server Apache.
• Disponibile gratuitamente (per molti sistemi operativi
tra cui Linux, Windows, Mac OS X) dal sito:
http://tomcat.apache.org/
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 30
Tomcat - funzionamento
• Rimane in attesa di richieste HTTP su una porta
(default: 8080).
• Quando riceve la prima richiesta di una servlet,
crea un’istanza della classe corrispondente.
• Inoltre ad ogni richiesta (compresa la prima) crea
un thread che invoca il metodo appropriato della
servlet per gestire la richiesta HTTP.
• L’istanza della classe viene eliminata in
corrispondenza agli eventi di Stop,
Stop Reload,
Undeploy,
Undeploy Shutdown di Tomcat.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 31
Tomcat –
Installazione in Windows
• Scaricare dalla sezione Downloads di tomcat.apache.org
il file .exe dell’ultima versione di Tomcat (e.g., apachetomcat-7.0.22.exe).
• Lanciare l’applicazione e seguire passo per passo il wizard.
• N.B.: per motivi di sicurezza, non installare Tomcat con
l’account Administrator (o con un account con privilegi di
amministratore).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 32
Tomcat –
Installazione in Linux (I)
• Scaricare dalla sezione Downloads di tomcat.apache.org il
file .tar.gz dell’ultima versione (binary distribution) di Tomcat
(e.g., apache-tomcat-7.0.22.tar.gz).
• Decomprimerlo in una directory con il comando tar (e.g.,
tar –zxvf apache-tomcat-7.0.22.tar.gz).
• Avviare tomcat tramite lo script startup.sh presente nella
sottodirectory bin della directory principale.
• N.B.: per motivi di sicurezza, non installare Tomcat usando
l’account root, ma creare un utente apposito (e.g., tomcat) e
installare il software nella sua home directory.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 33
Tomcat –
Installazione in Linux (II)
• Dopo aver effettuato il login come root:
useradd tomcat
# crea l’utente tomcat
passwd tomcat
# cambia la password
su tomcat
# switch user
# scaricare il .tar.gz nella home di tomcat
# spostarsi nella home e decomprimere
cd; tar -zxvf apache-tomcat-7.0.22.tar.gz
# avviare Tomcat
apache-tomcat-7.0.22/bin/startup.sh
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 34
Deployment su Tomcat
• Compilare la servlet, ricordandosi di includere nel
classpath (tramite la variabile d’ambiente CLASSPATH
oppure l’opzione –classpath di javac) l’archivio
servlet-api.jar (o servlet.jar) presente nella directory
($CATALINA_HOME è la directory root dell’installazione di
Tomcat):
$CATALINA_HOME/lib ($CATALINA_HOME/common/lib)
• Scrivere il deployment descriptor file web.xml.
• Copiare i file sul server.
• Fermare e riavviare il servizio.
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 35
Deployment su Tomcat
(installazione tipica)
$CATALINA_HOME/webapps
test
WEB-INF
web.xml
classes/
CiaoMondo.class
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 36
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>PrimoTest</servlet-name>
<servlet-class>CiaoMondo</servlet-class>
</servlet>
Il nome deve
corrispondere
<servlet-mapping>
<servlet-name>PrimoTest</servlet-name>
<url-pattern>/servlet/Primo</url-pattern>
</servlet-mapping>
</web-app>
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 37
Deployment su
latoserver.dimi.uniud.it (I)
• Ogni utente nella propria home directory (/home/<nome
utente>) ha una sottodirectory servlets:
drwxr-x--T 2 <nome utente> tomcat 4096 2006-10-10
11:42 servlets
• Tale directory va usata per rendere disponibili le proprie
servlet a Tomcat, copiandovi i relativi file .class e il file
web.xml.
• Se non esistono, creare le directory WEB-INF e WEBINF/classes:
cd ~/servlets; mkdir WEB-INF; mkdir WEB-INF/classes
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 38
Deployment su
latoserver.dimi.uniud.it (II)
/home/<nome utente>
servlets
WEB-INF
web.xml
classes/
CiaoMondo.class
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 39
Deployment su
latoserver.dimi.uniud.it (III)
• Compilare la servlet (dalla directory in cui si è creato il sorgente):
javac CiaoMondo.java
oppure, se la variabile d’ambiente CLASSPATH non è definita
correttamente:
javac –classpath /home/tomcat5/apache-tomcat5.5.20/common/lib/servlet-api.jar CiaoMondo.java
• Spostare il file CiaoMondo.class in ~/servlets/WEBINF/classes con il comando
mv CiaoMondo.class ~/servlets/WEB-INF/classes
• Creare (o copiare) il file web.xml in ~/servlets/WEB-INF
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 40
Deployment su
latoserver.dimi.uniud.it (IV)
• Accedere a http://latoserver.dimi.uniud.it:8080 e
cliccare sul link “Tomcat Manager” (autenticandosi con
user e password forniti a lezione):
Tomcat Manager
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 41
Deployment su
latoserver.dimi.uniud.it (V)
• Fra le varie applicazioni gestite dal Tomcat Manager,
individuare quella relativa al proprio nome utente, fare
clic su
– Stop e poi su Start
– oppure su Reload
– (importante: non cliccare Undeploy e non interferire con
le applicazioni degli altri utenti).
• Accedere alla servlet:
http://latoserver.dimi.uniud.it:8080/<nome utente>/servlet/Primo
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 42
Link utili
• Documentazione dell’API delle servlet (javadoc):
http://download.oracle.com/javaee/6/api/javax/servlet/packagesummary.html
• Specifica delle JSP:
http://java.sun.com/products/jsp/reference/api/index.html
• Documentazione in formato HTMLHelp:
http://www.allimant.org/javadoc/index.php
Gli utenti Linux/Mac devono installare un visualizzatore di file
CHM come chmsee (esistono anche plug-in di Firefox a tal
scopo).
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 43
Scarica