Università di Bergamo Facoltà di Ingegneria Applicazioni Internet B Paolo Salvaneschi B6_1 V1.7 JSP parte A Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio personale e per supporto a lezioni universitarie. Ogni altro uso è riservato, e deve essere preventivamente autorizzato dall’ autore. Sono graditi commenti o suggerimenti per il miglioramento del materiale B6 JSP Paolo Salvaneschi 1 INDICE • • • • Java Server Pages Installazione di Tomcat Struttura directory Tomcat Creazione e installazione di una applicazione JSP • JSP Overview • Sintassi degli elementi JSP B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 2 2 Java Server Pages Server Server Client Application Server Data base Sistema Informativo JSP H T T P D Microsoft Internet Explorer Netscape Navigator Tomcat B6 JSP B6 JSP HTTP HTML CSS JavaScript Paolo Salvaneschi Paolo Salvaneschi 3 3 Java Server Pages • Java Server Pages (JSP) – Pagina di testo HTML che include codice java – Pagina dinamica che è eseguita lato server e restituisce HTML al client B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 4 4 Installazione di Tomcat • INSTALLAZIONE TOMCAT • Versioni: Java j2sdk1.4.1_01 (con compilatore, non versione re solo runtime) Tomcat 4.1.30 JSTL 1.0 (jakarta-taglibs-standard-1.0.5.zip) B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 5 5 Installazione di Tomcat • INSTALLAZIONE TOMCAT • Installazione di java sdk nella cartella C:\j2sdk1.4.1_01 • Download dal sito http://www.apache.inetcosmos.org di jakarta-tomcat-4.1.30.exe • Definizione delle variabili di ambiente • JAVA_HOME • CATALINA_HOME B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 6 6 Installazione di Tomcat (es: Windows 2000-XP) : Pannello di controllo-Sistema Avanzate -Variabili ambiente CATALINA_HOME C:\Apache Group\Tomcat 4.1 JAVA_HOME C:\Programmi\j2sdk1.4.1_01\bin B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 7 7 Installazione di Tomcat • Installazione di Tomcat nella cartella C:\Apache Group\Tomcat 4.1 – HTTP/1.1 Connector Port: 8080 – User:admin – Passw: nessuna B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 8 8 Installazione di Tomcat • AVVIO TOMCAT • Start TOMCAT • Al termine delle attività: stop TOMCAT B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 9 9 Installazione di Tomcat • UTILIZZO TOMCAT • http://localhost:8080/ • http://127.0.0.1:8080/ • Esegue il file: index.jsp con il path completo (percorso di contesto): %CATALINA_HOME%/webapps/ROOT/index.jsp Cartella di default per le applicazioni Web servite da Tomcat B6 JSP B6 JSP Applicazione di default Paolo Salvaneschi Paolo Salvaneschi 10 10 Installazione di Tomcat B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 11 11 Installazione di Tomcat • Amministrazione di TOMCAT: http://localhost:8080/admin • Definizione e gestione utenti • ………. B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 12 12 Installazione di Tomcat • Amministrazione di TOMCAT: http://localhost:8080/manager • Es: lista applicazioni installate e gestione relativa • Installazione di nuove applicazioni B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 13 13 Installazione di Tomcat B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 14 14 Struttura directory Tomcat Applicazione servita da Tomcat B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 15 15 Struttura directory Tomcat • Script per avvio e interruzione del server Tomcat ...\Tomcat-4.1\bin • Files di configurazione del server ...\Tomcat-4.1\conf • Files di log del server ...\Tomcat-4.1 \logs • Cartella di default per le applicazioni Web servite da Tomcat ...\Tomcat-4.1 \webapps • Files temporanei (qui sono salvate le servlet generate dalle pagine JSP) ...\Tomcat-4.1 \work B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 16 16 Struttura directory Tomcat • Applicazioni Web servite da Tomcat • Container – Metodo standard di installazione e packaging delle risorse che compongono un’applicazione (pagine JSP, pagine statiche, classi java,…). Files disposti in una gerarchia definita all’interno di un archivio WAR (Web archive) – Archivio .jar (.zip) – Cartella di file system B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 17 17 Struttura directory Tomcat – Descrittore dell’installazione (file XML) – Contesto servlet associato ad un context path utilizzato per raggiungere l’applicazione a cui inviare le richieste B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 18 18 Creazione e installazione di una applicazione JSP Applicazione servita da Tomcat B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 19 19 Creazione e installazione di una applicazione JSP index.jsp <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <H1>Esempio 1</H1> <%= Espressione %> Utilizzate per aggiungere alla risposta http il risultato dell’esecuzione di un’espressione di scripting <P><%= "pippo" + ", pluto" %> </P> <IMG SRC="citta.gif" WIDTH="100" HEIGHT="100" BORDER="0" ALT=""> <HR> </BODY> </HTML> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 20 20 Creazione e installazione di una applicazione JSP http://localhost:8080/Esempio_1 Testo HTML generato <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <H1>Esempio 1</H1> <P>pippo, pluto </P> <IMG SRC="citta.gif" WIDTH="100" HEIGHT="100" BORDER="0" ALT=""> <HR> </BODY> </HTML> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 21 21 Creazione e installazione di una applicazione JSP Descrittore dell’installazione <?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> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> </web-app> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 22 22 Creazione e installazione di una applicazione JSP http://localhost:8080/Esempio_1 Context path Regole di mappatura %CATALINA_HOME%\webapps\Esempio_1\index.jsp C:\Apache Group\ Tomcat 4.1\webapps\Esempio_1\index.jsp B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 23 23 Creazione e installazione di una applicazione JSP • Installazione di una nuova applicazione – Costruire l’applicazione (archivio) – Copiare in /webapps – Stop Tomcat – Start Tomcat B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 24 24 JSP Overview • Servlet – Oggetti Java particolari che sono caricati ed eseguiti dal web server (application server) che li utilizza come proprie estensioni. – Il server mette a disposizione delle Servlet un “container” che si occupa della gestione dell’ambiente all’interno delle quali le servlet girano. – Il “container” passa i dati dal client verso le servlet e viceversa (via protocollo http). B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 25 25 JSP Overview • Ciclo di vita di una Servlet – Una servlet è caricata e inizializzata dal web server al momento della prima richiesta http da parte di un client o al momento dell’avvio del servizio. – All’inizializzazione la servlet può, se il caso, aprire una connessione con un DataBase (connessione che resta aperta per servire più richieste del client). B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 26 26 JSP Overview • Ciclo di vita di una Servlet – La servlet esegue le richieste del client. Per ogni richiesta è creato un thread – La servlet rilascia le risorse ed è distrutta B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 27 27 JSP Overview • Elaborazione della pagina JSP Il server utilizza la pagina JSP come una servlet. Al momento del primo accesso la pagina JSP è trasformata in un file Java e compilata ottenendo una classe Java che rappresenta una servlet che crea una pagina html e la invia al client. B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 28 28 JSP Overview <HTML> <HEAD></HEAD> <BODY> <H1>Esempio 2</H1> <HR> <% for(int i=0; i<10; i++) { if(i%2==0) { %> <h1>Pari</h1> <% } else { %> <h2>Dispari</h2> <% } Scriptlet } <% Frammento di codice %> %> Utilizzati per includere frammenti di <HR> codice nella pagina </BODY> </HTML> index.jsp B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 29 29 JSP Overview <HTML> <HEAD></HEAD> <BODY> <H1>Esempio 2</H1> <HR> <% for(int i=0; i<10; i++) { if(i%2==0) { %> <h1>Pari</h1> <% } else { %> <h2>Dispari</h2> <% } } %> http://localhost:8080/Esempio_2 <HR> </BODY> </HTML> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 30 30 JSP Overview <HTML> <HEAD></HEAD> <BODY> <H1>Esempio 2</H1> <HR> <h1>Pari</h1> <h2>Dispari</h2> <h1>Pari</h1> <h2>Dispari</h2> <h1>Pari</h1> <h2>Dispari</h2> <h1>Pari</h1> <h2>Dispari</h2> <h1>Pari</h1> <h2>Dispari</h2> <HR> </BODY> </HTML> B6 JSP B6 JSP Testo HTML generato Paolo Salvaneschi Paolo Salvaneschi 31 31 JSP Overview • Jsp è case-sensitive • Directories e nomi di files della web application sono case-sensitive Uno.htm … <IMG SRC="citta.gif"> … Due.htm … <IMG SRC=“Citta.gif"> … B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi Eseguiti sul file system di windows da Explorer utilizzano lo stesso file immagine Copiati in Webapps ed Eseguiti da Tomcat (con OS Windows) NON utilizzano lo stesso file immagine 32 32 JSP Overview • Pagina JSP • Testo template • Elementi JSP –Direttive –Elementi di scripting –Componenti JavaBean –Elementi di azione standard –Azioni personalizzate e JSTL B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 33 33 JSP Overview <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess" Direttive class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> Azioni <head><title>Number Guess</title></head> <body bgcolor="white"> Testo template <font size=4> <% if (numguess.getSuccess()) { %> Congratulations! You got it. And after just <%= numguess.getNumGuesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? Elementi di <% } else if (numguess.getNumGuesses() == 0) { %> scripting ………… B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 34 34 JSP Overview • Modi diversi di inserire il codice • Primo modo: –Elementi di scripting Codice java inserito nel testo • La pagina è realizzata da un programmatore java B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 35 35 JSP Overview • Modi diversi di inserire il codice • Modi ulteriori – Componenti JavaBean (Classi java con regole di codifica tali da poterle utilizzare in modo semplice) – Elementi di azione standard, Azioni personalizzate e JSTL (Tag specializzati) B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 36 36 JSP Overview • Motivazioni: • Motivazione gestionale: • separare il ruolo del programmatore (java, DB) dal costruttore di interfaccia (HTML) • Motivazioni tecniche: • Strumenti di sviluppo rapido • Vedi pattern Model View Controller B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 37 37 JSP Overview <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> <head><title>Number Guess</title></head> <body bgcolor="white"> <font size=4> Classi java esterne ………… Java Beans B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 38 38 JSP Overview <%@ page contentType="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>JSP is Easy</title> </head> <body bgcolor="white"> <h1>JSP is as easy as ...</h1> <%-- Calculate the sum of 1 + 2 + 3 dynamically --%> 1 + 2 + 3 = <c:out value="${1 + 2 + 3}" /> </body> </html> B6 JSP B6 JSP Elementi di azione personalizzate e JSTL Paolo Salvaneschi Paolo Salvaneschi 39 39 Sintassi degli elementi JSP • <%-- … • Direttive • Sintassi --%> Commento <%@nomeDirettiva attr1=“valore” attr2=“valore2 • Tipi di direttive <%@include <%@page <%@taglib B6 JSP B6 JSP … %> … %> … %> … %> Paolo Salvaneschi Paolo Salvaneschi 40 40 Sintassi degli elementi JSP • <%@include file=“Percorso” %> • Esegue l’inserimento del contenuto di un file nella pagina • Il nuovo testo è compilato B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 41 41 Sintassi degli elementi JSP • <%@page nome=“valore” … %> • Definisce gli attributi della pagina contentType=“tipo MIME per la risposta” errorPage=“percorso pagina a cui trasferire il controllo in caso di eccezione” import=“elenco classi o package java da importare” language=“linguaggio di scripting usato” session=“true” (default) se la pagina partecipa ad una sessione utente … B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 42 42 Sintassi degli elementi JSP • <%@taglib prefix=“Prefisso” uri=“taglibURI” %> • Dichiara una tag library utilizzata nella pagina che contiene azioni personalizzate (o JSTL) prefix prefisso da utilizzare nei nomi degli elementi di azione uri stringa utilizzata per localizzare l’implementazione della tag library B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 43 43 Sintassi degli elementi JSP • Elementi di scripting Consentono di aggiungere porzioni di codice alla pagina JSP • Tipi di elementi – Dichiarazioni – Espressioni – Scriptlet B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 44 44 Sintassi degli elementi JSP • Dichiarazioni <%! Dichiarazione %> Dichiara una variabile o un metodo <%! Int globalCounter = 0; %> • Espressioni <%= Espressione %> Utilizzate per aggiungere alla risposta http il risultato dell’esecuzione di un’espressione di scripting <%= globalCounter ++ %> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 45 45 Sintassi degli elementi JSP • Scriptlet <% Frammento di codice %> Utilizzati per includere frammenti di codice nella pagina Il linguaggio deve essere definito nella direttiva page (default java) B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 46 46 Sintassi degli elementi JSP <%@page language="java" contentType="text/html" %> <%! int globalCounter = 0; %> <HTML> <HEAD></HEAD> <BODY BGCOLOR="ffffcc"> <HR> <CENTER> <H2>Questa pagina è stata visitata (n. volte): <%= ++globalCounter %> </H2> ………………… Dichiarazione Elementi di scripting B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 47 47 Sintassi degli elementi JSP <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <H1>Esempio 1</H1> <P> <%= "pippo" + ", pluto" %> </P> <IMG SRC="citta.gif" WIDTH="100" HEIGHT="100" BORDER="0" ALT=""> <HR> </BODY> </HTML> Espressione Elementi di scripting B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 48 48 Sintassi degli elementi JSP <HTML> <HEAD> </HEAD> <BODY BGCOLOR="ffffcc"> <H1>Esempio 3</H1> Classe Date <HR> del package <CENTER> java.util <H2>Date and Time</H2> <% java.util.Date today = new java.util.Date(); out.println("Today's date is: "+today); %> </CENTER> <HR> </BODY> </HTML> Scriptlet Elementi di scripting B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 49 49 Sintassi degli elementi JSP <%@page import="java.util.*" %> <HTML> <HEAD> </HEAD> Import del <BODY BGCOLOR="ffffcc"> package <H1>Esempio 4</H1> java.util <HR> <CENTER> Classe Date <H2>Date and Time</H2> <% Date today = new Date(); out.println("Today's date is: "+today); %> </CENTER> <HR> </BODY> </HTML> Scriptlet Elementi di scripting B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 50 50 Sintassi degli elementi JSP <%@page import="java.util.*" %> <HTML> <HEAD> </HEAD> <BODY BGCOLOR="ffffcc"> <H1>Esempio 5</H1> <HR><CENTER> <H2>Saluto</H2> <% Date clock = new Date(); %> <% if ( clock.getHours() < 12 ) { %> <H2>Buongiorno!</H2> <% } else if ( clock.getHours() < 17 ) { %> <H2>Buon pomeriggio!</H2> <% } else { %> <H2>Buona sera!</H2> <% }%> </CENTER><HR> </BODY></HTML> Scriptlet Elementi di scripting B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 51 51 Sintassi degli elementi JSP • Componenti JavaBean • Un componente JavaBean è una classe java conforme a definite regole di codifica • Un insieme di elementi di azione standard <jsp: … > ne permette l’utilizzo • Sono utilizzati come contenitori che descrivono entità dell’applicazione (cliente, ordine,…) B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 52 52 Sintassi degli elementi JSP <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> <head><title>Number Guess</title></head> <body bgcolor="white"> <font size=4> Classi java esterne ………… B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 53 53 Sintassi degli elementi JSP • Elementi di azione standard Componenti invocati quando un client chiede la pagina JSP • Sintassi XML Esempio: <jsp:forward page=“nextPage.jsp”> <jsp:param name=“aParam” nvalue=“aValue”/> </jsp:forward> Tag iniziale con eventuali attributi, tag finale, annidamento B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 54 54 Sintassi degli elementi JSP • Notazione completa Tag iniziale <jsp:… > corpo Tag finale </jsp:… > • Notazione abbreviata se non c’è un corpo <jsp:… /> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 55 55 Sintassi degli elementi JSP • Elementi di azione standard <jsp:forward page=“nextPage.jsp”/> Trasferisce il controllo dell’elaborazione della richiesta http ad un’altra pagina <jsp:forward page=“nextPage.jsp”> <jsp:param> <jsp:param> …. </jsp:forward > Trasferisce il controllo dell’elaborazione della richiesta http ad un’altra pagina passando parametri supplementari B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 56 56 Sintassi degli elementi JSP • Elementi di azione standard <jsp:getProperty name=“nomeAssegnatoAlBean” property = “NomeProprietà” > Aggiunge il valore della proprietà di un Bean, convertito in una stringa, alla risposta generata dalla pagina <jsp:setProperty name=“nomeAssegnatoAlBean” property = “NomeProprietà” > Imposta il valore della proprietà di un Bean B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 57 57 Sintassi degli elementi JSP • Elementi di azione personalizzata – Specifica e ambiente di sviluppo per realizzare nuove azioni personalizzate (nuove tag library) • JSTL (Java Standard Tag Library) – Librerie predefinite di azioni <c: <x: <fmt: <sql: B6 JSP B6 JSP Core Elaborazione XML Formattazione e internazionalizzazione Accesso a database Paolo Salvaneschi Paolo Salvaneschi 58 58 Sintassi degli elementi JSP <%@ page contentType="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>JSP is Easy</title> </head> <body bgcolor="white"> <h1>JSP is as easy as ...</h1> <%-- Calculate the sum of 1 + 2 + 3 dynamically --%> 1 + 2 + 3 = <c:out value="${1 + 2 + 3}" /> </body> </html> B6 JSP B6 JSP Paolo Salvaneschi Paolo Salvaneschi 59 59