Svantaggi delle servlet

Documenti analoghi
Java Server Pages. Corso di Applicazioni Telematiche. A.A Lezione n.18 Prof. Roberto Canonico

Tener traccia del client

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

Gestire le sessioni con le Servlet

Architetture Web: un ripasso

Laboratorio di reti II: Java Server Pages

Architetture Web I Server Web e gli Standard della Comunicazione

Tomcat & Servlet. Contenuti. Programmazione in Ambienti Distribuiti. Tomcat Applicazioni Web. Servlet JSP Uso delle sessioni

JavaServer Pages: Introduzione

Programmazione server-side: Java Servlet

Introduzione al linguaggio Java: Servlet e JSP

Note pratiche sullo sviluppo di servlet (I)

Laboratorio di Basi di Dati

Tomcat. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2004/05-1

Laboratorio di sistemi Prima Web Application JSP [Java]

Esempio di esecuzione di una pagina JSP: Il client chiede la pagina: sdfonline.unimc.it/info/modulo.jsp;

Servlet API. Programmazione in Ambienti Distribuiti A.A

Tomcat struttura delle directory

Osservazioni. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-1

Applicazioni web. Parte 2 JSP. Michele Tomaiuolo tomamic@ce.unipr.it

Visualizzazione ordini in MyShopDB

Introduzione alla programmazione Http lato server in Java

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

1 JSPDynPage, componenti portale e Java Server Pages

Server-side Programming: Java servlets Parte II

Architetture Web parte 2

CORSO DI PROGRAMMAZIONE JAVA

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet e Web Server. Richieste. Servlet. Servlet:

JSP - Caso di studio 1 Una galleria di immagini

Laboratorio di Sistemi Prototipo autenticazione utente Jsp [Java]

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Tecnologie di Sviluppo per il Web

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Strutture di accesso ai dati

Architettura MVC-2 A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

Come funziona internet

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

Corso di PHP. Prerequisiti. 1 - Introduzione

SERVLET & JSP DISPENSE

Laboratorio di reti II: Servlet

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Il Web, HTML e Java Corso di Laurea in Ingegneria Informatica Progetto S.C.E.L.T.E.

Siti interattivi e dinamici. in poche pagine

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Realizzazione di una classe con un associazione

UNIVERSITÀ DEGLI STUDI DI PARMA REALIZZAZIONE DI UNO STRUMENTO PER LA GESTIONE DI BASI DI DATI IN APPLICAZIONI WEB

Esercitazione 8. Basi di dati e web

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

XML e PHP. Gestire XML con PHP. Appendice

Flavio De Paoli

Esercizi della lezione 5 di Java

Internet Architettura del www

19. LA PROGRAMMAZIONE LATO SERVER

Architettura MVC-2: i JavaBeans

PHP e Structured Query Language

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Informatica A per Ingegneria Gestionale ( ) Il linguaggio HTML. Elisa Quintarelli-Laura Mandelli. HyperText Markup Language

APPENDICE A Servlet e Java Server Page

Grafico della parabola

Introduzione a Dev-C++

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

Corso di Informatica Modulo T3 B2 - Database in rete

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda)

Javascript. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A lezione 14 -

Lezione III: Oggetti ASP e interazione tramite form HTML

Web Programming Specifiche dei progetti

Guida all uso delle Web View su ios

Portal e Portlet ClassLoader. Mancini Marco

Database & WWW. Basi di dati Architetture e linee di evoluzione P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Tecnologie per il Web. Il web: Architettura HTTP HTTP. SSL: Secure Socket Layer

Client - Server. Client Web: il BROWSER

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition

Transcript:

Svantaggi delle servlet Le servlet sono la tecnologia principale di J2EE per comunicare con i browser dei client. Tuttavia ci sono degli inconvenienti per gli sviluppatori di applicazioni web: le servlet mescolano la logica con la presentazione; è scomodo dover inglobare il codice HTML nel codice Java per mezzo di println (soprattutto se il codice HTML è complesso); il rapid prototyping non è possibile: ogni modifica richiede una ricompilazione esplicita e/o il cambiamento del file web.xml con il riavvio dell applicazione o del server. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-1

Java Server Pages (JSP) JSP è una tecnologia basata sull API delle servlet che permette di fornire contenuti dinamici inserendo dei tag appositi in documenti HTML (template). Il funzionamento di una pagina JSP è quindi analogo a quello di una pagina PHP: vi sono dei tag immersi nell HTML; un programma preprocessore elabora la risorsa (quando viene richiesta da un client) rimpiazzando i tag con codice HTML; la pagina risultante viene spedita al browser del client. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-2

