Applicazioni Web Based - Dipartimento di Matematica

UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
CorsodiLaureainMatematica
Dipartimento di MatematicaeFisica
Sistemiperl’elaborazionedelleinformazioni
7.Applicazioniwebbased
DispensedelcorsoIN530a.a.2015/2016
prof.MarcoLiverani
Applicazioni “webbased”
•
•
•
IlWorldWideWebè uninsiemeditecnologie(computerhardware, reti dicomputerbasate
suprotocolloTCP/IP,sistemioperativicheoffronoserviziapplicativi)natoperpubblicare
informazionidistribuitesudiversinodidellareteInternet,prevalentementenell’ambito
della comunitàscientificainternazionale
Lestessetecnologiesonostatepoiadottatepercostruirel’architetturaapplicativacheoggiè
lapiùdiffusasulmercatodellatecnologiainformatica:l’architettura delle applicazioniweb
based
InquestoambitosisfruttailprotocolloapplicativoHTTP,illinguaggio HTML,l’interfaccia
CGI otecnologiepiùmoderneed ingegnerizzate, comeJEE, Microsoft.net,Ajax,iWeb
Services SOAPeRestful,ecc.per costruireprogrammiingradodiinteragire congliutenti
presentandosicomeun“sitoweb”compostodapagineipertestualicollegatefraloro
equest
HTTP R
File
Database
sponse
HTTP Re
(HTML)
Web
Application
Web
browser
Web Client
Rete TCP/IP
HTTP Request
Web Server
HTTP Resp
onse
(HTML)
Web
browser
Web Client
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
1
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Applicazioni “webbased”
Contenuti“statici”:leinformazioni
pubblicatedalwebserver sono
pre-confezionateesonocontenutesu
fileoaltri documentidigitaliilcui
contenutoèdefinitoapriori
LA
TO
ciao.html
<html>
…
<p>Ciao</p>
…
</html>
Web Server
SE
RV
E
R
Codifica
compatibileconil
client(HTML,GIF,
...)
Firefox
LA
TO
URL http://gondrano/ciao.html
CL
IEN
T
Ciao!
Questoèiltesto...
Applicazioni “webbased”
Contenuti“dinamici”:leinformazioni
pubblicatedalwebserver ottenutecome
outputdiunprogramma eseguitodal
server;l’outputvienecostruitodal
programma sullabasediuncalcoloodi
un’interrogazionesuundatabase
LA
TO
DATA.CGI
/*Calcola la
data corrente
e visualizzala
in output*/
Web Server
SE
RV
E
R
Codifica
dell’output
compatibileconil
client(HTML,GIF,
...)
Firefox
URL http://gondrano/data.cgi
LA
TO
CL
IEN
T
Oggi èil29/4/2015e
sonoleore9:30:25
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
2
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Brevecronologia delWWW
•
•
•
•
•
•
•
•
•
•
•
•
1980:TimBerners-Lee(CERN)sviluppailprogramma Enquire-Within-Upon-Everything”che
consentivadieffettuarelinktradiversinodi
1989:TimBerners-Leediffondeduedocumentiper accogliereopinionisulsuolavoropressoil
CERN
1990:IldocumentodiTBLvieneriformulatoconl’appoggio ufficialedelCERN;vieneconiatoil
nomeWorldWideWeb
1991:SviluppodeiprimiclientedaperturadelWWWserverdelCERN
1992:SviluppodelclientconinterfacciaX;vienerilasciatalalistadeiprimi26serverWWW
1993:VienerilasciatoilprimobrowserperMacintosh;vienerilasciatoX-Mosaic diMarc
Andreessen (NCSA);iserverHTTPsonocirca50
1993:Vieneimplementatal’architetturaCGI(formalizzatainRFC3875nel2004)
1994:VienefondatalaMosaic Corporation(poiNetscapeCorp.);isitiWWWsono1.500;a
dicembresitieneilprimomeetingdel“W3Consortium”pressoilMIT;ilCERN,acausadiproblemi
dibudget,decidedisospendereilsupportodelprogettoWWW
1995:Vienefondatala“WebSociety”aGraz(Austria):partecipanolaTechnicalUniversity diGraz,
ilCERN,l'UniversitàdelMinnesotael’INRIA(Francia)
1996:FormalizzazionediHTTP/1.0comeRFC1945delIETF
1997/1999:PresentazionediHTTP/1.1(RFC2616)
...lastoriacontinua(http://www.internetsociety.org/history)
Applicazioni “webbased”
•
•
•
Neltempo aquestetecnologiedibasesene sonoaggiuntedellealtre, per offriresoluzioni
informatichesemprepiùingegnerizzate, robusteeflessibili:linguaggidiprogrammazione
ObjectOriented (Java,C#, ...), interiframeworksoftwareingradodi“semplificare”lo
sviluppodiapplicazioniwebbased,ecc.
Perla naturaaperta eintegrata delmodellopropostodalweb,letecnologie chehanno
avutosuccessosonoquellechehannosposatoglistandard ochesonostatecostruite
proponendodeglistandardaperti,fruibilianchedaaltri
WEB 2.0:oggiper aumentare l’interazioneconl’utenteerealizzare applicazionicompatibili
conglistandarddeidispositivimobili(smartphone,tablet,smartwatch,...)siaggiungeanche
un’importanteelaborazione“latoclient”:
– l’outputprodottodalprogrammalatoserveroilfileHTML“statico”contieneancheistruzionidi
programma inlinguaggioJavascript
– ilclientesegueleistruzioniJavascript presentinellapagina emodificadinamicamenteilcontenuto
dellapaginastessa,ancheinbasealleazionicompiutedall’utentesuglioggettipresentinellapagina
(bottoni,icone, campidiinput,ecc.)
– ilprogrammaJavascript contenutonellapaginainteragisceconilserveracquisendoedinviando
informazionisenzadoverricaricareunanuova URLnelbrowserdell’utente(l’interazioneavviene
medianteWebServicesRESTeflussidiinformazioniJSON)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
3
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
WebServices
•
•
•
Lastessatecnologiaimpiegata perle applicazioniwebèstatausatapermetterein
comunicazionetradilorodeiprogrammi(e nonutenti eprogrammi),sviluppandola
tecnologiadei WebServices
Protocolli(sopraadHTTP):SOAP (SimpleObjectApplicationProtocol),REST
(REpresentational StateTransfer)
LeinformazioninonsonocodificateinHTML(nondevonoesserepresentateadunutente),
ma inXML,cheoffreunacodificapiùflessibile
– XMLpermettedidefinire“tag”percodificareinmodoapertoleinformazioninecessarieinuno
specifico contestoapplicativo
– sialerichiestedelclientalserverchelerispostedelserveralclientsonocodificateinstruttureXML
denominateSOAPEnvelope (buste SOAP),costituitedaunheader edaunbody
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/s
oap/envelope/">
<soap:Body>
<getProduct xmlns="http://acme.it/ws">
<productId>827635</productId>
</getProduct>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.../soap/envelope/">
<soap:Body>
<getProductResponse xmlns="http://acme.it/ws">
<getProductResult>
<productName>Biscotti Gentilini</productName>
<productId>123456</productId>
<description>Biscotti secchidacolazione</description>
<price>1,50</price>
<inStock>true</inStock>
</getProductResult>
</getProductResponse>
</soap:Body>
</soap:Envelope>
Componenti dell’architettura delleapplicazioniweb based
Percomprendere l’architettura applicativadiunprogrammawebbased,ènecessariostudiarne
le componenti:
•
linguaggio HTMLper lacodificadelleinformazionipresentatealcliente lacostruzione
dell’interfaccia utentedella web application
•
protocolloHTTPecodificadelle URL perl’identificazionedelle risorsepresentisulweb;
•
meccanismodiscambiodeidatiininputeinoutputtrailwebcliente ilweb server
(vedremoil meccanismonotocomeCGI,CommonGatewayInterface)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
4
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Elaborazione automaticaditesti
Elaborazionedidocumentimediante ilcomputer…Cosasignifica?Qualèloscopo?
• Comporre testiconl’ausiliodellamacchina(èpiùcomodo)
• Definirel’aspettodeltesto conqualitàtipografica
• Riprodurlo inpiùcopierapidamente
• Modificareiltestoointegrarlosuccessivamente
• Memorizzare,archiviare documenti
• Eseguire delle ricerche suunarchiviodocumentale
• Trasmettere,condividere documenticonaltri
Strumenti – Wordprocessor
•
•
•
•
Ilwordprocessor èunadelleapplicazionipiùdiffusesuipersonalcomputer.
Consentedicomporreemodificareundocumento,consentediarchiviarlo,stamparlo.
Ildocumentopuòesserecondivisoconchiutilizzalostessoprogramma(eforseanchela
stessamacchina,lostessosistemaoperativo,…).
Devoconoscereilformatodeidatiperpotercostruirestrumentidiricercadiinformazioni
sull’archiviodocumentale
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
5
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Strumenti – Linguaggidimarcatura
•
•
•
Illinguaggio TEX (eLATEX)permette lacostruzionedidocumentisecondounformato aperto
(notoatutti),aumentandocosìlapossibilitàdicondivisioneescambio
Necessitadiun“motoredirendering”(unprogramma)perpoterprodurreunacopia
leggibile deldocumento
Permette dilegare tra loroleinformazionisecondounastrutturagerarchicaesequenziale
HTML:HyperText Markup Language
•
Èun“linguaggio dimarcatura” del testo:
– Nonèunlinguaggiodiprogrammazione
– Ècostituitodauninsiemediparolechiave(tag omarcatori)concuiidentificaporzionidel
documento
– Ènatoconl’obiettivodiconsentireladefinizionedidocumentiipertestualidistribuitisuunaretedi
computer
•
HTMLviene definitocomeapplicazionediSGML (StandardGeneralized MarkupLanguage)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
6
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:Tagper ilmark-updeltesto
•
•
•
•
Itag consentonodicontrassegnare(marcare)unaporzionedeldocumentoperassociargli
unadeterminata caratteristica(strutturale,tipografica,ecc.).
Itag sonocostituitidaunelementodiinizio-marcaturaedunelementodifine-marcatura; i
tag sonocaseinsensitive.
Glielementi diiniziomarcaturapossonoesserecaratterizzatidaattributi acuièassociatoun
particolare valore:
<tag attributo 1=“valore1” attributon=“valoren”> …</tag>
Esempio:
<p align=“center”>Paragrafo del documento</p>
HTML:Entità
•
•
•
Pergarantire la massimacompatibilità etrasportabilità deldocumento,HTMLutilizzala
codificaASCIIstandarda7bit(caratterida1a127)
Perrappresentare simbolispecialiocaratterinazionaliutilizzaalcuneentità
Esempi:
à =“à”, è =“è”, é =“é”,
È =“È”, ü =“ü”, ecc.
& =“&”," =“” ”, < =“<“, > =“>”,ecc.
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
7
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Scopo diHTML
•
ConHTMLèpossibile:
–
–
–
–
•
Definirelastrutturalogicadeldocumento
Definiredeicollegamentiipertestualifradocumenti(link)
Definirel’interfacciautente diunaapplicazioneweb
Definirelaformattazionetipograficadeltesto,fornendoindicazioni utiliperilrendering
L’erroredisintassi nonèprevistonell’ambitodell’elaborazione didocumentoHTML:ciòche
nonèriconducibileaduntag dellinguaggioviene ignoratoe visualizzatoinquantotale.
Struttura deldocumento HTML:ilDocument ObjectModel
•
•
Definirela strutturalogicadeldocumentosignificaidentificarnedellecomponenti
riconducibiliadelementidiunastrutturagerarchicanell’ambito diunmodellodenominato
DOM:Document ObjectModel (specificatoconiltag “DOCTYPE”)
IlDOMdiHTMLprevedela seguentestrutturagerarchica:
Documento
Intestazione
Titolo
Corpo
Capitolo
Sezione
Paragrafo
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
8
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Struttura deldocumento HTML:ilDocument ObjectModel
•
Lostessomodellopuòessererappresentatoconunalbero:
Documento
Intestazione
Corpo
Titolo
…
Cap.n
Sez.1.k
Sez.n.1
…
Par.1 … Par.y
Par.1 … Par.z
Cap.1
Sez.1.1
Par.1 … Par.x
…
…
Sez.n.h
Par.1 … Par.w
HTML:tag per ladefinizione dellastruttura deldocumento
DOMdeldocumento
<!DOCTYPEHTML>
<html>
Intestazione
<head>
<title>Titolodeldocumento</title>
</head>
Titolo
<body>
<section>
<h1>Titolodelcapitolo</h1>
Doc.
Corpo
Capitolo Sezione
<section>
<h2>Titolodellasezione</h2>
<p>Testodelparagrafo…</p>
<p>Testodelparagrafo…</p>
</section>
Paragrafi
</section>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
9
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:rendering deldocumento
<!DOCTYPEHTML>
<html>
<head>
<title>Primo esempio</title>
</head>
<body>
<article>
<h1>Titolodel capitolo</h1>
<section>
<h2>Titolodella sezione</h2>
<p>Testo delparagrafo…</p>
</section>
</article>
</body>
</html>
HTML:ancorasullastruttura “logica”deltesto
•
•
•
Itag chedefinisconolastrutturadeldocumentoconsentonoalprogrammachelovisualizza
dievidenziaregraficamenteleporzioniditestocaratterizzatedaundeterminato“ruolo”
(titoli,sottotitoli,ecc.)
Oltre allagerarchia delle parti checompongonoildocumento(article,section anche
nidificate)edei titoli(h1,h2,…,h6)esistonoaltritag percaratterizzareiltesto;es.:
<em>…</em>: enfatizza(inqualchemodo)unafraseimportante evidenziandoneicaratteri
Anchela spaziaturatraiparagrafie iltipodicarattereda utilizzarevienestabilito
autonomamentedalprogramma chevisualizzaildocumento
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
10
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:listeed elenchi
•
Elenchipuntati:
<ul>
<li> Primoelemento</li>
<li> Secondoelemento</li>
</ul>
•
Listenumerate:
<ol>
<li> Primoelemento</li>
<li> Secondoelemento</li>
</ol>
•
Listecondescrizione:
<dl>
<dt> Primoelemento</dt>
<dd> Descrizioneprimo elemento</dd>
<dt> Secondoelemento</dt>
<dd> Descrizionesecondo elemento</dd>
</dl>
HTML:tabelle
•
Tabella:
<table border="1">
<tr>
<th>Autore</th>
<th>Titolo</th>
<th>Editore</th>
</tr>
<tr>
<td>Camilleri</td>
<td>Laconcessionedeltelefono</td>
<td>Sellerio</td>
</tr>
Spessoletabelle sonoutilizzate(impropriamente)
<tr>
ancheper disporreeallineare gli elementi sulla
<td>Sciascia</td>
pagina (es.:icampie leetichette diunaform)
<td>Unastoriasemplice</td>
<td>Adelphi</td>
</tr>
</table>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
11
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:documenti ipertestuali
•
•
•
•
IdocumentiHTMLpossonocontenereriferimenti(link ipertestuali)adaltridocumenti
Inquestomodolaletturadeltestopuònon essererigidamentesequenziale: invece diuna
sequenzadipagine(comeinunlibro)ottengounaretedipagine(unasortadigrafo con
pagine fralorocorrelate)
Ilriferimentoadunarisorsa(documentooaltro)vieneespressomedianteunURL (Uniform
ResourceLocator)
ConunURLèpossibiledescriverelamodalità concuideveessereraggiuntoildocumento
correlatoe lasuacollocazione:
http://www.mat.uniroma3.it/users/liverani/index.html
protocollo
hostname
path
filename
HTML:tag per lacreazione dilink
•
Iltag perla definizionediriferimentiipertestuali (hypertextual reference)è
<a href=“URL” target=“finestra”>testo…</a>
•
Ilriferimento ipertestuale puòspingersifinoadunpuntoparticolaredeldocumento
indirizzatodaunURL:possonoesseredefinitedelle“ancore”internealdocumentoper
indicarepuntidiagganciodiunlink:
<a href=“URL#etichetta”>testo…</a>
e
<a name=“etichetta”>altrotesto…</a>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
12
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:collegamentiipertestuali
rapporto.html
… Leggi <a href=“articolo.html”>l’articolo</a>
che parla di …
articolo.html
… Questo articolo parla di …
Leduepaginecollegatepossonoessere
suserverdifferenti: ildocumentopuò
esserefisicamente distribuito (dislocato
inpiùpunti)
HTML:altritipidilink
•
•
•
•
Definendounlinkèpossibileindicareilprotocollo concuipotràessereraggiuntalarisorsa
collegata (documento,file,…).
Se ilprotocolloèdifferentedaHTTP(es.:FTP,MAILTO, …)verrà attivatounprogramma
adatto atrattarlo(avolte lostessobrowsergestiscepiùprotocolli).
Se iltipodidocumentorichiestononpuòesserevisualizzatodalbrowser(es.:documento
Word,PDF,Postscript,ecc.),tipicamentevieneattivatounprogrammaadeguato,ovvero il
fileviene salvatosulcomputer.
Esempi:
– <p>Scaricailfile<ahref=“ftp://nic.switch.ch/pub/file.zip”>file.zip</a>…</p>
– <p>Scrivialmio<ahref=“mailto:[email protected]”>indirizzo</a> diposta</p>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
13
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:form diinserimento dati
•
•
•
Lepagine web possonoessereusateanchecome“interfaccia”versounprogramma
applicativowebbased (es.: programmi CGI)
Ilprogramma produrràunoutputinformatoHTML perpoterlovisualizzarenelbrowsere
acquisiràl’input dapartedell’utente attraversodelle maschere diinserimentodati
denominateform
Unaform ècompostada
– uninsiemedicampidiinputcaratterizzatidaunnome (univoconell’ambitodellaform)eduntipo,
chenedeterminailcomportamentofunzionale
– un’azione, ossialaURLdelprogrammachericeveràidatiinseritidall’utenteesioccuperàdellaloro
elaborazionerestituendoasuavoltaunoutput(adesempioinformatoHTML)
– l’indicazionedelmetodoHTTP(GEToPOST)con cuiidatiinseritidall’utenteneicampidellaform
sarannoinviatialserverwebeall’applicazionecheimplemental’azione
•
Quandol’utentehaterminatola compilazionedellaform viene eseguitoilprogramma
specificatocome“azione”dellaform passandoglicomeinputidatiinseritidall’utentenei
campi
Flussodiunprogrammawebbased
Client(browser)
ProtocolloHTTP
(sopraaTCP/IP)
Server(webserver)
form.html
search.cgi
input:Nome=Alan,
Cognome=Turing
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
14
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:form diinserimento dati
<html>
<head><title>Form di input</title></head>
<body>
<h1>Inserisci i dati:</h1>
<form action="search.cgi" method="GET">
<p>Nome: <input type="text" name="nome"></p>
<p>Dipartimento: <select name="dip">
<option value="mat">Matematica
<option value="fis">Fisica
</select></p>
<p>Qualifica: <input type="radio" name="qualifica“
value="prof“ checked>Docente <input type="radio“
name="qualifica“ value="stud">Studente </p>
<p>Esami: <input type="checkbox" name="esami“
value="in1">Informatica <input type="checkbox“
name="esami" value="al1">Algebra</p>
<p><input type="submit" value="Registra">
<input type="reset" value="Ripristina"></p>
</form>
</body>
</html>
HTML:formattazionetipografica
•
•
Èpossibileforniredelleindicazioni perilrendering deldocumentoHTML(perlasua
rappresentazionetipografica).
Tali indicazionipossonoesseretrascuratedalprogrammavisualizzatore,inmododa
adattare almeglio la visualizzazionedellapaginaallostrumentofisicosucuivieneeseguitoil
rendering (browser).
<b>grassetto(bold)</b>
<u>sottolineato(underlined)</u>
<i>corsivo(italic)</i>
<tt>typewriter</tt>
<big>grande</big>
<small>piccolo</small>
x<sup>n</sup> (apice)
x<sub>k</sub> (pedice)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
15
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:caratteri,font,colori
•
•
•
Èpossibiledefinireindettaglioiltipodicarattere chedeve essereutilizzato:
<fontface=“tipo”size=“dim.”color=“colore”>…</font>
Questorendepoco“trasportabile”ildocumento:èlegatoalla disponibilitàdicaratterie
colorisullamacchinadell’utente
IcolorivengonodefinitispecificandonelecomponentiRGB (red,green,blue)innotazione
esadecimale (valorida00aFF):
#rrggbb
•
Esempio: #AB205B
HTML:caratteri,font,colori
Conl’usodiquestitag ancheunapaginamolto
semplicediventa complicataemenoleggibile e
manutenibile; diventadifficilegarantire la
coerenzagraficae l’omogeneità delle diverse
pagine delsito
<html>
<head>
<title>Font e colori</title>
</head>
<bodybgcolor="#3090AA">
<h1>Pagina colorata</h1>
<p>
<fontcolor="#FFCC00"size="+1">Testogiallo</font>conilcarattere
<fontface="Arial"color="#FF0000"size="+2">Arial</font>...
</p>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
16
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML:immaginigrafiche
•
•
•
Èpossibileincludereimmagini inundocumentoHTML
L’immagine verrà visualizzatacompatibilmenteconlecapacitàdelbrowsere dell’ambiente
ospite
<img src=“URL”align=“allineam.”alt=“testoalternativo”>
Esempio:
<img src=“snoopy.jpg” alt=“SnoopyeCharlie Brown”>
Foglidistile:Cascading StyleSheet (CSS)
•
•
•
•
•
Negli anniHTMLsièarricchitodinumerositag dicaratterizzazionegraficadeglielementi
della paginafinoaperderelasuaoriginaria eleganzaeportabilità
Persemplificare lacostruzionedipagineHTMLconunaforteconnotazionetipograficae
cromatica,ritornandoall’obiettivo originaledel linguaggio(definire unastrutturalogicadel
documento)sonostatiintrodottiifoglidistile(Cascading StyleSheet – CSS)
NelCSS vengonodefinitelecaratteristichetipografichedei tag presentinella pagina
Itag possonoessereraggruppatiininsiemiomogeneidefinendodelleclassi nelfogliodistile
CSS; lostessotag puòessereinseritoinpiùclassi,caratterizzandoloinmodidifferenti
Unostessofogliodistilepuòessereutilizzatosupiùdocumenti(osull’outputdiun
programma, codificatoinHTML)inmododagarantire
– omogeneità“tipografica”dipresentazionedituttelepaginedelsitoodell’applicazione
– facilitàdimodificadell’impaginazionedelsito/applicazione:bastamodificareun fogliodistileper
cambiarel’aspettodituttelepaginedelsito
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
17
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
HTML+CSS:fornireuno stilealdocumento
<!DOCTYPEHTML>
<html>
<head>
<title>Primoesempio</title>
</head>
<body>
<h1>Titolodelcapitolo</h1>
<h2>Titolodellasezione</h2>
<p>Testodelparagrafo…</p>
</body>
</html>
HTML+CSS:fornireuno stilealdocumento
H1 {
}
p{
font-family: Arial, Helvetica, sans-serif;
text-align: center;
font-weight: normal;
border-color: #5588bb;
border-style: solid;
font-family: Times New Roman, serif;
text-align: justify;
color: #990000;
<!DOCTYPE HTML>
font-weight: bold;
<html>
}
body {
background: #FFCC66;
}
<head>
<title>Primo esempio</title>
<link rel=stylesheet type="text/css" href="style.css">
</head>
<body>
<h1>Titolo del capitolo</h1>
<h2>Titolo della sezione</h2>
<p>Testo del paragrafo…</p>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
18
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
ServerWeb(serverHTTP)
•
UnserverWebè unprogrammacheimplementa lacomponenteserverdelprotocolloHTTP
•
IlprotocolloHTTPèunprotocolloapplicativocheoperaallivello4dellostack TCP/IP(utilizza
tipicamente laportaTCP80)
•
IlprotocolloHTTPS (portaTCP443)èilmedesimoprotocolloresosicuromediantela
cifraturadeidatitrasmessi,mediante l’usodiSSL (Secure Socket Layer);ilprotocolloHTTPS
garantisceanchel’identità delserver
•
IlprotocolloHTTP/1.1implementaiseguenticomandi:
– GET:ilclientrichiedeunaspecifica“risorsa”alserverindicandonelaURL
– HEAD:ilclientrichiedel’header dellarispostaHTTPperlarichiestadiunarisorsaindicataattraverso
unaURL, manonilcontenutodellarisorsastessa
– POST:ilclientrichiedeunaspecifica“risorsa”alserveredinviadelleinformazionialserver,che
seguono larichiestaHTTP
– PUT:ilclientinviaalserverunarisorsachedeveesserememorizzatanellaURLspecificata
– DELETE:ilclientrichiedealserverlacancellazionedellarisorsaspecificataconunaURL
– TRACE,OPTIONS,CONNECT, PATCH: altricomandiperfunzionidiservizio,spessonon implementati
perragionidisicurezza
•
IcomandipiùutilizzatisonoGET ePOST
ServerWeb(serverHTTP)
•
IlprotocolloHTTPèunprotocollostateless:alterminedellarispostaadunarichiestadel
clientla connessionevieneterminatadalserver
•
Ilserver HTTPnonconservamemoria dellostatodellasessioneutente;pergestire
informazionidisessionesiricorreall’usodicookies,piccolifiledidaticheèpossibile
memorizzare sulwebclient
•
Ilserver Webesegue questasequenzadioperazioni:
– Accettalaconnessione dapartediunclientmedianteilprotocolloHTTP
– Verificaseilclientol’utentehal’autorizzazione pereseguireilcollegamento
– AccettaunarichiestadalclientmedianteilprotocolloHTTP(GET,POST,...)
– Perrichiestedirisorsestatiche(fileHTML,immagineJPEG,ecc.):ilservercaricalarisorsaelainvia
alclient
– Perrichiestedirisorsedinamiche:ilserveresegueilprogrammapassandogliattraversolamodalità
CGIiparametriricevutidalclientedinviaalclientl’outputprodottodalprogramma
– Chiude laconnessione conilclient
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
19
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
ServerWeb(serverHTTP)
SessioneHTTPmediante ilprogramma Telnet (connessionesullaportaTCP80)
HTTPrequest (GET)del client
HTTPresponse delserver: header
marco@aquilante ~$ telnet gondrano 80
Trying 10.211.55.42...
Connected to freebsd.
Escape character is '^]'.
GET /~marco/index.ht ml http/1.1
Host: gondrano
HTTP/1.1 200 OK
Date: Sun, 26 Apr 2015 13:57:05 GMT
Server: Apache/2.4.12 (FreeBSD)
Last-Modified: Sat, 25 Apr 2015 14:54:30 GMT
ETag: "9e-5148db0a37580 "
Accept-Ranges: bytes
Content-Length: 158
Content-Type: text/html
<!DOCTYPE HTML>
HTTPresponse delserver: body
<html>
<head><title>Marc o Home Page</title></head>
<body>
<h1>Benvenuti!</h 1>
<p>Questa è la home page di Marco.</p>
</body>
</html>
Connection closed by foreign host.
ProgrammiCGI
•
•
•
•
•
CGI,CommonGatewayInterface,è unadellemodalità (laprima, inordineditempo,forse
tutt’ora lapiùsemplice,ma anchemenoefficiente) concuièpossibileeseguiredei
programmisuunserverWeb
L’interfaccia CGIdefinisceilmodoincuièpossibileinviaredelleinformazioni(parametri)da
unclientweb(unwebbrowser)all’applicazione invocatasulserverwebe comesiapossibile
restituirealclientl’outputprodottodalprogramma
Iprogrammi cheoperanosecondotalemodalitàvengonodefinitiprogrammi CGI
Iprogrammi CGIvengonoeseguitisulserver,nonsulclient
NonesisteunlinguaggiodiprogrammazioneesclusivoperlacodificadiprogrammiCGI
– illinguaggioPerlèunodeiprincipalistrumentiperlosviluppodiapplicazioniCGI,manonl’unico
– illinguaggioPython èoggiunlinguaggiodiscripting moltodiffuso
– programmiCGIpossono esserescritticomescriptdellashell delsistemaoperativo(Bash shell
script,adesempio) ocomeprogrammiinlinguaggioCcompilatiinlinguaggiomacchina
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
20
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Passaggiodiparametridawebbrowser adapplicazione CGI
•
Iparametri vengonoforniticonun’unicastringainformatoURLencoded:
•
Esempio:
nome1 =valore1 &nome2 =valore2 &…&nomen =valoren
nome=Silvia&cognome=Di+Stefano&eta=23
•
Èil server HTTPchesioccupadipassarlialprogrammaCGIsecondoduemodalità:
– POST:lastringavienefornitasulcanalestandardinput,ilprogrammaleggeràlastringadaSTDIN
(standardinput)
– GET:lastringavienememorizzatanellavariabilediambienteQUERY_STRING
•
Lamodalità viene specificatadalserver(sullabasedelle indicazionidelclient)mediantela
variabile diambiente REQUEST_METHOD
Compiti delprogrammaCGI
•
•
•
•
•
•
Acquisire lastringaconiparametri
Eseguire ilparsing deiparametriricevutiininput,ossiaunasuddivisionedellastringaper
isolarele coppie“nome=valore”e successivamenteperseparare ilnomedel parametrodal
suovalore
Eseguirel’elaborazionerichiesta
Produrreunoutputcompatibileconlecapacitàdivisualizzazionedelbrowser(tipicamente
outputinformatoHTML)
L’outputdeve contenereunaintestazionecheneindichiilformatosecondolacodifica
MIME (Multipurpose InternetMailExtensions),seguitodaunarigavuota
Esempio:
Content-type: text/html
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
21
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
ProgrammiCGIin Perl
•
•
•
InPerlesisteunalibreria perimplementare le principalifunzionidellaprogrammazioneCGI:
cgi-lib.pl
Conl’istruzionerequire èpossibilecaricareunalibrerianelprogramma Perl
require “cgi-lib.pl”;
Tra le subroutinemesseadisposizionedallalibreriac’è“ReadParse”:
– Leggelastringadeiparametri(ricevutiindifferentementeconmetodoGEToPOST)
– Suddivideinomideiparametridaivalori
– Costruiscel’arrayassociativo%in:
$in{nome} = valore
CGIinPerl:un esempioelementare
<html>
<head><title>Input</title></head>
<body>
<form action=“ciao.cgi” method=“get”>
Come ti chiami? <input name=“nome”>
<input type=“submit”>
</form>
</body>
</html>
#!/usr/local/bin/perl
# Programma di esempio “ciao.cgi”
require “cgi-lib.pl”;
&ReadParse;
print “Content-type: text/html\n\n”;
print “<html><body>\n”;
print “<p>Ciao $in{nome}</p>”;
print “</body></html>\n”;
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
22
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Esempio:indirizzario on-line, schemadell’applicazione
•
•
•
Programma Webperl’archiviazione diindirizzielaricercasulcatalogo
L’archivio èsuunDBMSrelazionale:database“marcodb”,tabella“rubrica”
Schema dell’applicazione:
select.html
select.cgi
insert.html
insert.cgi
delete.cgi
index.html
•
Sononecessariseifile:
–
–
–
–
–
–
index.html:menùprincipaledell’applicazione
select.html:form diinputdeicriteridiricercaperselezionareidatipresentisulDB
select.cgi:programmaCGIche eseguelaselezionedeidatidalDBinbaseaiparametrispecificati
delete.cgi:programmaCGIcheeliminaunrecorddalDBinbasealsuo“id”
insert.html:form diinputdeidatidainserirecomenuovorecordnellatabella“rubrica”sulDB
insert.cgi:programmaCGIcheeseguel’inserimentodeidatiinunnuovorecordsulDB
Indirizzario on-line: menùprincipale (index.html)
<!DOCTYPE HTML>
<html>
<head>
<title>Rubrica degli indirizzi - Menù principale</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Rubrica degli indirizzi</h1>
<h2>Menù principale</h2>
<dl>
<dt><a href="select.html" title="Selezione dei dati presenti nella
rubrica">Selezione dati</a></dt>
<dd>Ricerca e visualizza i dati presenti nella rubrica degli indirizzi</dd>
<dt><a href="insert.html" title="Inserimento dati in rubrica">Inserimento
dati</a></dt>
<dd>Inserimento di un nuovo record nell'archivio degli indirizzi</dd>
</dl>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
23
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Indirizzario on-line: inserimento criteridiricerca(select.html)
<!DOCTYPE HTML>
<html>
<head>
<title>Rubrica degli indirizzi - Consultazione dati</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Rubrica degli indirizzi</h1>
<h2>Consultazione dati</h2>
<form action="select.cgi" method="GET">
<table>
<tr><th>Nome</th><td><input name="nome" type="text" size="20"></td></tr>
<tr><th>Cognome</th><td><input name="cognome" type="text" size="30"></td></tr>
<tr><th>E-mail</th><td><input name="mail" type="text" size="30"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Cerca”>
<input type="reset" value="Ripristina"></td></tr>
</table>
</form>
</body>
</html>
Indirizzario on-line: scriptCGIdiselezionedeidati(select.cgi)
#!/usr/local/bin/perl
require "cgi-lib.pl";
&ReadParse;
print "Content-Type: text/html\n\n";
print "<!DOCTYPE HTML>\n";
print "<html>\n<head><title>Rubrica degli indirizzi - Consultazione dati</title>\n";
print "<link rel=stylesheet type=\"text/css\" href=\"style.css\">\n</head>\n";
print "<h1>Rubrica degli indirizzi</h1>\n";
print "<h2>Consultazione dati</h2>\n";
use DBI;
$db = DBI->connect("dbi:mysql:dbname=marcodb", "marco", "marco") or die DBI::errstr;
$query = $db->prepare("select id, nome, cognome, email, tel, data_nascita from rubrica
where nome like '%$in{nome}%' and cognome like '%$in{cognome}%' and email like '%$in{email}%’
order by cognome, nome");
$query->execute();
if ($query->rows() == 0) {
print "<p>Nessun record selezionato.</p>";
} else {
print "<table>\n<tr><th>Nome</th><th>Cognome</th><th>E-mail</th><th>Telefono</th><th>Data di
nascita</th><th>Canc.</th></tr>\n";
for ($i=1; $i <= $query->rows(); $i++) {
($id, $nome, $cognome, $email, $tel, $data) = $query->fetchrow();
print "<tr><td>$nome</td><td>$cognome</td><td><a
href=\"mailto:$email\">$email</a></td><td>$tel</td><td>$data</td><td><a href=\"delete.cgi?id=$id\"
title=\"Elimina n. $id\">X</a></td></tr>\n";
}
print "</table>\n";
}
$query->finish();
$db->disconnect();
print "<p>Torna <a href=\"index.html\" title=\"Menù principale\">menù principale</a></p>\n";
print "</body>\n</html>\n";
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
24
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Indirizzario on-line: scriptCGIdicancellazionedeidati (delete.cgi)
#!/usr/local/bin/perl
require "cgi-lib.pl";
&ReadParse;
print "Content-Type: text/html\n\n";
print "<!DOCTYPE HTML>\n";
print "<html>\n<head><title>Rubrica degli indirizzi-Cancellazione dati-OK</title>\n";
print "<link rel=stylesheet type=\"text/css\" href=\"style.css\">\n</head>\n";
print "<h1>Rubrica degli indirizzi</h1>\n";
print "<h2>Cancellazione di un contatto</h2>\n";
use DBI;
$db = DBI->connect("dbi:mysql:dbname=marcodb", "marco", "marco") or die DBI::errstr;
$query = $db->prepare("delete from rubrica where id='$in{id}'");
$query->execute();
$query->finish();
$db->disconnect();
print "<p>Cancellazione del record n. $in{id} eseguita correttamente.</p>\n";
print "<p>Torna al <a href=\"index.html\" title=\"Menù
principale\">menù principale</a>.</p>\n";
print "</body>\n</html>\n";
Indirizzario on-line: Forminserimento dati(insert.html)
<!DOCTYPE HTML>
<html>
<head>
<title>Rubrica degli indirizzi - Inserimento dati</title>
<link rel=stylesheet type="text/css" href="style.css">
</head>
<body>
<h1>Rubrica degli indirizzi</h1>
<h2>Inserimento di un nuovo contatto</h2>
<form action="insert.cgi" method="GET">
<table>
<tr><th>Nome</th><td><input name="nome" type="text" size="20"></td></tr>
<tr><th>Cognome</th><td><input name = "cognome" type="text" size="30"></td></tr>
<tr><th>E-mail</th><td><input name = "mail" type="text" size="30"></td></tr>
<tr><th>Telefono</th><td><input name = "telefono" type="text" size="15"></td></tr>
<tr><th>Data di nascita</th><td><input name = "giorno" type="text" size="2">/
<input name="mese" type="text" size="2">/<input name="anno" type="text"
size="4"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Salva">
<input type="reset" value="Ripristina"></td></tr>
</table>
</form>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
25
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Indirizzario on-line: scriptCGIdiinserimento dati
#!/usr/local/bin/perl
require "cgi-lib.pl";
&ReadParse;
print "Content-Type:text/html\n\n";
print "<!DOCTYPEHTML>\n";
print "<html>\n<head><title>Rubricadegliindirizzi- Inserimentodati- OK</title>\n";
print "<linkrel=stylesheet type=\"text/css\"href=\"style.css\">\n</head>\n";
print "<h1>Rubricadegliindirizzi</h1>\n";
print "<h2>Inserimentodiunnuovocontatto</h2>\n";
use DBI;
$db =DBI->connect("dbi:mysql:dbname=marcodb", "marco", "marco") ordieDBI::errstr;
$query=$db->prepare("insert into rubrica(nome,cognome, email,tel,data_nascita)
values ('$in{nome}','$in{cognome}','$in{mail}','$in{telefono}','$in{anno}-$in{mese}-$in{giorno}')");
$query->execute();
$query->finish();
$db->disconnect();
print "<p>L'inserimentodeidatidi$in{nome}$in{cognome}èstatoeseguitocorrettamente.</p>\n";
print "<p>Tornaal<ahref=\"index.html\"title=\"Menùprincipale\">menùprincipale</a>.
</p>\n";
print "</body>\n</html>\n";
Indirizzario on-line: fogliodi style(style.css)
body {
padding: 0pt;
margin: 0pt;
}
p {
margin-left:
}
a {
text-decoration:
}
8pt;
h1 {
font-family: sans-serif;
font-size: 20pt;
color: white;
background: #E0E0E0;
display: block;
padding: 8pt;
margin: 0pt;
box-shadow: 0px -5px 5px #B0B0B0
inset;
}
h2 {
font-family: sans-serif;
font-size: 18pt;
display: block;
padding: 8pt;
color: green;
}
none;
a:hover {
color: red;
}
dt a {
text-decoration: none;
padding: 3pt;
color: green;
border: solid 2pt white;
}
table {
margin-left:
}
8pt;
form th {
text-align: right;
background: white;
border-bottom: none;
}
form td {
border-bottom:
}
none;
dt a:hover {
background: #EEFFEE;
color: green;
border: solid 2pt green;
}
th {
background: #EEFFEE;
border-bottom: 3pt solid green;
padding: 3pt;
}
dt {
font-weight: bold;
font-family: sans-serif;
padding: 5pt;
}
td {
border-bottom:
padding: 3pt;
}
dd {
padding-bottom:
}
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
1pt solid green;
20pt;
26
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
IllinguaggioJava,l’ambientedisviluppo ediesecuzione
•
•
•
•
Java è unlinguaggioObjectOriented moltodiffusoapartiredaglianni’90
Èunodeilinguaggi piùdiffusiperlosviluppodiapplicazioniwebbased eperdispositivi
mobili
Illinguaggio Javaè indipendentedallapiattaformasucuivieneeseguito
L’indipendenzadallapiattaforma vienerealizzata mediante laJava Virtual Machine,un
ambiente diesecuzioneperiprogrammi Javachefornisceun’astrazionedelcomputeredi
alcunideiservizidel sistemaoperativo:inquestomodoilprogrammasfruttaleAPIdella
JVMenonquelledel sistemaoperativoospite
Sistema Operativo
JVM– Java VirtualMachine
Programma Java
•
•
JDK (JavaDevelopmentKit)èl’ambientedisviluppoperJava:ilcompilatorejavac traduceil
sorgenteJavainbytecode,unasortadilinguaggiomacchinaperlaJVM
JRE (JavaRuntimeEnvironment)èl’ambientediesecuzione(laJVM)periprogrammiJava
codificatiinbytecode
JavaApplication eJavaApplet
•
UnprogrammainlinguaggioJavaèunaJavaApplication:èeseguitasuuncomputermedianteuna
JavaVirtualMachinecheoffrel’ambientediesecuzionedelbytecode
nome.java
javac
nome.class
java
0011010101
sorgente in
linguaggio Java
compilatore
Java(JDK)
programmain
bytecode
ambientedi esecuzione
Java(JRE)
processo eseguito
dalla JVM
•
UnaJavaApplicationpuòimplementare un’interfacciagrafica(GUI)indipendente
dall’interfaccia delsistemaoperativoospite,mediante ipackage SWINGeAWT(abstract
window toolkit)
•
UnApplet èunprogrammaJavaeseguitoall’internodelwebbrowsermedianteunplug-in
(componenteaggiuntivodelbrowser)cherealizzaunambientediesecuzioneeunaJVM
all’internodelbrowser
web browser
•
nome.java
javac
nome.class
Java
plug-in
0011010101
sorgente in
linguaggio Java
compilatore
Java
programmain
bytecode
ambientedi esecuzione
Java(interpretebytecode)
processo eseguito dalla
JVM nel browser
ConunAppletvengonoimpegnatelerisorsedelclient;l’applethanumerosivincoliimpostidalle
politichedisicurezzadelbrowseredellaJVMrealizzatacomeplug-in
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
27
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
JEE:JavaEnterpriseEdition
•
•
•
JEE (JavaEnterpriseEdition)èunaspecificaapertaperlarealizzazionediun’architetturaper
applicazioniwebbasatesullinguaggio Java esuunaseriedicomponentisoftwarerese
disponibiliallewebapplication resedisponibilinell’ambitodell’architettura
L’architettura è basatasuunApplicationServerJEEcherendedisponibililecomponentiJEE
e fornisceunambientediesecuzioneperleapplicazioniJavasviluppatesecondolaspecifica
LecomponentiJEEsonoditretipi
1. Componenti web:Servlet eJSP,MVC(ModelView Controller,unaspecificaperl’implementazione
dellapartedifront-end dell’applicazione),JSF(JavaServerFaces),ecc.
2. Componenti enterprise:EJB(EnterpriseJavaBeans),JMS(JavaMessageService),JNDI(Java
Naming andDirectoryInterface),ecc.
3. Componenti perl’interazionecon ildatabase:JDBC(JavaDatabaseConnectivity),JavaTransaction
API,JavaPersistence API,ecc.
•
•
•
EsistononumerosiprodottidimercatooopensourceditipoApplicationServerJEE(es.:
Glassfish,JBoss,IBMWebSphere,ecc.)
Adeccezionedelle componentiEnterpriseunawebapplication Javapuòessereresa
disponibileanchetramiteunWebServerJavaEnabled (es.:Apache Tomcat)
GliApplicationServerJEEediWebServer JavaEnabled implementanoilprotocolloHTTP
offrendodelleclassidioggettialle applicazioniJavaperricevere i datiininputerestituirein
outputunapaginacodificatainHTML(alparidiquantooffertodaCGI)
JEE:JavaEnterpriseEdition
•
•
Iduetipidiprogramma Javaper larealizzazionediunaweb application sullabasedella
specificaJEEsonoiServlet eleJSP
Servlet
– èunprogrammaJavachevienecompilatoinbytecode dall’ApplicationServerJEElaprimavoltache
vieneeseguito
– sfruttaappositioggettiemetodimessiadisposizionedall’ApplicationServerJEEperricevereidati
passatitramiteimetodiGEToPOSTdiHTTP
– difattoèl’equivalentediunprogrammaCGInelcontestoJEE
•
JSP(Java ServerPages)
– sipresentacomeunapaginaHTMLcontenentedeitag specialichedelimitanoistruzioniscrittein
linguaggioJava
– lapaginaJSPvienecompilataetrasformatanelbytecode diunservlet laprimavoltacheviene
richiamatadalbrowserdiunutente
– anchelapaginaJSPsfruttaappositioggettiemetodimessiadisposizionedall’ApplicationServerJEE
perricevereidatipassatitramiteimetodiGEToPOSTdiHTTP
•
RispettoadunascriptCGIunprogrammaJEE
– èmoltopiùefficienteperchécompilato inbytecode
– èpiùefficienteemeno onerosointerminidirisorsedelsistemaoperativoperchénonvieneaperto
unprocesso perciascunachiamataalprogramma(comeavvieneperiCGI)
– èportabiledaunapiattaformaadun’altra(anchesusistemioperatividiversi)
•
Servlet e JSPnonusanoAWTeSWING,maHTMLperprodurrel’interfacciaconl’utente
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
28
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
JavaWebApplication
Sistemaoperativoserver
Java ApplicationServer/WebServerJavaEnabled
Java Virtual Machine
Java WebApplicationA
HTML
GIF/
JPEG
CSS
JSP
Java
Beans
Java WebApplicationB
HTML
Servlet
GIF/
JPEG
CSS
JSP
Java
Beans
Servlet
JavaServlet
•
•
•
Unservlet èunaclasseJavaeseguibile daunWebServerJavaEnabled,ossiadotatodiuna
componentedenominataservlet container
Unservlet èunprogrammapubblicatoinretedalWebServercome unaqualsiasialtra
risorsaweb(unapaginaHTML,un’immagine, unoscriptCGI,ecc.):ancheunservlet è
identificatodaunaspecificaURL
Iservlet operanocomegliscriptCGIinunamodalitàrequest/response:
– ilclient(browser)dell’utentenefarichiestatramitelaURLassociata
– ilserverattivailservlet eloesegue
– ilservernerestituisceilrisultato,ciò cheilserverrestituiscecome“output”,comecontenutodella
risorsa(es.:formattatoinHTML)echiudelaconnessione
•
•
•
Leservlet APIdiJavapermettonodiprogrammare unservlet inmaniera completamente
indipendentedalle caratteristichedelserver, delcliente delprotocolloditrasferimento
Ilcodicedelprogramma servlet è normalecodiceJava: puòusaretuttelelibrerie e leutility
dellinguaggio, tracuila connessioneaDBMStramiteJDBC,l’usodiXMLtramiteJAXP,ecc.
Iservlet sostituisconoiclassiciscriptCGIfornendoungradodisicurezzamaggiore,eun
livello diastrazionesuperioreperilprogrammatore
Le slidesuJavaServlet sonotratteinpartedalledispensedelprof.GiuseppeDellaPenna
delDipartimentodiInformaticadell’UniversitàdegliStudidell’Aquila(http://www.di.univaq.it/gdellape/)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
29
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
JavaServlet eWebApplications
•
•
UnaJava WebApplicationèuninsiemediservlet, JSP,pagine HTML,immagini, filedistile,
librerie (package)Java raccoltiinunadirectorydelwebapplication server
Ifile checompongonolaJavaWebApplicationdevonoessereorganizzatiinsottodirectory
specifiche inmodotaledaconsentirealserverdiaccederealle risorsepubblicate
nell’ambito della webapplication:
– LasottodirectoryWEB-INF, contiene alcunifilediconfigurazione,tracuiilwebapplication
deployment descriptor (web.xml)
– LasottodirectoryWEB-INF/classes, contieneleclassiJavadell’applicazione,compresele
servlet;secondoleconvenzioniJava,lesingoleclassiandrannoposteall’internodiunalberodi
directorycorrispondentealloropackage
– LasottodirectoryWEB-INF/lib, contienelelibrerieJARnecessarieall’applicazione,comprese
quellediterzeparti,comeidriverJDBC
– Tuttelealtresottodirectorydelcontesto,compresalastessaroot directory,conterrannonormali
filecome pagineHTML,foglidistile,immaginiopagineJSP
•
•
SpessoperlapubblicazionediunaJavaWebApplicationsiutilizzaraccoglieretuttiifileele
sottodirectorydell’applicazioneinunfileditipoWAR (WebArchive):vienepoieseguitoil
deploy delWARsull’ApplicationServercheeseguirà l’estrazionedei filedalWARe laloro
collocazionenellasottodirectorycheidentificailcontesto
Ilfile WARspessovieneprodottomedianteunambientedisviluppoIDE (Integrated
DevelopmentEnvironment)comeEclipse oNetBeans
JavaServlet eWebApplications
•
•
•
•
Perrendere unaclasseJavadisponibilecomerisorsaditiposervlet,ènecessario
configurarnelecaratteristiche tramite unfiledettoweb application deployment descriptor
Questofile,denominatoweb.xml ecodificatoinXML,deveesserepostonelladirectory
WEB-INFdell’applicazione
<?xmlversion="1.0"encoding="ISO-8859-1"?>
Ciascunservletèconfiguratoinun
<!DOCTYPEweb-app PUBLIC "-//Sun Microsystems,
elemento <servlet> distinto;
l’elemento <servlet-class> deve Inc.//DTDWebApplication2.3//EN”
"http://java.sun.com/dtd/web-app_2_3.dtd”>
contenereil nomecompletodella
<web-app>
classecheimplementa ilservlet
<display-name>ProgettoWeb</display-name>
<description>Blablabla...</description>
Ènecessariomappare ciascunservlet
<servlet>
suunaURLtramitel’elemento
<servlet-name>Servlet1</servlet-name>
<servlet-mapping>
<description>ImplementalafunzioneY</description>
Lacomponente<url-pattern>
<servlet-class>org.iw.project.class1</servlet-class>
specificataandràacomporrelaURL
</servlet>
perla servlet nelseguente modo:
<servlet-mapping>
http://indirizzo/contesto/url pattern
<servlet-name>Servlet1</servlet-name>
<url-pattern>/funzione1</url-pattern>
</servlet-mapping>
</web-app>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
30
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
JavaServlet
•
•
Alla basedell’implementazione diunservlet c’è l’interfacciaServlet,cheèimplementata
daunaserie diclassibasecomeHttpServlet;tutteiservlet chevengonocreati sono
derivati (extends)daquest’ultima
Lealtre dueclassibaseperla creazionediunservlet sonoServletRequest e
ServletResponse
– Un’istanzadiServletRequest vienepassatadalcontestoalservlet quandovieneinvocato,e
contienetutteleinformazioniinerentilarichiestaeffettuatadalclient:questecomprendono,ad
esempio,iparametriGETePOSTinviatidalclient,levariabilidiambientedelserver,gliheader eil
payload dellarichiestaHTTP
– Un’istanzadiServletResponse vienepassataalservlet quandosirichiededirestituireun
contenutodainviarealclient;imetodidiquestaclassepermettonodiscriveresuunostream che
verràpoiindirizzatoalclient,modificaregliheader dellarispostaHTTP,ecc.
CiclodivitadiunServlet Java
•
Ilciclodivitadiunservletè scanditodaunaseriedichiamate, effettuatedalcontainer, a
particolarimetodi dell’interfacciaServlet
1. Inizializzazione: quando ilcontainercaricailservlet,chiamailsuometodoinit.Tipicamente
questometodo vieneusatoperstabilireconnessioniadatabaseepreparareilcontestoperle
richiestesuccessive.Asecondadell’impostazionedelcontestoe/odelcontenitore,ilservlet può
esserecaricataimmediatamenteall’avviodelserver,adognirichiesta,ecc.
2. Servizio.Lerichiestedeiclientvengonogestitedalcontainertramitechiamatealmetodoservice.
Richiesteconcorrenticorrispondono aesecuzionidiquestometodointhread distinti.Ilmetodo
servicericevelerichiestedell’utentesottoformadiunaServletRequest einvialarisposta
tramiteunaServletResponse
3. Finalizzazione. Quandoilcontainerdecidedirimuoverelaservlet,chiamailsuometododestroy.
Quest’ultimovienesolitamenteutilizzatoperchiudereconnessioniadatabase,oscaricarealtre
risorsepersistentiattivatedalmetodoinit.
Ènecessariosovrascrivereilmetododestroy soloseesistonoeffettivamenteoperazionidafare
primadelladistruzionedelservlet
•
LaclasseHttpServlet specializzaquestosistemaperlacomunicazioneHTTP,fornendoin
particolare duemetodi:doGet e doPost,corrispondentialleduerequest piùcomuniin
HTTP.Il metodoservice delleclasseHTTPServlet provvedeautomaticamente asmistare
le richiestealmetodoopportuno
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
31
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
CiclodivitadiunServlet Java
•
IlJava ApplicationServer invocaalcunimetodistandardimplementatidalservlet inalcuni
momentispecificidelsuociclodivita:
– init(...): ilmetodovieneinvocatounasolavoltaquandol’applicazioneJavavieneavviataperla
primavolta(inizializzazione);
– service(...): ilmetodovieneinvocatoognivoltacheilJavaApplicationServerriceveuna
richiestadalclientperlaURLcorrispondentealservlet;
– doGet(...): èilmetodoutilizzatopergestirelarichiestaHTTPmedianteicomandiGETeHEAD;
– doPost(...): èilmetodoutilizzatopergestirelarichiesta
Java Application Server
HTTPmedianteilcomandoPOST;
(servlet container)
– destroy(...): èilmetodoinvocatounasolavoltadal
init(…)
service(…) destroy(…)
JavaApplicationServerquandovieneterminatalaweb
application;conclude ilciclodivitadelservlet
1
init
service
2
3
4
destroy
Web Server
inizializzazione
chiamata
dal client
interruzione
1
2
3
4
Web Browser
LaclasseHttpServlet
•
•
Unservlet estende laclassejavax.servlet.http.HttpServlet
Pergestire lerichieste HTTP,sisovrascrivonoopportunamenteimetodicorrispondenti:in
questoesempio,ilmetododoGet verràchiamatoper gestire lerichiesteHTTP GET.
package org.pippo.project;
import javax.servlet.*;
import javax.servlet.http.*;
publicclass pippo extends HttpServlet {
publicString getServletInfo() {
return “Servlet diesempio,versione1.0”;
}
publicvoid doGet(HttpServletRequest in,HttpServletResponse out){
//...
}
}
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
32
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
InizializzazionedelServlet
•
•
Ilmetodoinit,dopoaverchiamatolostessometododellaclassesuperiore,puòprocedere
conl’inizializzazionedelservlet
Se cisonoproblemidiinizializzazione,vienegenerataunaServletException
package org.pippo.project;
import javax.servlet.*;
import javax.servlet.http.*;
publicclass pippo extends HttpServlet {
privateint parameter1;
publicvoid init(ServletConfig c)throws ServletException {
super.init(c);
parameter1=1;
}
publicString getServletInfo(){
return “Servlet diesempio,versione1.0”;
}
}
publicvoid doGet(HttpServletRequest in,HttpServletResponse out){
//...
}
Acquisire larichiestadelclient
•
•
•
•
Imetodi doGet edoPost possonoleggereiparametri interpretati dellarichiestatramite
getParameter() egetParameterValues()
doGet puòleggere la stringadiqueryinmaniera raw chiamandogetQueryString()
doPost puòleggere ilpayload delmessaggioinmanieraraw tramite glistream restituitida
getReader() (testuale)e
package org.pippo.project;
getInputStream() (binario)
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
publicclass pippo extends HttpServlet {
...
publicvoid doGet(HttpServletRequest in,HttpServletResponse out){
String nome=in.getParameter(“nominativo”);
}
publicvoid doPost(HttpServletRequest in,HttpServletResponse out){
try {
Reader r =in.getReader();
}catch(Exception e){
e.printStackTrace();
}
}
...
}
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
33
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Inviarelarisposta alclient
•
L’oggetto HttpServletResponse fornitoatuttiimetodidiserviziopermettedicostruirela
rispostadainviarealclient
– IlmetodosetContentType(String) permettedidichiarareiltipoMIMErestituitodalservlet (ad
esempio “text/html”)
– IlmetodosetHeader(String,String) permettediaggiungereheaders allarisposta
– IlmetodosendRedirect(String) permettedireindirizzareilbrowserversounanuovaURL
– ImetodigetWriter() egetOutputStream() permettonodiaprireuncanale,testualeo
binario,sucuiscrivereilcontenutodellarisposta;vannochiamatidopoaver(eventualmente)
impostatoilcontent type eglialtriheader
– Altrimetodipermettonodigestire,adesempio,icookie
publicvoid doGet(HttpServletRequest in,HttpServletResponse out){
String nome=in.getParameter(“nominativo”);
out.setContentType(“text/html”);
try {
Writer w =out.getWriter();
w.write(”<html><body><p>Ciao”+nome+“</p></body></html>”);
}catch(Exception e){
e.printStackTrace();
}
}
JavaServerPages
•
•
LeJava ServerPages (JSP)semplificanoilprocessodicostruzionedisitiwebpermettendo
l’inclusionedicontenutidinamiciel’interazioneconleclassiJavacheincapsulanolalogicadi
businesschestaallabasediunawebapplication
LeJSPsonocostituitedaunacombinazioneditestoetag:
– iltesto (eitag HTML)rappresentailcontenutoinformativodiunapaginaweb
– itag JSPinvecepartecipanoallacostruzionedellepaginedinamicheproducendoicontenuti
medianteistruzionidiprogrammainlinguaggioJava
•
•
•
QuandounaJavaServer Page vienerichiesta,ilcontainerJSPprovvedeaconvertirla inun
servlet,compilarlo e quindieseguireilservlet perelaborarelarichiestaHTTP
Laconversioneavviene soltantoneicasiincuiilsorgentedellapaginahasubitomodifiche
rispettoall’ultimaconversioneeffettuatadalcontainer
Inquestomodosiriduconoitempidielaborazionedellerichiesteesiottieneunincremento
generale delle prestazioni
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
34
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
JavaServerPages
Itag JSPsidividonoinquattrotipologie:
1. direttive:servonoacomunicarealcontainerJSPinformazionisullapaginautiliperilprocessodi
traduzioneinunservlet
<%@ tag attributo1=“valore1”attributo2=“valore2”...%>
es.: <%@ page language=“java” contentType=“text/html” %>
<%@ include file=“...” %>
<%@ taglib uri=“...” prefix=“...” %>
2. script:includono delleistruzionenellinguaggiodiscripting associatoallapagina(Java);inquesto
tipoditag sonocontenuteleistruzionicheimplementanoletipichestrutturealgoritmichedi
sequenza,condizione eiterazione,conl’usodivariabili,oggettiemetodi
dichiarazioni:<%! ...dichiarazionedivariabiliemetodipertutteleistanzedellapagina...%>
espressioni:<%= espressioneinoutput%>
scriptlet:<% ...istruzioniinlinguaggioJava...%>
3. commenti:sonousatiperdescriverelalogicaconcuièstataprogettatalaJSP
commenti:<%-- commentoalcodiceJSP--%>
4. action: supportanodiversicomportamentiepossonotrasferireilcontrolloaivaricomponentidella
webapplication,comeservlet,Javabeans oaltreJavaServerPages
<jsp:tag attributo=“valore”/>
JavaServerPages
•
Ilmotore JSPdell’ApplicationServer mette implicitamente adisposizionedelprogrammatore
degli oggettiJava chepossonoessereutilizzatinellepagineJSPsenzalanecessitàdi
dichiararli
•
request:è l’oggetto checontieneleintestazionidellarichiestaHTTPe quindianchei
parametri passatiallapagina JSPattraversoimetodiGEToPOST
– IlmetodogetParameter(“X”) dell’oggettorequest consentediacquisireilparametrofornitoalla
paginaJSPidentificatoconilnome“X”(adesempioilvalorediuncampodiunaform)
– Es.:<p>Ciao <%=request.getParameter(“nome”)%></p>
•
response:è l’oggetto chericeve l’outputprodottodallapaginaJSPelorestituisce
all’application serverper l’invioaclient
– L’oggettovieneutilizzatoimplicitamenteattraversol’oggettoout
– Es.:<% out.println(“Importo:” + valore); %>
– oppure:<%=valore%>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
35
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
JavaServerPages:un esempioelementare
ApplicazionewebJSPperil calcolodeiprimin multiplidik
<!DOCTYPE HTML>
<html>
<head>
<title>Calcolo dei multipli</title>
</head>
<body>
<h1>Calcolo dei multipli di un intero</h1>
<p>Inserisci l'intero k e il numero n di
multipli che desideri calcolare.</p>
<form action="multipli.jsp" method="GET">
<p>k: <input type="text" name="k" size="3">
n: <input type="text" name="n" size="3">
<input type="submit" value="Ok"></p>
</form>
</body>
</html>
JavaServerPages:un esempioelementare
ApplicazionewebJSPperil calcolodeiprimin multiplidik
<!DOCTYPE HTML>
<%-- multipli.jsp:
calcola i primi n multipli di k --%>
<%
int n, k, m, i;
n = Integer.parseInt(request.getParameter("n"));
k = Integer.parseInt(request.getParameter("k"));
%>
<html>
<head>
<title>Multipli di un intero</title>
</head>
<body>
<h1>Primi <%=n%> multipli di <%=k%></h1>
<%
for (i=1; i<=n; i++) {
m = k*i;
out.println("<p>"+k+" × "+i+" = "+m+"</p>");
}
%>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
36
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Programmazione“lato client”eWeb2.0
•
Ilmodello architetturalee funzionaledelleapplicazioniweb(JEE, CGIorealizzateconaltre
tecnologiee framework) èbasatosulparadigma“request/response”:
– ognirispostacostruitadinamicamentedalservermedianteunprogrammaCGIounprogramma
Javaafrontediunarichiestadelclientcostituisceunapaginadellawebapplication
– L’utentepuòselezionareunsemplice linkocompilareunaform estremamentecomplessa,
costituitadadecineocentinaiadicampidiinput,inognicasoilserverraccoglietuttiidatidella
richiesta,elaboraunarispostaelainviaalclientchedeveeseguireilrendering diunapaginaweb
completamentenuovaedifferentedallapaginaprecedente
•
•
Perquantolepagine websianogradevolie basatesuunarappresentazionegraficao
un’impaginazionetipograficacomplessadelleinformazioni,questomodellonondifferisce
moltodaquelloutilizzatonellemascherealfanumeriche tipichedelle applicazioni
centralizzatesuunhostosuunmainframe
Leapplicazionidotatediun’interfacciautentegrafica(le applicazioniperMicrosoftWindows
operX11inambienteUNIX)cihannoinveceabituatoadunadiversaepiùcomplessa
interazionetral’utente edilprogramma: adogniinterazionedell’utenteconl’interfaccia
corrispondeunareazionedapartedelprogramma chesimanifestaconunavariazionedi
alcuneparti delcontenutodellaschermatachestiamoutilizzando
Programmazione“lato client”eWeb2.0
•
•
•
Ilcosiddetto“Web2.0”introduceunlivellodicomplessitàsuperioresullewebapplication
perrealizzare un’interazioneconl’utenteparagonabile aquelladelle applicazioniclient
ConletecnologieintrodotteconilWeb2.0sigettanolebasiancheperlarealizzazionedi
applicazioniperilmondo“mobile”:nonsempliciapplicazioniwebfruibilimedianteilweb
browserpresentesutablet esmartphone,mavereeproprieapplicazionicheoperanosul
sistemaoperativodeldevice mobile
Glielementi che sonoallabasediquestosaltoinavantinellaprogettazionediapplicazioni
web based sonosintetizzatineiseguentipunti:
– capacitàdelwebbrowserdi eseguiredelcodice diunprogrammainlinguaggioJavascript
– possibilitàdioperaresuglielementidellapaginaHTMLdaprogrammaJavascript caricatonella
paginastessa,indirizzandoglielementipresentiall’internodelDOMdeldocumento,identificaticon
nomiunivoci(Dynamic HTML)
– possibilitàdistabilireundialogotrailclienteilservernell’ambitodellastessapaginaattraverso
procedureJavascript inseritenellapaginastessa(AJAX)
– mediantel’usodiCSScombinatoconJavascript sipuòottenerelacostruzionediinterfacceutente
responsive, ossiaingradodiadattarsialladimensioneeallecaratteristichedeldevice chelesta
visualizzandoall’utente
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
37
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Javascript
•
•
•
Èunlinguaggio ObjectOriented lacuisintassiricordaquelladiJava
Èsupportatodauninterpreteedaunambiente diesecuzionepresenteinquasituttiiweb
browser
Il codicediunprogrammaJavascript puòessereinseritoinunapaginaHTML:
nell’intestazionedella pagina, inmodalità“inline”all’internodei tag della paginaoinunfile
separatorichiamatodauntag postonell’intestazionedellapagina
•
Ilbrowsercrea unambiente diesecuzionedelprogrammaJavascript conunnamespace
legato alDOMdeldocumentoHTMLpercollegarel’esecuzionedelle funzioniJavascript agli
eventi acuisonosensibiliglioggetti(componentidelDOM)checompongonoildocumento
stesso
•
L’oneredieseguirelaproceduraJavascript ricadesulclient:èlaCPUdelclientcheè
impegnata nell’elaborazione e nelcalcolo,èla memoria delclient cheviene impegnata per
gestire levariabili, le strutturedatiegli oggettiutilizzatidalprogramma
•
L’ambiente diesecuzione Javascript interno albrowserimpone uninsiemedivincoli
perragionidisicurezza:conilprogrammaJavascript nonèpossibile utilizzare
pienamentelerisorsedelclient (es.:nonèpossibilescrivereunfilesulcliento
accedereadunDBMSsulclient)
Javascript:unesempio elementare
ApplicazionewebJavascript perilcalcolodei
primin multiplidik
<!DOCTYPE HTML>
<html>
<head>
<title>Prova in Javascript</title>
<script language="Javascript" src="multipli.js">
</script>
</head>
<body>
<h1>Multipli</h1>
<fieldset>
<legend>Input</legend>
k: <input id="k"> n: <input id="n">
<input type="button" value="Calcola"
onClick="multipli();">
<input type="button" value="Reset" onClick="azzera();">
</fieldset>
<fieldset>
<legend>Output</legend>
<div id="output">Inserisci la base <var>k</var> e il
numero
di multipli <var>n</var></div>
</fieldset>
</body>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
38
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Javascript:unesempio elementare
ApplicazionewebJavascript perilcalcolodei
primin multiplidik
function multipli() {
var i, m, n, k, s;
n = document.getElementById("n").value;
k = document.getElementById("k").value;
if (!n) {
alert("ERRORE: inserire un valore per n!");
} else if (!k) {
alert("ERRORE: inserire un valore per k!");
} else {
s = "";
for (i=1; i<=n; i++) {
m = k*i;
s = s + "<p>" + k + " × " + i + " = " + m +
"</p>";
}
document.getElementById("output").innerHTML = s;
}
}
function azzera() {
document.getElementById("output").innerHTML = "Inserisci
la base <var>k</var> e il numero di multipli <var>n</var>";
}
AJAXeDynamic HTML
•
•
•
•
•
•
•
AJAX (Asynchronous JavaScriptandXML),èunatecnicadisvilupposoftwareperla
realizzazionediapplicazioniwebinterattive
LosviluppodiapplicazioniwebconAJAXsibasasuunoscambiodidatiinbackgroundfra
web browsereweb server, checonsentel'aggiornamento dinamicodiunapaginawebsenza
esplicitoricaricamentodella paginastessadapartedell'utente
AJAXè asincrono:idatiextrasonorichiestialservere caricatiinbackgroundsenza
interferire conilcomportamentodellapaginaesistente
Ilformatoperloscambiodidatitrailcliente ilserver è spessoJSON (JavaScriptObject
Notation),cheoffreunformatostandardmoltosempliceperrappresentaresequenzedi
coppieditipo“chiave:valore”,incuiil“valore”puòasuavoltaessereunacollezionedi
coppie“chiave:valore”
Tipicamente le funzionirichiamatesonoscritteconillinguaggioJavaScriptesonopresenti
nella paginaHTML
JQuery è oggilapiùfamosalibreria Javascript cheimplementa AJAX,maanche moltialtri
aspettidelWeb2.0;è unalibreria difunzioniprogettatepersemplificarelacostruzionedi
pagine webdinamiche, conunagestionedeglieventi moltoefficace
Èsupportatadanumerosissimiframeworkdisviluppo(Microsoft.net,JEE,ecc.)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
39
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2015/2016
Riferimenti
① W3Consortium: http://www.w3.org
② W3Schools, “HTML5Tutorial”:http://www.w3schools.com/html/default.asp
③ W3Schools, “CSSTutorial”:http://www.w3schools.com/css/default.asp
④ TimBerners-Lee “StyleGuideforonlinehypertext”:http://www.w3.org/Provider/Style/
⑤ KevinWerbach,“TheBareBones GuidetoHTML”:http://werbach.com/barebones/ (initaliano:
http://werbach.com/barebones/it/it_barebone.html)
⑥ JudyBishop,“JavaGently – CorsoIntroduttivo”,SecondaEdizione,AddisonWesley
⑦ MarcoBertacca,AndreaGuidi,“IntroduzioneaJava”,SecondaEdizione,McGraw-Hill
⑧ LarryWall,“ProgrammingPerl”,O’Reilly
⑨ AltrerisorsedisponibilisuInternet:
–
http://www.perl.org
–
http://www.perl.com
–
http://cgi-lib.berkeley.edu/(CGI-lib home page,pressoUniversity ofCaliforniaat Berkeley)
–
http://www.aquilante.net/perl/
TimBerners-Lee
SirTimothyJohnBerners-LeeèunodegliinventoridelWorldWideWeb,autoredelprimoserverHTTPedelprimoclientperaccederearisorsedistribuite in
retemedianteilprotocolloHTTP;nellafotoèritrattoneglianni‘90accantoalmonitordellasuaworkstationNeXT alCERNdiGinevra,chesuccessivamenteha
abbandonatopertrasferirsialprestigiosoLaboratoriodiComputerSciencedelMITdiBoston
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
40