Sviluppo di Applicazioni Web con Java 2 Enterprise Editionivan.scagnetto/lato_server/J2EE1.pdf ·...

43
Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 1 Sviluppo di Applicazioni Web con Java 2 Enterprise Edition Ivan Scagnetto Dipartimento di Matematica e Informatica http://www.dimi.uniud.it/scagnett [email protected]

Transcript of Sviluppo di Applicazioni Web con Java 2 Enterprise Editionivan.scagnetto/lato_server/J2EE1.pdf ·...

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 1

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 - 2

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 - 3

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 - 4

Bibliografia

• Vincenzo Della Mea, Luca Di Gaspero, and Ivan Scagnetto. Programmazione Web Lato Server (2Programmazione Web Lato Server (2aa ed.) ed.). Apogeo, 2010 (Cap. (Cap. 4 e 5 per quanto riguarda questa parte su J2EE)4 e 5 per quanto riguarda questa parte su 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 Professional Java Server Programming J2EE: 1.3 Edition (Programmer to 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 NutshellJava Enterprise in a Nutshell. O’Reilly, 2005.

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 5

• Introduzione– Applicazioni Web

• Java 2 Enterprise Edition (cap. 5 di PWLS)– Tomcat– Servlet– Sintassi ed esempi

• Link utili

Sommario

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 6

Applicazioni Web(Web Application)

• Sono applicazioni utilizzabili mediante il web browser: (X)HTML(X)HTML sostituisce la classica GUIGUI.

• 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 - 7

• 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.

Vantaggi delle applicazioni Web

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 8

Java 2 Enterprise Edition

• J2EE è una versione particolare dell’ambiente di sviluppo Java mirata allo sviluppo di applicazioni distribuiteapplicazioni distribuite (≡ enterpriseenterprise).

• 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 - 9

• Focalizzeremo la nostra attenzione su:– ServletServlet,– JSPJSP (Java Server Pages),– JDBCJDBC (Java Database Connectivity).

Java 2 Enterprise Edition

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 10

• Java Servlet: concetti fondamentali• L’API delle servlet• Esempio: la prima servlet• Tomcat (installazione e primo utilizzo)

Java Servlet

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 11

Java Servlet

• Una Java servlet è un’estensione del serverestensione del 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 richiedononon richiedono alcun supporto per Java nel web browser.

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 12

Vantaggi delle Servlet

• Tutte le richieste alle servlet vengono implementate come thread distinti all’interno dello stesso processo: ne derivano efficienzaefficienza e scalabilitàscalabilità.

• Le servlet sono portabiliportabili:– 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, add-on ecc.).

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 13

Java Servlet e Web Server

Servlet A

Servlet B

Servlet C

JVM

Web serv er con Ja va S

e rvle t

Richiesta Servlet B

Richiesta Servlet B

Richiesta Servlet A

thread

threa

d

thread

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 14

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 - 15

Tipologie di Server Engine

• Standalone Server EngineStandalone Server Engine: si tratta di un server che fornisce un supporto nativo per le Java Servlet.

• Add-on Servlet EngineAdd-on Servlet Engine: questa tipologia consiste in plug-in che aggiungono il supporto alle servlet per server esistenti e privi di tale supporto.

• Embeddable server engineEmbeddable server 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 - 16

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 - 17

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 - 18

Portabilità

• Essendo scritte in Java e basandosi su un’API standard, le servlet sono altamente portabili fra diversi sistemi operativi e diversi server: “write write once, serve everywhereonce, serve 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 - 19

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 - 20

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 - 21

Sicurezza

• Le servlet ereditano la “type safetytype safety” e meccanismi come il “garbage collectorgarbage collector” direttamente dal linguaggio Java.

• La mancanza dei puntatorimancanza dei puntatori in Java esclude problemi legati alla gestione esplicita della memoria (e.g., memory leak).

• Il meccanismo delle eccezionieccezioni protegge il server dagli errori a run-time (e.g., divisioni per zero).

• Il Java security managerJava 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 - 22

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 - 23

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 - 24

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 - 25

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 - 26

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 - 27

La prima servlet: Ciao, mondo!import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class CiaoMondo extends HttpServletHttpServlet {public void doGetdoGet(HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html");res.setContentType("text/html");PrintWriter out = res.getWriter();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 - 28

The “input/output” classes

Servlet

(Java program)HttpServletRequest HttpServletResponse

L'interfaccia con il protocollo HTTP è rappresentata dalle classi HttpServletRequest (input) e HttpServletResponse (output).

Servlet: input/output

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 29

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 - 30

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 - 31

Tomcat - funzionamento

• Rimane in attesa di richieste HTTPattesa di richieste HTTP su una porta (default: 8080).

• Quando riceve la prima richiesta di una servlet, crea un’istanza della classeistanza della classe corrispondente.

• Inoltre ad ogni richiesta (compresa la prima) crea un threadthread che invoca il metodo appropriato della servlet per gestire la richiesta HTTP.

• L’istanza della classe viene eliminata in corrispondenza agli eventi di StopStop, Reload, UndeployUndeploy, Shutdown di Tomcat.

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 32

Tomcat – Installazione in Windows

• Scaricare dalla sezione Downloads di tomcat.apache.org il file .exe dell’ultima versione di Tomcat (e.g., apache-tomcat-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 - 33

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 - 34

Tomcat –Installazione in Linux (II)

• Dopo aver effettuato il login come root:useradd tomcat # crea l’utente tomcatpasswd tomcat # cambia la passwordsu tomcat # switch user# scaricare il .tar.gz nella home di tomcat# spostarsi nella home e decomprimerecd; tar -zxvf apache-tomcat-7.0.22.tar.gz

# avviare Tomcatapache-tomcat-7.0.22/bin/startup.sh

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 35

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 - 36

Deployment su Tomcat(installazione tipica)

test

WEB-INF

web.xml

classes/

CiaoMondo.class

$CATALINA_HOME/webapps

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 37

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>

<servlet-mapping> <servlet-name>PrimoTest</servlet-name> <url-pattern>/servlet/Primo</url-pattern> </servlet-mapping></web-app>

Il nome devecorrispondere

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 38

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 WEB-INF/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 - 39

Deployment su latoserver.dimi.uniud.it (II)

servlets

WEB-INF

web.xml

classes/

CiaoMondo.class

/home/<nome utente>

Complementi di Tecnologie Web – M. Franceschet, V.Della Mea e I.Scagnetto, a.a. 2011/12 - 40

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-tomcat-5.5.20/common/lib/servlet-api.jar CiaoMondo.java

• Spostare il file CiaoMondo.class in ~/servlets/WEB-INF/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 - 41

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 - 42

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 - 43

Link utili

• Documentazione dell’API delle servlet (javadoc):

http://download.oracle.com/javaee/6/api/javax/servlet/package-summary.html

• Specifica delle JSP:

http://java.sun.com/products/jsp/reference/api/index.html

• Documentazione in formato HTMLHelp:

http://www.allimant.org/javadoc/index.phpGli utenti Linux/Mac devono installare un visualizzatore di file CHM come chmsee (esistono anche plug-in di Firefox a tal scopo).