JSP vs. PHP In realtà vi sono alcune differenze significative fra JSP e PHP: i tag di una pagina JSP contengono codice Java (con le stesse potenzialità del codice di una servlet); una pagina JSP non è interpretata: alla prima richiesta, viene tradotta in una servlet, compilata e caricata in memoria centrale; le richieste successive vengono gestite dalla servlet; in caso di modifiche alla pagina JSP, il server se ne accorge e ritraduce/ricompila la pagina; il server deve avere a disposizione il compilatore java (javac): non basta il JRE! Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-3

Funzionamento di JSP Prima richiesta Compilatore JSP Servlet generata Server Seconda richiesta Terza richiesta Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-4

La filosofia alla base di JSP Il passaggio dalla programmazione di servlet a quella di pagine JSP dovrebbe essere naturale. Il programmatore JSP pensa come il programmatore PHP ( frammenti di codice immersi nell HTML); è consapevole che il tutto sarà trasformato in una servlet equivalente; può utilizzare la servlet generata per il debugging. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-5

La prima JSP Scriviamo una semplice JSP che visualizzi la data e ora correnti: <html> <body> La data corrente è <%= new java.util.date().tostring() %> </body> </html> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-6

Dove salvare i file JSP Il codice precedente può essere memorizzato in un file Data.jsp nella directory radice di una web application (e.g., /home/<nome-utente>/servlets). URL: http://latoserver.dimi.uniud.it:8080/users /<nome-utente>/data.jsp. La servlet generata da Tomcat viene salvata in $TOMCAT_HOME/work/Catalina/localhost/<nome -utente>/org/apache/jsp: Data_jsp.java Data_jsp.class Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-7

