Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]



Documenti analoghi
Laboratorio di sistemi Prima Web Application JSP [Java]

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

Laboratorio di Sistemi Fondamenti di JSTL (parte 2) Java (JSTL)

Laboratorio di Sistemi Prototipo applicazione Biblioteca Jsp [Java]

Laboratorio di sistemi SELECT e checkbox Jsp [Java]

Laboratorio di Sistemi Autenticazione utente mediante MySQL Jsp [Java]

<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body>

Laboratorio di sistemi MVC versione 2 Jsp (NetBeans)

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

Guida all uso di Java Diagrammi ER

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

Laboratorio di Sistemi Fondamenti di JSTL (parte 1) Java (JSTL)

Laboratorio di Sistemi Prototipo autenticazione utente Jsp [Java]

Laboratorio di sistemi Web Application in Php5 Php

Trasformare una Java (Console) Application in una Web Application (con utilizzo di un database MySQL)

Corso su LINQ Lezione 16. Introduzione

1 JSPDynPage, componenti portale e Java Server Pages

Invio SMS. DM Board ICS Invio SMS

PHP: Professional Hypertext Preprocessor

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Laboratorio di Sistemi Autenticazione utente mediante MySQL Jsp [Java]

Le JavaServer Pages - Lezione 7 I JavaBean

Interazione con l utente : i moduli.

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

File, Modifica, Visualizza, Strumenti, Messaggio

Architettura MVC-2: i JavaBeans

Tale attività non è descritta in questa dispensa

Per effettuare la stampa di una cartella di lavoro si accede al comando. Stampa dal menu File o si utilizza il pulsante omonimo sulla barra

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Test di unità con JUnit4

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

MODULO 4: FOGLIO ELETTRONICO (EXCEL)

Programmazione a Oggetti Modulo B

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Introduzione al Model-View-Controller (MVC)

Introduzione a JSP (Java Server Pages) MC 2005

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

TUTORIAL DI DOCMAN RC2 PER UTILIZZATORI FINALI di

1 Applicazione J2EE sul SAP WAS con SAP NWDS

RELAZIONE TECNICA SUL SITO DELLA PALESTRA. Anno scolastico Alunno: Davide martinicca. Pagina 1

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Foglio di calcolo con Microsoft Excel 2003 III

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione n 4. Obiettivi

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

GB informazioni e freeware

Il calendario di Windows Vista

COME UTILIZZARE ARCHIVE-HOST

17 Gli scenari. cartelle di lavoro; unendoli poi in un

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

Versione 7.0 Taglie e Colori. Negozio Facile

Configurazione di Outlook Express

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

Funzioni in C. Violetta Lonati

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Codifica: dal diagramma a blocchi al linguaggio C++

10 - Programmare con gli Array

Realizzare il layout di un sito web senza utilizzare frame e tabelle

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

[Dimensionare la pagina-creare le tabelle-formattare le tabelle-formattare la pagina

L amministratore di dominio

Esercizio data base "Biblioteca"

Istruzioni di accesso alla propria casella di posta elettronica tramite Zimbra Web Mail

TUTORIAL PER UTILIZZO CATALOGO RICAMBI WEB

Un esercizio d esame. Flavio De Paoli

GUIDA. a cura di Maddalena Dal Degan. - Inserire un pulsante di scelta pag 2. - Analisi di un testo pag 4. - Testo cloze pag 6

Come costruire una presentazione. PowerPoint 1. ! PowerPoint permette la realizzazione di presentazioni video ipertestuali, animate e multimediali

Università di Bergamo Facoltà di Ingegneria. Applicazioni Internet B. Paolo Salvaneschi B6_1 V1.7. JSP parte A

Struttura logica di un programma

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at] .

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Office 2007 Lezione 09. Contenuto riutilizzabile

System Center Virtual Machine Manager Library Management

MICROSOFT OFFICE WORD 2010 STAMPA UNIONE

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Eclipse. Avviare un progetto e compilare un semplice programma

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

