Applicazioni Web Based - mat.uniroma3

UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
CorsodiLaureainMatematica
DipartimentodiMatematicaeFisica
Sistemiperl’elaborazionedelleinformazioni
7.Applicazioniwebbased
DispensedelcorsoIN530a.a.2016/2017
prof.MarcoLiverani
Applicazioni“webbased”
•
•
•
IlWorldWideWebèuninsiemeditecnologie(computerhardware,retidicomputerbasate
suprotocolloTCP/IP,sistemioperativicheoffronoserviziapplicativi)natoperpubblicare
informazionidistribuitesudiversinodidellareteInternet,prevalentementenell’ambito
dellacomunitàscientificainternazionale
Lestessetecnologiesonostatepoiadottatepercostruirel’architetturaapplicativacheoggiè
lapiùdiffusasulmercatodellatecnologiainformatica:l’architetturadelleapplicazioniweb
based
InquestoambitosisfruttailprotocolloapplicativoHTTP,illinguaggioHTML,l’interfaccia
CGI otecnologiepiùmoderneedingegnerizzate,comeJEE,Microsoft.net,Ajax,iWeb
ServicesSOAPeRestful,ecc.percostruireprogrammiingradodiinteragirecongliutenti
presentandosicomeun“sitoweb”compostodapagineipertestualicollegatefraloro
uest
eq
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.2016/2017
Applicazioni“webbased”
Contenuti“statici”:leinformazioni
pubblicatedalwebserversono
pre-confezionateesonocontenutesu
fileoaltridocumentidigitaliilcui
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
pubblicatedalwebserverottenutecome
outputdiunprogrammaeseguitodal
server;l’outputvienecostruitodal
programmasullabasediuncalcoloodi
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.2016/2017
BrevecronologiadelWWW
•
•
•
•
•
•
•
•
•
•
•
•
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”
•
•
•
Neltempoaquestetecnologiedibasesenesonoaggiuntedellealtre,peroffriresoluzioni
informatichesemprepiùingegnerizzate,robusteeflessibili:linguaggidiprogrammazione
ObjectOriented (Java,C#,...),interiframeworksoftwareingradodi“semplificare”lo
sviluppodiapplicazioniwebbased,ecc.
Perlanaturaapertaeintegratadelmodellopropostodalweb,letecnologiechehanno
avutosuccessosonoquellechehannosposatoglistandard ochesonostatecostruite
proponendodeglistandardaperti,fruibilianchedaaltri
WEB2.0:oggiperaumentarel’interazioneconl’utenteerealizzareapplicazionicompatibili
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
informazionisenzadoverricaricareunanuovaURLnelbrowserdell’utente(l’interazioneavviene
medianteWebServicesRESTeflussidiinformazioniJSON)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
3
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
WebServices
•
Lastessatecnologiaimpiegataperleapplicazioniwebèstatausatapermetterein
comunicazionetradilorodeiprogrammi(enonutenti eprogrammi),sviluppandola
tecnologiadeiWebServices
UserClient
Personal
Computer
Front-end
WebApplica,on
Server
Back-end
WebApplica,on
Server
Datalayer
Database
Server
Sistemaopera,vo
Sistemaopera,vo
Sistemaopera,vo
Sistemaopera,vo
WebBrowser
HTTPServer
WebApplica,on
Server
Documento
HTML
HTTPrequest
HTTPresponse
DBMS
Database
SOAPrequest
Web
Applica,on
SOAPresponse
WebService
xDBC
(SQLquery)
Database
Programma
Javascript
File
File HTML
HTML
File
GIF
WebServices
•
•
Protocolli(sopraadHTTP):SOAP (SimpleObjectApplicationProtocol),REST
(REpresentational StateTransfer)
LeinformazioninonsonocodificateinHTML(nondevonoesserepresentateadunutente),
mainXML,cheoffreunacodificapiùflessibile
– XMLpermettedidefinire“tag”percodificareinmodoapertoleinformazioninecessarieinuno
specificocontestoapplicativo
– sialerichiestedelclientalserverchelerispostedelserveralclientsonocodificateinstruttureXML
denominateSOAPEnvelope (busteSOAP),costituitedaunheader edaunbody
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/
soap/envelope/">
<soap:Body>
<getProduct xmlns="http://acme.it/ws">
<productId>827635</productId>
</getProduct>
</soap:Body>
</soap:Envelope>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
<soap:Envelope xmlns:soap="http://schemas.../soap/envelope/">
<soap:Body>
<getProductResponse xmlns="http://acme.it/ws">
<getProductResult>
<productName>BiscottiGentilini</productName>
<productId>827635</productId>
<description>Biscottisecchidacolazione</description>
<price>1,70</price>
<inStock>true</inStock>
</getProductResult>
</getProductResponse>
</soap:Body>
</soap:Envelope>
4
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Componentidell’architetturadelleapplicazioniwebbased
Percomprenderel’architetturaapplicativadiunprogrammawebbased,ènecessariostudiarne
lecomponenti:
•
linguaggioHTMLperlacodificadelleinformazionipresentatealclientelacostruzione
dell’interfacciautentedellawebapplication
•
protocolloHTTPecodificadelleURL perl’identificazionedellerisorsepresentisulweb;
•
meccanismodiscambiodeidatiininputeinoutputtrailwebclienteilwebserver
(vedremoilmeccanismonotocomeCGI,CommonGatewayInterface)
Elaborazioneautomaticaditesti
Elaborazionedidocumentimedianteilcomputer…Cosasignifica?Qualèloscopo?
• Comporre testiconl’ausiliodellamacchina(èpiùcomodo)
• Definirel’aspettodeltesto conqualitàtipografica
• Riprodurlo inpiùcopierapidamente
• Modificareiltestoointegrarlosuccessivamente
• Memorizzare,archiviare documenti
• Eseguiredellericerche suunarchiviodocumentale
• Trasmettere,condividere documenticonaltri
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
5
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Strumenti– Wordprocessor
•
•
•
•
Ilwordprocessor èunadelleapplicazionipiùdiffusesuipersonalcomputer.
Consentedicomporreemodificareundocumento,consentediarchiviarlo,stamparlo.
Ildocumentopuòesserecondivisoconchiutilizzalostessoprogramma(eforseanchela
stessamacchina,lostessosistemaoperativo,…).
Devoconoscereilformatodeidatiperpotercostruirestrumentidiricercadiinformazioni
sull’archiviodocumentale
Strumenti– Linguaggidimarcatura
•
•
•
IllinguaggioTEX(eLATEX)permettelacostruzionedidocumentisecondounformato aperto
(notoatutti),aumentandocosìlapossibilitàdicondivisioneescambio
Necessitadiun“motoredirendering”(unprogramma)perpoterprodurreunacopia
leggibiledeldocumento
Permettedilegaretraloroleinformazionisecondounastrutturagerarchicaesequenziale
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
6
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:HyperText MarkupLanguage
•
Èun“linguaggiodimarcatura”deltesto:
– Nonèunlinguaggiodiprogrammazione
– Ècostituitodauninsiemediparolechiave(tag omarcatori)concuiidentificaporzionidel
documento
– Ènatoconl’obiettivodiconsentireladefinizionedidocumentiipertestualidistribuitisuunaretedi
computer
•
HTMLvienedefinitocomeapplicazionediSGML (StandardGeneralized MarkupLanguage)
HTML:Tagperilmark-updeltesto
•
•
•
•
Itag consentonodicontrassegnare(marcare)unaporzionedeldocumentoperassociargli
unadeterminatacaratteristica(strutturale,tipografica,ecc.).
Itag sonocostituitidaunelementodiinizio-marcaturaedunelementodifine-marcatura;i
tag sonocaseinsensitive.
Glielementidiiniziomarcaturapossonoesserecaratterizzatidaattributi acuièassociatoun
particolarevalore:
<tag attributo1=“valore1” attributon=“valoren”> …</tag>
Esempio:
<p align=“center”>Paragrafo del documento</p>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
7
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:Entità
•
•
•
Pergarantirelamassimacompatibilità etrasportabilità deldocumento,HTMLutilizzala
codificaASCIIstandarda7bit(caratterida1a127)
Perrappresentaresimbolispecialiocaratterinazionaliutilizzaalcuneentità
Esempi:
à =“à”,è =“è”,é =“é”,
È =“È”,ü =“ü”,ecc.
& =“&”," =“” ”,< =“<“,> =“>”,ecc.
ScopodiHTML
•
ConHTMLèpossibile:
–
–
–
–
•
Definirelastrutturalogicadeldocumento
Definiredeicollegamentiipertestualifradocumenti(link)
Definirel’interfacciautente diunaapplicazioneweb
Definirelaformattazionetipograficadeltesto,fornendoindicazioni utiliperilrendering
L’erroredisintassi nonèprevistonell’ambitodell’elaborazionedidocumentoHTML:ciòche
nonèriconducibileaduntag dellinguaggiovieneignoratoevisualizzatoinquantotale.
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
8
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
StrutturadeldocumentoHTML:ilDocument ObjectModel
•
•
Definirelastrutturalogicadeldocumentosignificaidentificarnedellecomponenti
riconducibiliadelementidiunastrutturagerarchicanell’ambitodiunmodellodenominato
DOM:Document ObjectModel (specificatoconiltag “DOCTYPE”)
IlDOMdiHTMLprevedelaseguentestrutturagerarchica:
Documento
Intestazione
Titolo
Corpo
Capitolo
Sezione
Paragrafo
StrutturadeldocumentoHTML:ilDocument ObjectModel
•
Lostessomodellopuòessererappresentatoconunalbero:
Documento
Intestazione
Corpo
Titolo
Cap.1
Sez.1.1
Par.1 … Par.x
…
…
…
Cap.n
Sez.1.k
Sez.n.1
Par.1 … Par.y
Par.1 … Par.z
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
…
Sez.n.h
Par.1 … Par.w
9
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:tag perladefinizionedellastrutturadeldocumento
DOMdeldocumento
<!DOCTYPEHTML>
<html>
Intestazione
Titolo
<head>
<title>Titolodeldocumento</title>
</head>
<body>
<section>
<h1>Titolodelcapitolo</h1>
Doc.
Corpo
Capitolo Sezione
Paragrafi
<section>
<h2>Titolodellasezione</h2>
<p>Testodelparagrafo…</p>
<p>Testodelparagrafo…</p>
</section>
</section>
</body>
</html>
HTML:rendering deldocumento
<!DOCTYPEHTML>
<html>
<head>
<title>Primoesempio</title>
</head>
<body>
<article>
<h1>Titolodelcapitolo</h1>
<section>
<h2>Titolodellasezione</h2>
<p>Testodelparagrafo…</p>
</section>
</article>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
10
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:ancorasullastruttura“logica”deltesto
•
•
•
Itag chedefinisconolastrutturadeldocumentoconsentonoalprogrammachelovisualizza
dievidenziaregraficamenteleporzioniditestocaratterizzatedaundeterminato“ruolo”
(titoli,sottotitoli,ecc.)
Oltreallagerarchiadellepartichecompongonoildocumento(article,section anche
nidificate)edeititoli(h1,h2,…,h6)esistonoaltritag percaratterizzareiltesto;es.:
<em>…</em>:enfatizza(inqualchemodo)unafraseimportante evidenziandoneicaratteri
Anchelaspaziaturatraiparagrafieiltipodicaratteredautilizzarevienestabilito
autonomamentedalprogrammachevisualizzaildocumento
HTML:listeedelenchi
•
Elenchipuntati:
<ul>
<li> Primoelemento</li>
<li> Secondoelemento</li>
</ul>
•
Listenumerate:
<ol>
<li> Primoelemento</li>
<li> Secondoelemento</li>
</ol>
•
Listecondescrizione:
<dl>
<dt> Primoelemento</dt>
<dd> Descrizioneprimoelemento</dd>
<dt> Secondoelemento</dt>
<dd> Descrizionesecondoelemento</dd>
</dl>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
11
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
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>
Spessoletabellesonoutilizzate(impropriamente)
<tr>
ancheperdisporreeallineareglielementisulla
<td>Sciascia</td>
pagina(es.:icampieleetichettediunaform)
<td>Unastoriasemplice</td>
<td>Adelphi</td>
</tr>
</table>
HTML:documentiipertestuali
•
•
•
•
IdocumentiHTMLpossonocontenereriferimenti(link ipertestuali)adaltridocumenti
Inquestomodolaletturadeltestopuònon essererigidamentesequenziale:invecediuna
sequenzadipagine(comeinunlibro)ottengounaretedipagine(unasortadigrafo con
paginefralorocorrelate)
Ilriferimentoadunarisorsa(documentooaltro)vieneespressomedianteunURL (Uniform
ResourceLocator)
ConunURLèpossibiledescriverelamodalità concuideveessereraggiuntoildocumento
correlatoelasuacollocazione:
http://www.mat.uniroma3.it/users/liverani/index.html
protocollo
hostname
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
path
filename
12
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:tag perlacreazionedilink
•
Iltag perladefinizionediriferimentiipertestuali(hypertextual reference)è
<ahref=“URL” target=“finestra”>testo…</a>
•
Ilriferimentoipertestualepuòspingersifinoadunpuntoparticolaredeldocumento
indirizzatodaunURL:possonoesseredefinitedelle“ancore”internealdocumentoper
indicarepuntidiagganciodiunlink:
<ahref=“URL#etichetta”>testo…</a>
e
<aname=“etichetta”>altrotesto…</a>
HTML:collegamentiipertestuali
rapporto.html
… Leggi <a href=“articolo.html”>l’articolo</a>
che parla di …
articolo.html
… Questo articolo parla di …
Leduepaginecollegatepossonoessere
suserverdifferenti:ildocumentopuò
esserefisicamentedistribuito (dislocato
inpiùpunti)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
13
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:altritipidilink
•
•
•
•
Definendounlinkèpossibileindicareilprotocollo concuipotràessereraggiuntalarisorsa
collegata(documento,file,…).
SeilprotocolloèdifferentedaHTTP(es.:FTP,MAILTO,…)verràattivatounprogramma
adattoatrattarlo(avoltelostessobrowsergestiscepiùprotocolli).
Seiltipodidocumentorichiestononpuòesserevisualizzatodalbrowser(es.:documento
Word,PDF,Postscript,ecc.),tipicamentevieneattivatounprogrammaadeguato,ovveroil
filevienesalvatosulcomputer.
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>
HTML:form diinserimentodati
•
•
•
Lepaginewebpossonoessereusateanchecome“interfaccia”versounprogramma
applicativowebbased (es.:programmiCGI)
IlprogrammaprodurràunoutputinformatoHTML perpoterlovisualizzarenelbrowsere
acquisiràl’inputdapartedell’utenteattraversodellemascherediinserimentodati
denominateform
Unaform ècompostada
– uninsiemedicampidiinputcaratterizzatidaunnome (univoconell’ambitodellaform)eduntipo,
chenedeterminailcomportamentofunzionale
– un’azione,ossialaURLdelprogrammachericeveràidatiinseritidall’utenteesioccuperàdellaloro
elaborazionerestituendoasuavoltaunoutput(adesempioinformatoHTML)
– l’indicazionedelmetodoHTTP(GEToPOST)concuiidatiinseritidall’utenteneicampidellaform
sarannoinviatialserverwebeall’applicazionecheimplemental’azione
•
Quandol’utentehaterminatolacompilazionedellaform vieneeseguitoilprogramma
specificatocome“azione”dellaform passandoglicomeinputidatiinseritidall’utentenei
campi
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
14
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Flussodiunprogrammawebbased
Client(browser)
ProtocolloHTTP
(sopraaTCP/IP)
Server(webserver)
form.html
search.cgi
input:Nome=Alan,
Cognome=Turing
HTML:form diinserimentodati
<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>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
15
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:formattazionetipografica
•
•
Èpossibileforniredelleindicazioni perilrendering deldocumentoHTML(perlasua
rappresentazionetipografica).
Taliindicazionipossonoesseretrascuratedalprogrammavisualizzatore,inmododa
adattarealmegliolavisualizzazionedellapaginaallostrumentofisicosucuivieneeseguitoil
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)
HTML:caratteri,font,colori
•
•
Èpossibiledefinireindettaglioiltipodicaratterechedeveessereutilizzato:
<fontface=“tipo”size=“dim.”color=“colore”>…</font>
Questorendepoco“trasportabile”ildocumento:èlegatoalladisponibilitàdicaratterie
colorisullamacchinadell’utente
•
IcolorivengonodefinitispecificandonelecomponentiRGB (red,green,blue)innotazione
esadecimale(valorida00aFF):
•
Esempio:#AB205B
#rrggbb
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
16
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML:caratteri,font,colori
Conl’usodiquestitag ancheunapaginamolto
semplicediventacomplicataemenoleggibilee
manutenibile;diventadifficilegarantirela
coerenzagraficael’omogeneitàdellediverse
paginedelsito
<html>
<head>
<title>Fontecolori</title>
</head>
<bodybgcolor="#3090AA">
<h1>Paginacolorata</h1>
<p>
<fontcolor="#FFCC00"size="+1">Testogiallo</font>conilcarattere
<fontface="Arial"color="#FF0000"size="+2">Arial</font>...
</p>
</body>
</html>
HTML:immaginigrafiche
•
•
•
Èpossibileincludereimmagini inundocumentoHTML
L’immagineverràvisualizzatacompatibilmenteconlecapacitàdelbrowseredell’ambiente
ospite
<img src=“URL”align=“allineam.”alt=“testoalternativo”>
Esempio:
<img src=“snoopy.jpg” alt=“SnoopyeCharlieBrown”>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
17
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Foglidistile:Cascading StyleSheet (CSS)
•
•
•
•
•
NeglianniHTMLsièarricchitodinumerositag dicaratterizzazionegraficadeglielementi
dellapaginafinoaperderelasuaoriginariaeleganzaeportabilità
PersemplificarelacostruzionedipagineHTMLconunaforteconnotazionetipograficae
cromatica,ritornandoall’obiettivooriginaledellinguaggio(definireunastrutturalogicadel
documento)sonostatiintrodottiifoglidistile(Cascading StyleSheet – CSS)
NelCSSvengonodefinitelecaratteristichetipografichedeitag presentinellapagina
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
HTML+CSS:fornireunostilealdocumento
<!DOCTYPEHTML>
<html>
<head>
<title>Primoesempio</title>
</head>
<body>
<h1>Titolodelcapitolo</h1>
<h2>Titolodellasezione</h2>
<p>Testodelparagrafo…</p>
</body>
</html>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
18
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
HTML+CSS:fornireunostilealdocumento
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>
ServerWeb(serverHTTP)
•
UnserverWebèunprogrammacheimplementalacomponenteserverdelprotocolloHTTP
•
IlprotocolloHTTPèunprotocolloapplicativocheoperaallivello4dellostack TCP/IP(utilizza
tipicamentelaportaTCP80)
•
IlprotocolloHTTPS (portaTCP443)èilmedesimoprotocolloresosicuromediantela
cifraturadeidatitrasmessi,mediantel’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
seguonolarichiestaHTTP
– PUT:ilclientinviaalserverunarisorsachedeveesserememorizzatanellaURLspecificata
– DELETE:ilclientrichiedealserverlacancellazionedellarisorsaspecificataconunaURL
– TRACE,OPTIONS,CONNECT,PATCH:altricomandiperfunzionidiservizio,spessononimplementati
perragionidisicurezza
•
IcomandipiùutilizzatisonoGET ePOST
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
19
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
ServerWeb(serverHTTP)
•
IlprotocolloHTTPèunprotocollostateless:alterminedellarispostaadunarichiestadel
clientlaconnessionevieneterminatadalserver
•
IlserverHTTPnonconservamemoriadellostatodellasessioneutente;pergestire
informazionidisessionesiricorreall’usodicookies,piccolifiledidaticheèpossibile
memorizzaresulwebclient
•
IlserverWebeseguequestasequenzadioperazioni:
– AccettalaconnessionedapartediunclientmedianteilprotocolloHTTP
– Verificaseilclientol’utentehal’autorizzazione pereseguireilcollegamento
– AccettaunarichiestadalclientmedianteilprotocolloHTTP(GET,POST,...)
– Perrichiestedirisorsestatiche(fileHTML,immagineJPEG,ecc.):ilservercaricalarisorsaelainvia
alclient
– Perrichiestedirisorsedinamiche:ilserveresegueilprogrammapassandogliattraversolamodalità
CGIiparametriricevutidalclientedinviaalclientl’outputprodottodalprogramma
– Chiudelaconnessioneconilclient
ServerWeb(serverHTTP)
SessioneHTTPmedianteilprogrammaTelnet(connessionesullaportaTCP80)
HTTPrequest (GET)delclient
HTTPresponse delserver:header
marco@aquilante ~$ telnet gondrano 80
Trying 10.211.55.42...
Connected to freebsd.
Escape character is '^]'.
GET /~marco/index.html 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>Marco Home Page</title></head>
<body>
<h1>Benvenuti!</h1>
<p>Questa è la home page di Marco.</p>
</body>
</html>
Connection closed by foreign host.
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
20
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
ProgrammiCGI
•
•
•
•
•
CGI,CommonGatewayInterface,èunadellemodalità(laprima,inordineditempo,forse
tutt’oralapiùsemplice,maanchemenoefficiente)concuièpossibileeseguiredei
programmisuunserverWeb
L’interfacciaCGIdefinisceilmodoincuièpossibileinviaredelleinformazioni(parametri)da
unclientweb(unwebbrowser)all’applicazioneinvocatasulserverwebecomesiapossibile
restituirealclientl’outputprodottodalprogramma
IprogrammicheoperanosecondotalemodalitàvengonodefinitiprogrammiCGI
IprogrammiCGIvengonoeseguitisulserver,nonsulclient
NonesisteunlinguaggiodiprogrammazioneesclusivoperlacodificadiprogrammiCGI
– illinguaggioPerlèunodeiprincipalistrumentiperlosviluppodiapplicazioniCGI,manonl’unico
– illinguaggioPython èoggiunlinguaggiodiscripting moltodiffuso
– programmiCGIpossonoesserescritticomescriptdellashell delsistemaoperativo(Bash shell
script,adesempio)ocomeprogrammiinlinguaggioCcompilatiinlinguaggiomacchina
PassaggiodiparametridawebbrowseradapplicazioneCGI
•
Iparametrivengonoforniticonun’unicastringainformatoURLencoded:
•
Esempio:
nome1=valore1&nome2=valore2&…&nomen=valoren
nome=Silvia&cognome=Di+Stefano&eta=23
•
ÈilserverHTTPchesioccupadipassarlialprogrammaCGIsecondoduemodalità:
– POST:lastringavienefornitasulcanalestandardinput,ilprogrammaleggeràlastringadaSTDIN
(standardinput)
– GET:lastringavienememorizzatanellavariabilediambienteQUERY_STRING
•
Lamodalitàvienespecificatadalserver(sullabasedelleindicazionidelclient)mediantela
variabilediambienteREQUEST_METHOD
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
21
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
CompitidelprogrammaCGI
•
•
•
•
•
•
Acquisire lastringaconiparametri
Eseguireilparsing deiparametriricevutiininput,ossiaunasuddivisionedellastringaper
isolarelecoppie“nome=valore”esuccessivamenteperseparareilnomedelparametrodal
suovalore
Eseguirel’elaborazionerichiesta
Produrreunoutputcompatibileconlecapacitàdivisualizzazionedelbrowser(tipicamente
outputinformatoHTML)
L’outputdevecontenereunaintestazionecheneindichiilformatosecondolacodifica
MIME (Multipurpose InternetMailExtensions),seguitodaunarigavuota
Esempio:
Content-type: text/html
ProgrammiCGIinPerl
•
•
•
InPerlesisteunalibreriaperimplementareleprincipalifunzionidellaprogrammazioneCGI:
cgi-lib.pl
Conl’istruzionerequire èpossibilecaricareunalibrerianelprogrammaPerl
require “cgi-lib.pl”;
Tralesubroutinemesseadisposizionedallalibreriac’è“ReadParse”:
– Leggelastringadeiparametri(ricevutiindifferentementeconmetodoGEToPOST)
– Suddivideinomideiparametridaivalori
– Costruiscel’arrayassociativo%in:
$in{nome} = valore
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
22
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
CGIinPerl:unesempioelementare
<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”;
Esempio:indirizzarioon-line,schemadell’applicazione
•
•
•
ProgrammaWebperl’archiviazionediindirizzielaricercasulcatalogo
L’archivioèsuunDBMSrelazionale:database“marcodb”,tabella“rubrica”
Schemadell’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:programmaCGIcheeseguelaselezionedeidatidalDBinbaseaiparametrispecificati
delete.cgi:programmaCGIcheeliminaunrecorddalDBinbasealsuo“id”
insert.html:form diinputdeidatidainserirecomenuovorecordnellatabella“rubrica”sulDB
insert.cgi:programmaCGIcheeseguel’inserimentodeidatiinunnuovorecordsulDB
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
23
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Indirizzarioon-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>
Indirizzarioon-line:inserimentocriteridiricerca(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>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
24
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Indirizzarioon-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";
Indirizzarioon-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";
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
25
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Indirizzarioon-line:Forminserimentodati(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>
Indirizzarioon-line:scriptCGIdiinserimentodati
#!/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";
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
26
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Indirizzarioon-line:fogliodistyle(style.css)
body {
padding: 0pt;
margin: 0pt;
}
p {
margin-left: 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;
}
a {
text-decoration: none;
}
table {
margin-left: 8pt;
}
a:hover {
color: red;
}
form th {
text-align: right;
background: white;
border-bottom: none;
}
dt a {
text-decoration: none;
padding: 3pt;
color: green;
border: solid 2pt white;
}
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: 1pt solid green;
padding: 3pt;
}
dd {
padding-bottom: 20pt;
}
IllinguaggioJava,l’ambientedisviluppoediesecuzione
•
•
•
•
Java èunlinguaggioObjectOriented moltodiffusoapartiredaglianni‘90
Èunodeilinguaggipiùdiffusiperlosviluppodiapplicazioniwebbased eperdispositivi
mobili
IllinguaggioJavaèindipendentedallapiattaformasucuivieneeseguito
L’indipendenzadallapiattaformavienerealizzatamediantelaJavaVirtualMachine,un
ambientediesecuzioneperiprogrammiJavachefornisceun’astrazionedelcomputeredi
alcunideiservizidelsistemaoperativo:inquestomodoilprogrammasfruttaleAPIdella
JVMenonquelledelsistemaoperativoospite
SistemaOperativo
JVM– JavaVirtualMachine
ProgrammaJava
•
•
JDK (JavaDevelopmentKit)èl’ambientedisviluppoperJava:ilcompilatorejavac traduceil
sorgenteJavainbytecode,unasortadilinguaggiomacchinaperlaJVM
JRE (JavaRuntimeEnvironment)èl’ambientediesecuzione(laJVM)periprogrammiJava
codificatiinbytecode
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
27
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JavaApplicationeJavaApplet
•
UnprogrammainlinguaggioJavaèunaJavaApplication:èeseguitasuuncomputermedianteuna
JavaVirtualMachinecheoffrel’ambientediesecuzionedelbytecode
nome.java
javac
nome.class
java
0011010101
sorgentein
linguaggioJava
compilatore
Java(JDK)
programmain
bytecode
ambientediesecuzione
Java(JRE)
processoeseguito
dallaJVM
•
UnaJavaApplicationpuòimplementareun’interfacciagrafica(GUI)indipendente
dall’interfacciadelsistemaoperativoospite,medianteipackageSWINGeAWT(abstract
window toolkit)
•
UnApplet èunprogrammaJavaeseguitoall’internodelwebbrowsermedianteunplug-in
(componenteaggiuntivodelbrowser)cherealizzaunambientediesecuzioneeunaJVM
all’internodelbrowser
webbrowser
•
nome.java
javac
nome.class
sorgentein
linguaggioJava
compilatore
Java
programmain
bytecode
Java
plug-in
ambientediesecuzione
Java(interpretebytecode)
0011010101
processoeseguitodalla
JVMnelbrowser
ConunAppletvengonoimpegnatelerisorsedelclient;l’applethanumerosivincoliimpostidalle
politichedisicurezzadelbrowseredellaJVMrealizzatacomeplug-in
JEE:JavaEnterpriseEdition
•
•
•
JEE (JavaEnterpriseEdition)èunaspecificaapertaperlarealizzazionediun’architetturaper
applicazioniwebbasatesullinguaggioJavaesuunaseriedicomponentisoftwarerese
disponibiliallewebapplication resedisponibilinell’ambitodell’architettura
L’architetturaèbasatasuunApplicationServerJEEcherendedisponibililecomponentiJEE
efornisceunambientediesecuzioneperleapplicazioniJavasviluppatesecondolaspecifica
LecomponentiJEEsonoditretipi
1. Componentiweb:Servlet eJSP,MVC(ModelView Controller,unaspecificaperl’implementazione
dellapartedifront-end dell’applicazione),JSF(JavaServerFaces),ecc.
2. Componentienterprise:EJB(EnterpriseJavaBeans),JMS(JavaMessageService),JNDI(Java
Naming andDirectoryInterface),ecc.
3. Componentiperl’interazioneconildatabase:JDBC(JavaDatabaseConnectivity),JavaTransaction
API,JavaPersistence API,ecc.
•
•
•
EsistononumerosiprodottidimercatooopensourceditipoApplicationServerJEE(es.:
Glassfish,JBoss,IBMWebSphere,ecc.)
AdeccezionedellecomponentiEnterpriseunawebapplication Javapuòessereresa
disponibileanchetramiteunWebServerJavaEnabled (es.:ApacheTomcat)
GliApplicationServerJEEediWebServerJavaEnabled implementanoilprotocolloHTTP
offrendodelleclassidioggettialleapplicazioniJavaperricevereidatiininputerestituirein
outputunapaginacodificatainHTML(alparidiquantooffertodaCGI)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
28
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JEE:JavaEnterpriseEdition
•
•
IduetipidiprogrammaJavaperlarealizzazionediunawebapplication sullabasedella
specificaJEEsonoleServlet eleJSP
Servlet
– èunprogrammaJavachevienecompilatoinbytecode dall’ApplicationServerJEElaprimavoltache
vieneeseguito
– sfruttaappositioggettiemetodimessiadisposizionedall’ApplicationServerJEEperricevereidati
passatitramiteimetodiGEToPOSTdiHTTP
– difattoèl’equivalentediunprogrammaCGInelcontestoJEE
•
JSP(JavaServerPages)
– sipresentacomeunapaginaHTMLcontenentedeitag specialichedelimitanoistruzioniscrittein
linguaggioJava
– lapaginaJSPvienecompilataetrasformatanelbytecode diunservlet laprimavoltacheviene
richiamatadalbrowserdiunutente
– anchelapaginaJSPsfruttaappositioggettiemetodimessiadisposizionedall’ApplicationServerJEE
perricevereidatipassatitramiteimetodiGEToPOSTdiHTTP
•
RispettoadunascriptCGIunprogrammaJEE
– èmoltopiùefficienteperchécompilatoinbytecode
– èpiùefficienteemenoonerosointerminidirisorsedelsistemaoperativoperchénonvieneaperto
unprocessoperciascunachiamataalprogramma(comeavvieneperiCGI)
– èportabiledaunapiattaformaadun’altra(anchesusistemioperatividiversi)
•
Servlet eJSPnonusanoAWTeSWING,maHTMLperprodurrel’interfacciaconl’utente
JavaWebApplication
Sistemaoperativoserver
JavaApplicationServer/WebServerJavaEnabled
JavaVirtualMachine
JavaWebApplicationA
HTML
GIF/
JPEG
CSS
JSP
Java
Beans
JavaWebApplicationB
HTML
Servlet
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
GIF/
JPEG
CSS
JSP
Java
Beans
Servlet
29
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JavaServlet
•
•
•
UnaservletèunaclasseJavaeseguibiledaunWebServerJavaEnabled,ossiadotatodiuna
componentedenominataservletcontainer
UnsservletèunprogrammapubblicatoinretedalWebServercomeunaqualsiasialtra
risorsaweb(unapaginaHTML,un’immagine,unoscriptCGI,ecc.):ancheunsservletè
identificatodaunaspecificaURL
LeservletoperanocomegliscriptCGIinunamodalitàrequest/response:
– ilclient(browser)dell’utentenefarichiestatramitelaURLassociata
– ilserverattivalaservletelaesegue
– ilservernerestituisceilrisultato,ciòcheilserverrestituiscecome“output”,comecontenutodella
risorsa(es.:formattatoinHTML)echiudelaconnessione
•
•
•
LeservletAPIdiJavapermettonodiprogrammareunaservletinmanieracompletamente
indipendentedallecaratteristichedelserver,delclientedelprotocolloditrasferimento
IlcodicedelprogrammaservletènormalecodiceJava:puòusaretuttelelibrerieeleutility
dellinguaggio,tracuilaconnessioneaDBMStramiteJDBC,l’usodiXMLtramiteJAXP,ecc.
LeservletsostituisconoiclassiciscriptCGIfornendoungradodisicurezzamaggiore,eun
livellodiastrazionesuperioreperilprogrammatore
LeslidesuJavaServletsonotratteinpartedalledispensedelprof.GiuseppeDellaPenna
delDipartimentodiInformaticadell’UniversitàdegliStudidell’Aquila(http://www.di.univaq.it/gdellape/)
JavaServlet eWebApplications
•
•
UnaJavaWebApplicationèuninsiemediservlet,JSP,pagineHTML,immagini,filedistile,
librerie(package)Javaraccoltiinunadirectorydelwebapplication server
IfilechecompongonolaJavaWebApplicationdevonoessereorganizzatiinsottodirectory
specifiche inmodotaledaconsentirealserverdiaccedereallerisorsepubblicate
nell’ambitodellawebapplication:
– LasottodirectoryWEB-INF,contienealcunifilediconfigurazione,tracuiilwebapplication
deployment descriptor (web.xml)
– LasottodirectoryWEB-INF/classes,contieneleclassiJavadell’applicazione,compreseleservlet;
secondoleconvenzioniJava,lesingoleclassiandrannoposteall’internodiunalberodidirectory
corrispondentealloropackage
– LasottodirectoryWEB-INF/lib,contienelelibrerieJARnecessarieall’applicazione,comprese
quellediterzeparti,comeidriverJDBC
– Tuttelealtresottodirectorydelcontesto,compresalastessaroot directory,conterrannonormali
filecomepagineHTML,foglidistile,immaginiopagineJSP
•
•
SpessoperlapubblicazionediunaJavaWebApplicationsiutilizzaraccoglieretuttiifileele
sottodirectorydell’applicazioneinunfileditipoWAR (WebArchive):vienepoieseguitoil
deploy delWARsull’ApplicationServercheeseguiràl’estrazionedeifiledalWARelaloro
collocazionenellasottodirectorycheidentificailcontesto
IlfileWARspessovieneprodottomedianteunambientedisviluppoIDE (Integrated
DevelopmentEnvironment)comeEclipse oNetBeans
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
30
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JavaServlet eWebApplications
•
•
•
•
PerrendereunaclasseJavadisponibilecomerisorsaditiposervlet,ènecessario
configurarnelecaratteristichetramiteunfiledettowebapplicationdeploymentdescriptor
Questofile,denominatoweb.xmlecodificatoinXML,deveesserepostonelladirectory
WEB-INFdell’applicazione
<?xmlversion="1.0"encoding="ISO-8859-1"?>
Ciascunaservletèconfiguratainun
<!DOCTYPEweb-app PUBLIC"-//SunMicrosystems,
elemento<servlet> distinto;
l’elemento<servlet-class> deve Inc.//DTDWebApplication2.3//EN”
"http://java.sun.com/dtd/web-app_2_3.dtd”>
contenereilnomecompletodella
<web-app>
classecheimplementalaservlet
<display-name>ProgettoWeb</display-name>
Ènecessariomappareciascunaservlet <description>Blablabla...</description>
<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>
perlaservletnelseguentemodo:
<servlet-mapping>
http://indirizzo/contesto/urlpattern
<servlet-name>Servlet1</servlet-name>
<url-pattern>/funzione1</url-pattern>
</servlet-mapping>
</web-app>
JavaServlet
•
•
Allabasedell’implementazionediunaservletc’èl’interfacciaServlet,cheèimplementata
daunaseriediclassibasecomeHttpServlet;tutteleservletchevengonocreatesono
derivate(extends)daquest’ultima
LealtredueclassibaseperlacreazionediunaservletsonoServletRequeste
ServletResponse
– Un’istanzadiServletRequestvienepassatadalcontestoallaservletquandovieneinvocato,e
contienetutteleinformazioniinerentilarichiestaeffettuatadalclient:questecomprendono,ad
esempio,iparametriGETePOSTinviatidalclient,levariabilidiambientedelserver,gliheadereil
payloaddellarichiestaHTTP
– Un’istanzadiServletResponsevienepassataallaservletquandosirichiededirestituireun
contenutodainviarealclient;imetodidiquestaclassepermettonodiscriveresuunostreamche
verràpoiindirizzatoalclient,modificaregliheaderdellarispostaHTTP,ecc.
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
31
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
CiclodivitadiunaServlet Java
•
Ilciclodivitadiunaservletèscanditodaunaseriedichiamate,effettuatedalcontainer,a
particolarimetodidell’interfacciaServlet
1. Inizializzazione:quandoilcontainercaricalaservlet,chiamailsuometodoinit.Tipicamente
questometodovieneusatoperstabilireconnessioniadatabaseepreparareilcontestoperle
richiestesuccessive.Asecondadell’impostazionedelcontestoe/odelcontenitore,laservletpuò
esserecaricataimmediatamenteall’avviodelserver,adognirichiesta,ecc.
2. Servizio.Lerichiestedeiclientvengonogestitedalcontainertramitechiamatealmetodoservice.
Richiesteconcorrenticorrispondonoaesecuzionidiquestometodointhreaddistinti.Ilmetodo
servicericevelerichiestedell’utentesottoformadiunaServletRequesteinvialarisposta
tramiteunaServletResponse
3. Finalizzazione.Quandoilcontainerdecidedirimuoverelaservlet,chiamailsuometododestroy.
Quest’ultimovienesolitamenteutilizzatoperchiudereconnessioniadatabase,oscaricarealtre
risorsepersistentiattivatedalmetodoinit.
Ènecessariosovrascrivereilmetododestroysoloseesistonoeffettivamenteoperazionidafare
primadelladistruzionedellaservlet
•
LaclasseHttpServletspecializzaquestosistemaperlacomunicazioneHTTP,fornendoin
particolareduemetodi:doGetedoPost,corrispondentialleduerequestpiùcomuniin
HTTP.IlmetodoservicedelleclasseHTTPServletprovvedeautomaticamenteasmistare
lerichiestealmetodoopportuno
CiclodivitadiunServlet Java
•
IlJavaApplicationServerinvocaalcunimetodistandardimplementatidallaservlet inalcuni
momentispecificidelsuociclodivita:
– init(...):ilmetodovieneinvocatounasolavoltaquandol’applicazioneJavavieneavviataperla
primavolta(inizializzazione);
– service(...):ilmetodovieneinvocatoognivoltacheilJavaApplicationServerriceveuna
richiestadalclientperlaURLcorrispondenteallaservlet;
– doGet(...):èilmetodoutilizzatopergestirelarichiestaHTTPmedianteicomandiGETeHEAD;
– doPost(...):èilmetodoutilizzatopergestirelarichiesta
Java Application Server
HTTPmedianteilcomandoPOST;
(servlet container)
– destroy(...):èilmetodoinvocatounasolavoltadal
JavaApplicationServerquandovieneterminatalaweb
init(…)
service(…) destroy(…)
application;concludeilciclodivitadellaservlet
1
init
service
2
3
4
destroy
Web Server
inizializzazione
chiamata
dal client
interruzione
1
2
3
4
Web Browser
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
32
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
LaclasseHttpServlet
•
•
Unaservletestendelaclassejavax.servlet.http.HttpServlet
PergestirelerichiesteHTTP,sisovrascrivonoopportunamenteimetodicorrispondenti:in
questoesempio,ilmetododoGetverràchiamatopergestirelerichiesteHTTPGET.
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){
//...
}
}
InizializzazionedelServlet
•
•
Ilmetodoinit,dopoaverchiamatolostessometododellaclassesuperiore,puòprocedere
conl’inizializzazionedellaservlet
Secisonoproblemidiinizializzazione,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){
//...
}
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
33
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Acquisirelarichiestadelclient
•
•
•
•
ImetodidoGetedoPostpossonoleggereiparametriinterpretatidellarichiestatramite
getParameter()egetParameterValues()
doGetpuòleggerelastringadiqueryinmanierarawchiamandogetQueryString()
doPostpuòleggereilpayloaddelmessaggioinmanierarawtramiteglistreamrestituitida
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();
}
}
...
Inviarelarispostaalclient
•
L’oggettoHttpServletResponse fornitoatuttiimetodidiserviziopermettedicostruirela
rispostadainviarealclient
– IlmetodosetContentType(String) permettedidichiarareiltipoMIMErestituitodallaservlet (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();
}
}
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
34
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JavaServerPages
•
•
LeJavaServerPages (JSP)semplificanoilprocessodicostruzionedisitiwebpermettendo
l’inclusionedicontenutidinamiciel’interazioneconleclassiJavacheincapsulanolalogicadi
businesschestaallabasediunawebapplication
LeJSPsonocostituitedaunacombinazioneditestoetag:
– iltesto (eitag HTML)rappresentailcontenutoinformativodiunapaginaweb
– itag JSPinvecepartecipanoallacostruzionedellepaginedinamicheproducendoicontenuti
medianteistruzionidiprogrammainlinguaggioJava
•
•
•
QuandounaJavaServerPagevienerichiesta,ilcontainerJSPprovvedeaconvertirlainuna
servlet,compilarlo equindieseguirelaservlet perelaborarelarichiestaHTTP
Laconversioneavvienesoltantoneicasiincuiilsorgentedellapaginahasubitomodifiche
rispettoall’ultimaconversioneeffettuatadalcontainer
Inquestomodosiriduconoitempidielaborazionedellerichiesteesiottieneunincremento
generaledelleprestazioni
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:includonodelleistruzionenellinguaggiodiscripting associatoallapagina(Java);inquesto
tipoditag sonocontenuteleistruzionicheimplementanoletipichestrutturealgoritmichedi
sequenza,condizioneeiterazione,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”/>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
35
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JavaServerPages
•
IlmotoreJSPdell’ApplicationServermetteimplicitamenteadisposizionedelprogrammatore
deglioggettiJavachepossonoessereutilizzatinellepagineJSPsenzalanecessitàdi
dichiararli
•
request:èl’oggettochecontieneleintestazionidellarichiestaHTTPequindianchei
parametripassatiallapaginaJSPattraversoimetodiGEToPOST
– IlmetodogetParameter(“X”) dell’oggettorequest consentediacquisireilparametrofornitoalla
paginaJSPidentificatoconilnome“X”(adesempioilvalorediuncampodiunaform)
– Es.:<p>Ciao <%=request.getParameter(“nome”)%></p>
•
response:èl’oggettochericevel’outputprodottodallapaginaJSPelorestituisce
all’application serverperl’invioaclient
– L’oggettovieneutilizzatoimplicitamenteattraversol’oggettoout
– Es.:<% out.println(“Importo:” + valore); %>
– oppure:<%=valore%>
JavaServerPages:unesempioelementare
ApplicazionewebJSPperilcalcolodeiprimin 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>
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
36
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
JavaServerPages:unesempioelementare
ApplicazionewebJSPperilcalcolodeiprimin 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>
Programmazione“latoclient”eWeb2.0
•
Ilmodelloarchitetturaleefunzionaledelleapplicazioniweb(JEE,CGIorealizzateconaltre
tecnologieeframework)èbasatosulparadigma“request/response”:
– ognirispostacostruitadinamicamentedalservermedianteunprogrammaCGIounprogramma
Javaafrontediunarichiestadelclientcostituisceunapaginadellawebapplication
– L’utentepuòselezionareunsemplicelinkocompilareunaform estremamentecomplessa,
costituitadadecineocentinaiadicampidiinput,inognicasoilserverraccoglietuttiidatidella
richiesta,elaboraunarispostaelainviaalclientchedeveeseguireilrendering diunapaginaweb
completamentenuovaedifferentedallapaginaprecedente
•
•
Perquantolepaginewebsianogradevoliebasatesuunarappresentazionegraficao
un’impaginazionetipograficacomplessadelleinformazioni,questomodellonondifferisce
moltodaquelloutilizzatonellemascherealfanumerichetipichedelleapplicazioni
centralizzatesuunhostosuunmainframe
Leapplicazionidotatediun’interfacciautentegrafica(leapplicazioniperMicrosoftWindows
operX11inambienteUNIX)cihannoinveceabituatoadunadiversaepiùcomplessa
interazionetral’utenteedilprogramma:adogniinterazionedell’utenteconl’interfaccia
corrispondeunareazionedapartedelprogrammachesimanifestaconunavariazionedi
alcunepartidelcontenutodellaschermatachestiamoutilizzando
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
37
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Programmazione“latoclient”eWeb2.0
•
•
•
Ilcosiddetto“Web2.0”introduceunlivellodicomplessitàsuperioresullewebapplication
perrealizzareun’interazioneconl’utenteparagonabileaquelladelleapplicazioniclient
ConletecnologieintrodotteconilWeb2.0sigettanolebasiancheperlarealizzazionedi
applicazioniperilmondo“mobile”:nonsempliciapplicazioniwebfruibilimedianteilweb
browserpresentesutablet esmartphone,mavereeproprieapplicazionicheoperanosul
sistemaoperativodeldevice mobile
Glielementichesonoallabasediquestosaltoinavantinellaprogettazionediapplicazioni
webbased sonosintetizzatineiseguentipunti:
– capacitàdelwebbrowserdieseguiredelcodicediunprogrammainlinguaggioJavascript
– 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
Javascript
•
•
•
ÈunlinguaggioObjectOriented lacuisintassiricordaquelladiJava
Èsupportatodauninterpreteedaunambientediesecuzionepresenteinquasituttiiweb
browser
IlcodicediunprogrammaJavascript puòessereinseritoinunapaginaHTML:
nell’intestazionedellapagina,inmodalità“inline”all’internodeitag dellapaginaoinunfile
separatorichiamatodauntag postonell’intestazionedellapagina
•
IlbrowsercreaunambientediesecuzionedelprogrammaJavascript conunnamespace
legatoalDOMdeldocumentoHTMLpercollegarel’esecuzionedellefunzioniJavascript agli
eventiacuisonosensibiliglioggetti(componentidelDOM)checompongonoildocumento
stesso
•
L’oneredieseguirelaproceduraJavascript ricadesulclient:èlaCPUdelclientcheè
impegnatanell’elaborazioneenelcalcolo,èlamemoriadelclientchevieneimpegnataper
gestirelevariabili,lestrutturedatieglioggettiutilizzatidalprogramma
•
L’ambientediesecuzioneJavascript internoalbrowserimponeuninsiemedivincoli
perragionidisicurezza:conilprogrammaJavascript nonèpossibileutilizzare
pienamentelerisorsedelclient(es.:nonèpossibilescrivereunfilesulcliento
accedereadunDBMSsulclient)
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
38
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
Javascript:unesempioelementare
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>
Javascript:unesempioelementare
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>";
}
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
39
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
AJAXeDynamic HTML
•
•
•
•
•
•
•
AJAX (Asynchronous JavaScriptandXML),èunatecnicadisvilupposoftwareperla
realizzazionediapplicazioniwebinterattive
LosviluppodiapplicazioniwebconAJAXsibasasuunoscambiodidatiinbackgroundfra
webbrowserewebserver,checonsentel'aggiornamentodinamicodiunapaginawebsenza
esplicitoricaricamentodellapaginastessadapartedell'utente
AJAXèasincrono:idatiextrasonorichiestialserverecaricatiinbackgroundsenza
interferireconilcomportamentodellapaginaesistente
IlformatoperloscambiodidatitrailclienteilserverèspessoJSON (JavaScriptObject
Notation),cheoffreunformatostandardmoltosempliceperrappresentaresequenzedi
coppieditipo“chiave:valore”,incuiil“valore”puòasuavoltaessereunacollezionedi
coppie“chiave:valore”
TipicamentelefunzionirichiamatesonoscritteconillinguaggioJavaScriptesonopresenti
nellapaginaHTML
JQuery èoggilapiùfamosalibreriaJavascript cheimplementaAJAX,maanchemoltialtri
aspettidelWeb2.0;èunalibreriadifunzioniprogettatepersemplificarelacostruzionedi
paginewebdinamiche,conunagestionedeglieventimoltoefficace
Èsupportatadanumerosissimiframeworkdisviluppo(Microsoft.net,JEE,ecc.)
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 homepage,pressoUniversity ofCaliforniaat Berkeley)
http://www.aquilante.net/perl/
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
40
UniversitàdegliStudiRomaTre- CorsodiLaureainMatematica
a.a.2016/2017
TimBerners-Lee
SirTimothyJohnBerners-LeeèunodegliinventoridelWorldWideWeb,autoredelprimoserverHTTPedelprimoclientperaccederearisorsedistribuite in
retemedianteilprotocolloHTTP;nellafotoèritrattoneglianni‘90accantoalmonitordellasuaworkstationNeXT alCERNdiGinevra,chesuccessivamenteha
abbandonatopertrasferirsialprestigiosoLaboratoriodiComputerSciencedelMITdiBoston
M.Liverani- DispensedelcorsoIN530- Sistemiperl'elaborazionedelleinformazioni
41