La servlet generata da Tomcat (I) package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class Data_jsp extends org.apache.jasper.runtime.httpjspbase implements org.apache.jasper.runtime.jspsourcedependent {... public void _jspservice(httpservletrequest request, HttpServletResponse response) throws java.io.ioexception, ServletException { JspFactory _jspxfactory = null; PageContext pagecontext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this;... Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-8

La servlet generata da Tomcat (II)... try { _jspxfactory = JspFactory.getDefaultFactory(); response.setcontenttype("text/html"); pagecontext = _jspxfactory.getpagecontext(this, request, response, null, true, 8192, true);... application = pagecontext.getservletcontext(); config = pagecontext.getservletconfig(); session = pagecontext.getsession(); out = pagecontext.getout();... out.write("\r\n"); out.write(" <html>\r\n"); out.write(" <body>\r\n"); out.write(" La data corrente è \r\n"); out.write(" "); out.print( new java.util.date().tostring() ); Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-9

La servlet generata da Tomcat (III) } } out.write("\r\n"); out.write(" </body>\r\n"); out.write(" </html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out!= null && out.getbuffersize()!= 0) out.clearbuffer(); if (_jspx_page_context!= null) _jspx_page_context.handlepageexception(t); } } finally { if (_jspxfactory!= null) _jspxfactory.releasepagecontext(_jspx_page_context); } Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-10

Una variante Si noti la presenza della direttiva page: <%@ page import="java.util.date"%> <html> <body> La data corrente è <%= new Date().toString() %> </body> </html> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-11

Tipi di tag JSP Sintassi: <% %> o <jsp: > Si dividono in tre categorie: 1. Direttive (directives) <%@ %> 2. Elementi di script (scripting elements) <%! %> <%= %> <% %> 3. Azioni standard, predefinite (standard, builtin actions) <jsp: > Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-12

Tipi di tag JSP: direttive Le direttive JSP influenzano la struttura della servlet generata dalla pagina JSP. Sintassi: <%@ nomedirettiva attributo= valore %>. Tipi di direttive: page (controlla la servlet, importando classi, definendo il content type ecc.); include (permette di inserire dei file nella pagina JSP); taglib (permette al programmatore di definire dei tag custom). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-13

Tipi di tag JSP: scripting element Espressioni della forma <%= espressione %>, che vengono valutate ed il valore risultante finisce nell output generato dalla servlet. Scriptlet della forma <% codice %>, che vengono inseriti nel metodo _jspservice (chiamato da service). Dichiarazioni della forma <%! dichiarazione%>, che vengono inserite nel corpo della classe della servlet generata (esternamente ad ogni metodo). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-14

Tipi di tag JSP: azioni standard Solitamente nello sviluppo di web application vi sono due figure: designer HTML, programmatore. Lo scopo delle azioni standard è quello di permettere ai designer HTML di scrivere pagine JSP senza dover scrivere codice Java. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-15

Tipi di tag JSP: azioni standard Un tipico esempio di azione standard sono i tag che riguardano gli Enterprise Java Bean: <jsp:usebean id="name" class="package.class" /> <jsp:setproperty> <jsp:getproperty> Altre azioni standard: <jsp:include> <jsp:forward> <jsp:plugin> <jsp:param> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-16

La direttiva page Sintassi: <%@ page attributo= valore %> Attributi di page: import: permette di importare i package specificati alla servlet generata; contenttype: indica il tipo MIME del contenuto inviato al browser; isthreadsafe: determina se la servlet risultante implementi o meno SingleThreadModel; session: determina se alla pagina JSP debba essere associata una sessione; buffer: dimensione del buffer da usare per l output; autoflush: indica se il buffer di output debba essere automaticamente svuotato una volta pieno oppure debba essere generata un eccezione; extends: indica la superclasse della servlet che verrà generata; info: definisce una stringa che può essere recuperata tramite getservletinfo(); errorpage: specifica una pagina JSP (tramite un URL) che gestisca le eccezioni; iserrorpage: indica se la pagina può fungere da pagina di errore per un altra JSP; language: al momento Java è l unica possibilità. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-17

La direttiva include Sintassi: <%@ include file= nomefile %> E possibile includere sia file statici (HTML) che altre JSP. Anche se l inclusione avviene a tempo di compilazione, nel caso si includa un file.jsp, viene incluso il codice non l HTML generato. Questa direttiva è utile per gestire in file separati, le parti di un applicazione web che restano fisse (menu, banner ecc.). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-18

Esempio di include La seguente JSP include il file della nostra pagina JSP precedente: <html> <body> <p>questa JSP include un'altra JSP. Inizio inclusione: <%@ include file="data.jsp jsp"%> Fine inclusione.</p> </body> </html> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-19

Dichiarazioni Sintassi: <%! dichiarazioni di variabili e metodi%> Gli elementi dichiarati in uno scripting element <%! %> sono disponibili nel resto della JSP. Le dichiarazioni non generano alcun flusso di output. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-20

Scriptlet Sintassi: <% Blocco di codice da eseguire %> Il blocco di codice specificato viene eseguito ad ogni richiesta della servlet. Infatti esso verrà inserito all interno del metodo service() della servlet corrispondentemente generata (più precisamente all interno del metodo _jspservice(), richiamato da service()). Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-21

Oggetti impliciti Il codice all interno di uno scriptlet (<% %>) finirà dentro il metodo service di una servlet. Quindi avremo a disposizione i seguenti oggetti: out (PrintWriter) request (HttpServletRequest) response (HttpServletResponse) config (ServletConfig) application (ServletContext) session (HttpSession) Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-22

Esempio: un contatore di accessi <html> <body> <%! int x = 0; int inc(int int x) {return x+1;} %> <% x = inc(x); %> <p>numero di accessi: : <%= x %> </p> </body> </html> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-23

Contatore con sessione <html> <body> <% Integer x = new Integer(1); if(session.isnew()) session.putvalue("contatore", x); else { x=(integer)session.getvalue("contatore"); if(x == null) session.putvalue("contatore", new Integer(1)); else session.putvalue("contatore", new Integer(x.intValue()+1)); } %> <p>numero di accessi: <%= x.intvalue() %> </p> </body> </html> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-24

Esempio: form e parametri (I) <% String nome = request.getparameter("nome"); %> <HTML> <HEAD> <TITLE> <% if(request.getparameter("invio")!= null) { %> Ciao, <%= nome.equals("")? "Sconosciuto" : nome %>! <% } else { %> Form <% } %> </TITLE> </HEAD> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-25

Esempio: form e parametri (II) <BODY> <% if(request.getparameter("invio")!= null) { %> Ciao, <%= nome.equals("")? "Sconosciuto" : nome %>! <% } else { %> <FORM METHOD="post" ACTION="Ciao.jsp"> Qual è il tuo nome? <INPUT TYPE="text" NAME="nome"> <P> <INPUT TYPE="submit" NAME="invio" VALUE="Invia >>"> </FORM> <% } %> </BODY> </HTML> Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-26

Esercizio Provare a riscrivere come pagina JSP l esempio della servlet Bilancio della lezione 4. Per implementare la thread safety provare sia con il metodo synchronized che con la direttiva <%@ page isthreadsafe= false %>. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-27