LABORATORIO DI MATEMATICA RENDITE, AMMORTAMENTI, LEASING CON EXCEL

Microsoft Excel. Il foglio elettronico Microsoft Excel Cartelle, Fogli di lavoro e celle Contenuto delle celle. Numeri, date, formule, testo, funzioni

La catalogazione con LIBERO Modulo Catalogazione

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Corso sul linguaggio Java

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

Tutorial 17. Come creare un cancello personalizzato e inserirlo in libreria

Progettazione : Design Pattern Creazionali

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Transcript:

Desideriamo realizzare una applicazione web che ci consenta di calcolare il fattoriale di un numero. L'esercizio in sé non particolarmente difficile, tuttavia esso ci consentirà di affrontare il problema da diversi punti di vista. Modalità 1) Realizziamo l'applicativo usando gli scriplet: Pagina index.jsp <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body> <h3>calcolo del fattoriale</h3> <form name="provafrm" action="${request.requesturi"> Dammi un numero intero <input type="text" name="numbertxt" value=""/> <input type="submit" name="inviabtn" value="invia"/> </form> <% // se è stato premuto il pulsante if (request.getparameter("inviabtn")!=null) { // acquisisco il valore stringa della casella testuale String numberstr = request.getparameter("numbertxt"); try { // converto la stringa in un numero intero "grande" long number = Long.parseLong(numberStr); // cambio il segno se il numero è negativo if (number < 0) number = -number; // trovo il fattoriale col classico algoritmo iterativo long fatt = 1; for (int i = 1; i <= number; i++) fatt = fatt * i; fattoriale.pdf Pag. 1/12 Cozzetto

// visualizzo il risultato out.println("<br/><br/>il fattoriale di "+number+ " è "+fatt); catch(numberformatexception e) { out.println("<br/><br/>attenzione! Controlla il valore inserito"); catch(exception e) { out.println("<br/><br/>errore generico. Messaggio: "+e.getmessage()); // fine if %> </body> </html> Nel codice precedente, abbiamo anche gestito l'eccezione che si può verificare se l'utente immette una sequenza qualsiasi di caratteri invece che un numero intero (non possiamo infatti calcolare il fattoriale di una stringa). Questo approccio che consiste nell'inserire tutta la logica (la cosiddetta business logic) nella pagina web index.jsp non è consigliabile in quanto, se vogliamo riutilizzare l'algoritmo, siamo costretti a fare un copia-incolla del codice. Modalità 2) Decidiamo ora di inserire il codice in una classe java molto semplice, che possiamo riutilizzare tutte le volte che è necessario e in contesti differenti. Ad esempio, riutilizzando la classe, possiamo progettare un'applicazione GUI (lo sviluppo è lasciato come esercizio): fattoriale.pdf Pag. 2/12 Cozzetto

o un'applicazione console : La classe cioè può essere considerata un componente riutilizzabile. /* * Fattoriale.java * */ package fattpkg; /** * * @author maurizio */ public class Fattoriale { private long number; /** Creates a new instance of Fattoriale */ public Fattoriale() { number=1; // getter public long getnumber() { return number; // setter public void setnumber(long number) { this.number = number; // metodo che restituisce il fattoriale di number public long getfattoriale() { // trovo il fattoriale col classico algoritmo iterativo long fatt = 1; fattoriale.pdf Pag. 3/12 Cozzetto

for (int i = 1; i <= number; i++) fatt = fatt * i; return fatt; // fine metodo getfattoriale // fine classe Fattoriale Questa volta l'algoritmo non si trova più nella pagina web ma è cablato nella classe Fattoriale. Quello che noi dobbiamo fare è utilizzare la classe, istanziando un oggetto di tipo Fattoriale. Pagina index2.jsp <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body> <h3>calcolo del fattoriale</h3> <form name="provafrm" action="${request.requesturi"> Dammi un numero intero <input type="text" name="numbertxt" value=""/> <input type="submit" name="inviabtn" value="invia"/> </form> <% // se è stato premuto il pulsante if (request.getparameter("inviabtn")!=null) { // acquisisco il valore stringa della casella testuale String numberstr = request.getparameter("numbertxt"); try { // converto in un numero intero "grande" long number = Long.parseLong(numberStr); // cambio il segno se l'utente introduce un valore negativo if (number < 0) number = -number; // istanzio l'oggetto fatt che mi servirà per calcolare il fattoriale fattpkg.fattoriale fatt = new fattpkg.fattoriale(); // "settiamo" il valore su cui calcolare il fattoriale fattoriale.pdf Pag. 4/12 Cozzetto

// (è quello inserito nella casella testuale) fatt.setnumber(number); // visualizzo il risultato out.println("<br/><br/>il fattoriale di "+number+ " è "+fatt.getfattoriale()); catch (NumberFormatException e) { out.println("<br/><br/>errore! Ricontrolla i dati inseriti."); catch (Exception e) { out.println("<br/><br/>errore generico. Messaggio: "+e.getmessage()); // fine if %> </body> </html> Il vantaggio di questo approccio è quello di svincolare la logica dalla parte di presentazione affidata alla pagina jsp. Modalità 3) Non vi sono sostanziali differenze rispetto all'approccio precedente. Utilizziamo l'azione standard <jsp:usebean> che equivale a istanziare un oggetto. Impostiamo successivamente la proprietà (variabile attributo) number al valore inserito nella casella testuale (dato di input). Pagina index3.jsp <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body> <h3>calcolo del fattoriale</h3> <form name="provafrm" action="${request.requesturi"> Dammi un numero intero <input type="text" name="numbertxt" value=""/> <input type="submit" name="inviabtn" value="invia"/> </form> fattoriale.pdf Pag. 5/12 Cozzetto

<% // se è stato premuto il pulsante if (request.getparameter("inviabtn")!=null) { // acquisisco il valore stringa della casella testuale String numberstr = request.getparameter("numbertxt"); try { // converto la stringa in un numero intero long number = Long.parseLong(numberStr); %> %>" /> // cambio il segno se l'utente introduce un valore negativo if (number < 0) number = -number; <jsp:usebean id="fatt" class="fattpkg.fattoriale"/> <jsp:setproperty name="fatt" property="number" value="<%=number <% // visualizzo il risultato out.println("<br/><br/>il fattoriale di "+number+ " è "+fatt.getfattoriale()); catch (NumberFormatException e) { out.println("<br/><br/>errore! Ricontrolla i dati inseriti."); catch (Exception e) { out.println("<br/><br/>errore generico. Messaggio: "+e.getmessage()); // fine if %> </body> </html> Lo svantaggio di questo approccio è che mescolando HTML e scriplet rendiamo poco leggibile e mantenibile nel tempo il codice (lo stesso problema affligge anche Php) Modalità 4) Questa volta invece di alternare codice java (scriplet) e codice HTML (testo template) nella pagina web, decidiamo di usare le azioni disponibili nel framework JSTL (JavaServer Pages Standard Tag Library). Ricordiamoci di inserire nel progetto tali librerie (tasto destro del mouse su nome del progetto > Properties > Libraries > Compile > Add Libraries > JSTL 1.1). Pagina index4.jsp <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> fattoriale.pdf Pag. 6/12 Cozzetto

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body> <h3>calcolo del fattoriale</h3> <form name="provafrm" action="${request.requesturi"> Dammi un numero intero <input type="text" name="numbertxt" value=""/> <input type="submit" name="inviabtn" value="invia"/> </form> <c:if test="${!empty param.inviabtn"> <c:set var="number" value="${param.numbertxt"/> <c:catch var="e"> <c:if test="${empty number"> <c:set var="number" value="1"/> </c:if> <c:if test="${number<0"> <c:set var="number" value="${-number"/> </c:if> <jsp:usebean id="fatt" class="fattpkg.fattoriale"/> <jsp:setproperty name="fatt" property="number" value="${number" /> <br/><br/>il fattoriale di ${number è <c:out value="${fatt.fattoriale"/> </c:catch> <c:if test="${!empty e"> <br/><br/>errore: ricontrolla i dati inseriti </c:if> </c:if> </body> </html> fattoriale.pdf Pag. 7/12 Cozzetto

Modalità 5) In quest'ultimo esempio, introduciamo la nuova classe StringValidation.java. Essa conterrà una serie di metodi statici che ci consentiranno ad esempio di validare un numero intero (come nel nostro caso), indirizzi di posta elettronica, codici di avviamento postale, ssn (social security number) ecc mediante l'utilizzo delle cosiddette regular expression (espressioni regolari). /* * StringValidation.java */ package fattorialepkg; import java.util.regex.matcher; import java.util.regex.pattern; /** * @author maurizio */ public class StringValidation { /** Creates a new instance of StringValidation */ public StringValidation() { public static boolean isnumeric(string number){ boolean isvalid = false; // denota una sequenza di caratteri String expression = "[0-9]*"; CharSequence inputstr = number; // una breve e utile guida sulle espressioni regolari si trova all'indirizzo // http://www.zparacha.com/java_regex_validation/ Pattern pattern = Pattern.compile(expression); Matcher matcher = pattern.matcher(inputstr); if(matcher.matches()){ isvalid = true; return isvalid; // fine metodo isnumeric // altri metodi di validazione // fine classe StringValidation fattoriale.pdf Pag. 8/12 Cozzetto

Riscriviamo inoltre la classe Fattoriale introducendo alcune modifiche dettate da motivi di opportunità (sostanzialmente cambiamo il tipo della variabile attributo da long a String) e scegliamo un valore minimo e un valore massimo per il calcolo del fattoriale. Per distinguere questa nuova classe dalla precedente, la inseriamo in un altro package e le assegnamo il nuovo nome FattorialeBean. /* * FattorialeBean.java * * Created on 31 gennaio 2008, 4.34 * * */ package fattorialepkg; import java.util.regex.matcher; import java.util.regex.pattern; /** * * @author maurizio */ public class FattorialeBean implements java.io.serializable { private String number; private final static int MIN=0; private final static int MAX=20; /** Creates a new instance of FattorialeBean */ public FattorialeBean() { number="1"; // setter di number public void setnumber(string number) { this.number=number; // getter di number public String getnumber() { return number; // metodo per il calcolo del fattoriale public long getfattoriale() { long f=1; for (int i=1; i<=long.parselong(number); i++) f=f*i; return f; fattoriale.pdf Pag. 9/12 Cozzetto

// metodo per controllare la validità di un numero intero public boolean isvalidnumber() { boolean isvalid=false; if (StringValidation.isNumeric(number) && Long.parseLong(number)>=MIN && Long.parseLong(number)<=MAX) isvalid=true; return isvalid; // fine metodo isvalidnumber // fine classe FattorialeBean File index5.jsp <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>calcolo del fattoriale di un numero</title> </head> <body> <h3>calcolo del fattoriale mediante javabean</h3> <form name="provafrm" action="${request.requesturi" method="post"> Introduci un valore intero <input type="text" name="number" value="$ {fatt.number" /> <input type="submit" name="submit" value="invia" /> </form> <c:if test="${!empty param.submit"> <jsp:usebean id="fatt" class="fattorialepkg.fattorialebean"/> <jsp:setproperty name="fatt" property="*"/> <c:choose> <c:when test="${fatt.validnumber"> <br/>il fattoriale è ${fatt.fattoriale </c:when> <c:otherwise> <br/>attenzione! Ricontrolla il valore inserito. Deve essere compreso tra 1 e 20. </c:otherwise> </c:choose> </c:if> </body> </html> fattoriale.pdf Pag. 10/12 Cozzetto

Proviamo a introdurre un valore non previsto dal sistema fattoriale.pdf Pag. 11/12 Cozzetto

Il valore 21 non è infatti consentito e appare quindi un messaggio di avviso. Anche l'inserimento di un valore negativo o di una stringa, produce lo stesso effetto. fattoriale.pdf Pag. 12/12 Cozzetto