Professional Documents
Culture Documents
Web Technológiák
Web Technológiák
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
Ütemterv: 31k
Lezárás: aláírás, kollokvium (5 kredit)
házi feladat (kb. 60 óra), vizsga (í + sz)
Záróvizsga tárgy (egyes szakirányokon) !!!
A tárgy célja, tematikája
Komponensek:
atom: atomi komponens (pl. szöveg paragrafus,
kép, stb.)
kompozit: összetett komponens, konténerbe
szervezett komponensek együttese
link: kapcsolati komponens, hivatkozás egy
másik komponensre
Egyszerűségének köszönhetően igen
elterjedt: több hipertext-rendszer alapját
képzi a Dexter-modell.
Trellis-féle (használati) modell
Üzletiesített média
Hírek, reklámok, magazinok, stb.
On-line rádió és televízió
Szolgáltatási csatorna
Webáruházak, InternetBanking, árverés
Közösségi tér
Kommunikáció, közösség (iwiw, myspace,
youtube, stb.)
Tartalomkereső rendszerek
Yahoo, Google, AskGeeves, stb.
Vigyázat, fogalomzavar
World Wide Web
hipertext (hipermédia) dokumentumrendszer
szinonim nevek: WWW, web
Internet
globális kiterjedésű számítógéphálózat
szinonim nevek: világháló
internet / intranet
az Internet technológiáját használó, de attól
elszigetelt (vagy korlátozottan kapcsolt)
számítógéphálózat
Az Internet (vagy egy internet) szolgáltatása
lehet a WWW hozzáférés.
A HTML nyelv
<html>
<head>
<title>WWW Oldal</title>
</head>
<body>
<div align="center">
Ez egy példa HTML dokumentumra.
</div>
</body>
</html>
HTML elemek
Kép beillesztése:
<img src=”url”/>
Hiperhivatkozás
<a href=”url”>link szöveg</a>
Megjegyzés
<!-- … -->
HTML elemek - keretek
<table>
<tr>
<th>elso oszlop</th>
<th>második oszlop</th>
<th>harmadik oszlop</th>
</tr>
<tr>
<td>1. adat</td>
<td colspan=”2”>2-3. adat</td>
</tr>
</table>
Stílusok
A probléma:
egységes webhely arculat (sok oldal)
sok egyedi szerkesztési igény
nem tárolt oldalakra is
arculatváltás
Az igény:
stílust szabályozó meta-adatok
dokumentumból való kiemelhetőség
A megoldás
STYLE attribútum bevezetése
stíluslapok
CLASS attribútum bevezetése
Stílus kaszkád
Hivatkozás szövegre:
a:link
a:visited
a:hover
a:active
Szöveg részekre:
:first-line
:first-letter
Média szelektorok:
@media print | screen | print,screen
Referenciák, tutoriálok
www.w3schools.com
www.w3c.org
A http protokoll
Kérés-válasz protokoll
Két szereplője:
kliens: aki kérdez
szerver: aki válaszol
Szcenárió (a kliens szemszögéből):
kapcsolat felépítés (TCP)
kérés küldés
válasz fogadás
kapcsolat bontás (?)
HTTP/1.1 -től lehetőség Keepalive
kapcsolatra!
Üzenetformátum
RFC2616
Kérés (egyszerű):
<method> <url> <crlf>
Teljes kérés:
<method> <path> <protocol version> <crlf>
*(message-header <crlf>)
<crlf>
[<content-data>]
Válasz:
kérés metódusától függ
Kérés metódusok
GET
dokumentum kérése
POST
dokumentum kérése, de van paraméterátadás a
kérés tartalom részében
HEAD
dokumentum meta-adatok kérése
PUT, MKCOL, DELETE, OPTION, stb.
speciális alkalmazások (pl. WebDAV) számára
fenntartott metódusok
Egy forgatókönyv
Böngészőbe beírtuk a
http://users.iit.uni-miskolc.hu/~repasi/ URL-t
domain névfeloldása után kapcsolódás a 80-as
porthoz
fejrész kérése:
HEAD /~repasi/ HTTP/1.1
Host: users.iit.uni-miskolc.hu
Várakozás válaszra
Egy forgatókönyv 2
Szerver válasza:
HTTP/1.1 200 OK
Date: Tue, 19 Feb 2008 12:19:16 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) mod_jk2/2.0.4 PHP/4.3.10-22
mod_ssl/2.0.54 OpenSSL/0.9.7e
Last-Modified: Mon, 15 Mar 2004 12:58:20 GMT
ETag: "247db87b-310-929f300"
Accept-Ranges: bytes
Content-Length: 784
Content-Type: text/html
Státusz kódok
100-199: informális üzenetek
200-299: sikeresség
300-399: átirányítás
400-499: ideiglenes hiba
500-599: fatális hiba
Egy forgatókönyv 3
Böngésző kéri a dokumentum tartalmát:
GET /~repasi/ HTTP/1.1
Host: users.iit.uni-miskolc.hu
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
GET metódussal:
URL-encoding
A form elem action attribútumában lévő URL-t
kiegészíti a beviteli elemek név=érték listájával.
Az URL hossza korlátos, csak kis mennyiségű
adat küldhető.
Adatküldés http kérésben
POST metódussal:
A kért URL a form action értéke
A http kérés fej tartalmaz content-type és
content-lenght attribútumokat
A beviteli elemek név=érték listája a http kérés
tartalom részében kerülnek átadasra
Fájl feltöltés csak ezzel a metódussal lehetséges,
”multipart/mime” kódolással (form elem
encoding att.)
Űrlap adatok feldolgozása
Speciális lehetőség:
action=”mailto:<email cím>”
Szerver oldali feldogozó program által:
Beviteli elemek értékének kinyerése
Adatellenőrzés méretre, típusra!
Tartalom értelmezése
Veszély:
Egy feldolgozó bárhonnan kaphat bemenetet, nem
csak a hozzá tartozó űrlaptól!
Alapelv:
„A felhasználói bemenet megbízhatatlan!”
Weboldalak dinamikus
előállítása
Statikus weboldal:
Tárolt oldal, ált. a szerver fájlrendszerén
Módosítása automatizálható
Lehet program által generált
Előállítása a felhasználói eseményekkel asszinkron
Dinamikus weboldal:
Általában nem tárolt oldal
Program állítja elő vagy módosítja
Előállítása felhasználói eseménnyel szinkron
Az előállító program a webszervertől szeparált, futhat
A böngészőben!
CGI környezetben
Beépülhet a webszerverbe, mint content handler
Weboldalak dinamikus
előállítása
Kliens oldali megvalósítás: a böngészőben fut
Beágyazott objektum (pl. Java Applet, ActiveX vezérlő,
Flash, stb.)
A megjelenítő terület egy téglalap alakú részét kezeli
A beágyazó dokumentumtól független
Saját eseménykezelővel rendelkezik
Gyakran korlátozott jogosultságú „kisalkalmazás”
Futtató környezetét a böngésző (plug-in) biztosítja
A dokumentum részét képző script
A böngésző értelmezi
A dokumentumhoz kötött program
Böngésző és dokumentum objektumokon tud
manipulálni
A dokumentum elemeinek és a böngésző eseményeit
kezeli
Nyelve többféle lehet (pl. JavaScript, VBScript)
Weboldalak dinamikus
előállítása
Szerver oldali megvalósítás:
CGI szabvány:
Bizonyos (konfigurált) URL-ek kezelésére a szerver az
URL-hez kötött programot indít (gyerekprocesszben)
Paramétereket környezeti változóként adja át
A http kérés fejrésze paraméter, adat tartalma stdin
A kiszolgáló processz kimenete (stdout) a http válasz
lesz
A kiszolgáló processz hibakimenetét (stderr) a szerver
naplózza
Content handler (webszerver tulajdonság):
A webszerver beépülő modulja (plug-in) -> értéknövelt
webszerver, alkalmazásszerver
URL-hez vagy fájltípushoz köthető
A http kérésre a választ a content handler állítja elő
JavaScript
Netscape fejlesztés, korábbi neve LiveScript
A „Java” megnevezés üzleti fogás, a Sun Java
technológiájához nincs köze!
Weboladlak dinamikussá tételére fejlesztették ki
Szerver és kliensoldali használatra egyaránt
alkalmas, de csak kliens oldali használata terjedt el
Szintaxisa C szerű, gyengén típusos, semantikája a
Self nyelvhez áll közel.
ECMA-262 (ECMAScript) szabvány implementációja,
sok kiegészítéssel.
Rokonok: JScript, VBScript, ActiveScript, JSON,
AppleScript
HTML események
Legfontosabb elemek:
Document:
a dokumentumot reprezentálja
Anchors, forms, images, links tömb tagok
URL, body, domain, cookie adattagok
Open, close, write metódusok
GetElementById, getElementsByName,
getElementsByTagName navigációs metódusok
<img src=”kep.jpg”
onClick=”self.src='kep2.jpg'”/>
Példa
<body
onLoad=”document.getElemetById('hidepage').style.visibility
= 'hidden'”>
<div id="hidepage">Loading...</div>
Window:
A böngésző megjelenítő területe
A DOM hierarchia gyökere
Navigator:
Böngészőt reprezentáló objektum
A JavaScript runtime hozza létre
Screen:
A megjelenítő képernyő tulajdonságait hordozza
History:
A böngészővel meglátogatott URL-ek listája
Location:
Címsor, ami az URL-t tartalmazza
Példa – kép átméretezés
<html>
<head>
<script type="text/javascript">
function changeSize()
{
document.getElementById("compman").height="250"
document.getElementById("compman").width="300"
}
</script>
</head>
<body>
<img id="compman" src="compman.gif" width="107" height="98" />
<br /><br />
<input type="button" onclick="changeSize()" value="Change height and
width of image">
</body>
</html>
Példa – új oldal előállítása
<html>
<head>
<script type="text/javascript">
function createNewDoc()
{
var newDoc=document.open("text/html","replace");
var txt="<html><body>Learning about the DOM is
FUN!</body></html>";
newDoc.write(txt);
newDoc.close();
}
</script>
</head>
<body>
<input type="button" value="Open and write to a new document"
onclick="createNewDoc()">
</body>
</html>
Példa – új dokumentum több
keretben
<html> <html>
<frameset id="myFrameset" <head>
cols="50%,50%"> <script type="text/javascript">
function newSrc()
<frame id="leftFrame" {
src="frame_src.htm">
parent.document.getElementById("leftFrame"
<frame id="rightFrame" ).src= "http://w3schools.com"
src="frame_a.htm"> parent.document.getElementById("rightFrame").
src= "http://google.com"
</frameset> }
</html> </script>
</head>
<body>
<a href=”#” onclick="newSrc()">link</a>
</body>
</html>
Példa – üzenetablak
megjelenítés
<html>
<head>
<script type="text/javascript">
function disp_alert()
{
alert("I am an alert box!!")
}
</script>
</head>
<body>
</body>
</html>
Példa – input ablak
<html>
<head>
<script type="text/javascript">
function disp_prompt()
{
var name=prompt("Please enter your name","Harry Potter")
if (name!=null && name!="")
{
document.write("Hello " + name + "! How are you today?")
}
}
</script>
</head>
<body>
</body>
</html>
CGI
<HTML><HEAD>
<TITLE>output of HTML from CGI script</TITLE>
</HEAD><BODY>
<H1>Sample output</H1>
What do you think of <STRONG>this?</STRONG>
</BODY></HTML>
CGI implementáció
2. Kérés:
GET /private HTTP/1.1
Host: localhost
Authorization: Basic QwxhZGRpbjpvcGVuIHNlc2FtZQ==
2. Válasz:
HTTP/1.0 200 OK
Date: Sat, 27 Nov 2004 10:19:07 GMT
Content-Type: text/html
Content-Length: 10476
...
Basic authentication
Probléma:
a kód a „felhasználó:jelszó” -t tartalmazza
a base64 kód nem titkosítás
a böngésző minden kérésben küldi
nincs kilépés / kiléptetés
jelszóátvitellel járó eljárás
Lehetséges biztonsági megoldás:
https kommunikáció (http ssl titkosítású
csatornán)
Digest authentication
Challange/Response azonosítás
1. Kérés:
GET /private HTTP/1.0
Host: localhost
1. Válasz:
HTTP/1.0 401 Unauthorised
Date: Sun, 10 Apr 2005 20:26:47 GMT
WWW-Authenticate: Digest realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: text/html
Content-Length: 311
...
Digest authentication
2. Kérés:
GET /private HTTP/1.0
Host: localhost
Authorization: Digest username="Alladin",
realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/dir/index.html",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
2. Válasz:
HTTP/1.0 200 OK
Date: Sun, 10 Apr 2005 20:27:03 GMT
Content-Type: text/html
Content-Length: 7984
Digest authentication
HA1=md5(user+”:”+realm+”:”+passwd)
HA2=md5(query)
Response=md5(HA1+”:”+nonce+”:”+nc+”:”
+cnonce+”:auth:”+HA2)
Előnyök:
nincs tárolt jelszó (lásd felh. adatbázis)
nincs jelszó átvitel (a HA1-ből md5 hash)
a szerver válasza nem hamisítható (nonce)
a kliens válasza nem hamisítható (cnonce)
egy kihívásra csak egyszer lehet próbálkozni (nc)
azonosított munkafolyamat (opaque)
Hátrányok:
egyedi felhasználói adatbázis
bonyolult számítás (gyenge gépeken)
HTTP-Cookie
Cookie:
korlátos méretű adatcsomag
kliens/szerver kommunikáció sajátsága
szerver készíti és küldi
kliens tárolja és visszaadja
Alkalmazási terület:
testreszabás, beállítások mentése
munkafolyamat követés (session-cookie)
HTTP-Cookie
Kérés:
GET /index.html HTTP/1.1
(content of page)
Kérés:
GET /spec.html HTTP/1.1
Cookie: name=value
Accept: */*
HTTP-Cookie
Cookie attribútumok:
név: változó azonosító
érték: változó érték
lejárati idő: időpecsét, ameddig érvényes
domain: a szerver ahonnan jött
ösvény: az URL ösvény része ahova visszajuthat
titkos: logikai érték, titkosított kapcsolatot
igényel-e
Egy domain/ösvény párhoz több cookie is tartozhat.
A böngésző mindet küldi a kérés fejlecében.
Küldéskor (c->s) csak név/érték kerül átadásra.
Szerver csak név, érték, lejárat, ösvény és titkos
tulajdonságokat állíthatja be.
Web Technológiák
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
Nézőpontok:
felhasználói felület (UI)
szoftver architektúra
szolgáltatási csatorna
elosztott alkalmazás platform
Webalkalmazás, mint UI
Felhasználó szemszögéből:
felhasználói felület
minden webalkalmazás hasonló felülettel bír
egységes kliens (böngésző)
vékony kliens -> kis erőforrásigény
Tulajdonságai:
+ bárhonnan hozzáférhető
+ tetszőleges eszközön használható
hagyományos alkalmazásoktól eltérően
viselkedik
hálózati kapcsolat elengedhetetlen
Webalkalmazás, mint szoftver
architektúra
Programozó szemszögéből:
több részes (multi-tier) architektúra (min. 2)
egyszerű, megjelenítő független UI leíró
számos fejlesztőkörnyezet áll rendelkezésre
Tulajdonságai:
+ egyszerű UI megvalósítás
+ kötetlen fejlesztői környezet
állapot mentes UI kapcsolat
szokatlan fejlesztési módszertanok
nem általános biztonsági követelmények
Webalkalmazás, mint
szolgáltatási csatorna
Üzleti szempontból:
egy szolgáltatás nyújtására lehetőséget adó
eszköz
Tulajdonságai:
+ felfogható üzlethelységként
+ olcsón üzemeltethető
+ széles körben elterjedt, mindenütt jelenlévő
+ nagy célcsoport
a szolgáltatás automatizált nyújtását követeli
meg
meglévő szolgáltatások átstrukturálása
költséges
Webalkalmazás, mint elosztott
alkalmazás platform
Rendszer integrátor szempontjából:
a szolgáltatás nyújtása decentralizálható
nem csak UI szolgáltatás, ún. Webservice is
lehetséges
Tulajdonságai:
+ szolgáltatások decentralizálhatók
+ WS jól integrálható a SOA szemléletbe
+ nagy rendelkezésre állás, nagy terhelhetőség
+ hibatűrő architektúra
publikus interfész, támadási felület
sok egyedi fejlesztési igény
Webalkalmazások
Népszerűségének okai:
Kliense:
Web böngésző
Mindenhol hozzáférhető
Vékony kliens
Alkalmazás:
Központi szoftver
Terjesztés nélkül frissíthető
Gyakori alkalmazások: webmail, áruház, aukció,
csapatmunka szervezés, vitafórum, wiki, blog
szerepjáték, stb.
Webalkalmazások kialakulása
Kezdeti kliens-szerver alkalmazások egyedi klienssel ->
telepítés, frissítés kényszere
Webalkalmazás
Felhasználói felülete: dinamikusan előállított
weboldal
Kliense: szabványos web böngésző
Interaktivitás növelése: kliens oldali script
(JavaScript)
A HTML/XHTML szabvány bővíthető weboldalak
előállítását teszi lehetővé.
Bővítés: (Java, JavaScript, Flash, stb.)
Funkcionális: az UI viselkedését befolyásolja
Megjelenítési: egyedi megjelenítés lehetősége
Vastag kliens
Webalkalmazások napjainkban
Igen elterjedtek, dinamikusan fejlődnek.
Számos alkalmazási terület: hírek, közösség, bank,
árverezés, kereskedelem, stb.
A HTML, CSS, JavaScript DOM szabványok eltérő
implementációi komoly gondokat okoznak.
Tipikusan három rétegű (three-tire) alkalmazás
Többnyire vékony kliens; a flash nem ritkaság
Alkalmazás logika, adatháttér: igen változatos
lehet, sokféle elterjedt technológia
Szabványos: Java alapú, .NET alapú
Gyakori még: PHP/MySQL, Oracle AS, stb.
Alkalmazások anatómiája
Elosztott alkalmazások:
egyetlen AL
sok munkafolyamat (session)
Munkafolyamat:
az alkalmazás egy állapotváltozási fonala
állapota a munkafolyamatnak van
az AL feldolgozási környezete (kontextusa)
Nem összetévesztendő a session
felhasználóval
klienssel
Munkafolyamatok modellezése
Másik slideshow
Munkafolyamat
webalkalmazásokban
Probléma webalkalmazások esetén:
Az alkalmazásprotokoll (http) állapotmentes
Nincs viszony szolgáltatás (session service) a
hálózati (TCP/IP) stack-ben.
Megvalósítás:
Alkalmazásban egyedileg
Keretrendszerben
Munkafolyamat megvalósítás
Feladat:
Adatok tárolása az alkalmazás egyes állapotai
között
Független tranzakciók számára közös környezet
Megvalósítási lehetőségek:
Round-trip
Alkalmazás session, azonosító round-trip:
Session Cookie
Hidden input
URL rewrite
(ábrák!)
Biztonsági kérdések (session)
Hamisítás (fraud):
Session adatok védelme (alkalmazás session)
Azonosító lopás (theft):
Újrafelhasználás
Más munkafolyamatának ellopása
Alkalmazás túlterhelés (DoS)
Elvesztett session
Elhagyott session
Tömeges nyitás
Biztonsági kérdések (adat)
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html>
PHP példa 2 (kicsit értelmesebb)
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
PHP – Nyelvi elemek
változók
$ jellel kezdődik
neve '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
pl:
<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // outputs "Bob, Joe"
Kiterjedt függvénykönyvtár
Dinamikusan betölthető modulok
Funkció szerinti csoportosítás
névkonvenció: <csoport>_<függvény>
Függvény csoportok:
session kezelés
adatbázis elérés (csoportok)
fájlkezelés
hibakezelés, naplózás
képkezelés
hálózatkezelés
stb.
PHP – adatbázis elérés
echo "<td>$field</td>";
$result = dbx_query($link, 'SELECT id, parentid, }
description FROM table');
echo "</tr>\n";
}
if (is_object($result) ) {
echo "</table>\n";
echo $result->rows; // number of records
}else {
echo $result->cols; // number of fields
exit("Query failed");
echo "<table>\n";
}
dbx_close($link);
?>
Teljesítmény
Kapcsolatfelépítés időigénye:
Perzisztens kapcsolat
SQL parsing:
tárolt eljárások
hosszú feldolgozási idő:
asszinkron végrehajtás (DBX nem támogatja!)
Biztonsági kérdések
SQL injection:
dinamikus SQL utasítás felhasználói inputtal
megoldás: (DBMS függő) sztring kvótázás, (pl.
dbx_escape_string)
HTML injection:
felhasználói input kerül a válaszoldalra
megoldás: HTML tag-ek kvótázása
(htmlspecialchars)
PHP hibakezelés és kivételkezelés
Fájl feltöltés
<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action=" URL " method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
Fájl feltöltés
$_FILES változó tartalmazza a feltöltött fájlok
meta-adatait:
2 dim. asszociatív tömb:
1. dim: input elem neve
2. dim:
$_FILES['userfile']['name']: fájl név
$_FILES['userfile']['type']: MIME típus
$_FILES['userfile']['size']: mérete byte-ban
$_FILES['userfile']['tmp_name']: feltöltési neve
$_FILES['userfile']['error']: hibakód (PHP 4.2-től)
Tartalomkezelő függvények:
is_uploaded_file() : tényleg feltöltött fájl
move_uploaded_file() : feltöltött fájl tartalmának
mentése
Fájl feltöltés
<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "File is valid, and was successfully uploaded.\n";
}
else
{
echo "Possible file upload attack!\n";
}
Korlátozások:
lehet tiltva
feltöltési méret korlátozás (def. 2M)
PHP script futásidő korlátozás
Biztonsági megfontolások:
feltöltött script futtatás
meglévő script futtatása nem feltöltött fájlokon
Postgres – nagy objektumok
Haszna:
nagy mennyiségű, strukturálatlan adat tarolásra
bináris adatok tárolására
Használata:
létrehozás pl. lo_import -tal fájlból
van oid-ja, amit táblában tárolni kell
pg_lo_real_all() kiolvassa az egész lo-t és a PHP
script kimenetére másolja
Postgres – nagy objektumok
<?php
if (!isset($_GET['image']))
{
include('na.html');
exit(0);
}
$qstr = "select fname, upload, ftype, fcontent from arlista inner join docs
on arlista.arlista = docs.fid where arlista.id =
'".pg_escape_string($_GET['image'])."'";
$conn = pg_connect(„connstr”);
pg_query($conn, "BEGIN");
$res = pg_query($conn, $qstr);
Postgres – nagy objektumok
if (pg_num_rows($res) != 1)
{
include('na.html');
pg_free_result($res);
exit(0);
}
header('Content-type: '.$ftype);
header('Content-Disposition: attachment; filename="'.$fname.'"');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $ftime) . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
Postgres – nagy objektumok
?>
Tanszéki PostgreSQL
Regisztráció:
http://www-db.iit.uni-miskolc.hu
e-mail jön, ha elkészült a felhasználó
adatbázis:
host=giediprime.iit.uni-miskolc.hu port=5432
database=users
user=<ldap login>
password=<változó>
jelszó parancssori kliensről: LDAP jelszó
jelszó PHP scriptből: beállítható „alter user
<jelhnev> encrypted password 'jelszo';”
Tanszéki PostgreSQL
Kliens:
Linux labor: psql, pgadmin3
Sun labor: psql
Windows labor: pgadmin3
Objektum orientált programozás
PHP-ban
OOP alapelvek (ismétlés):
egységbezárás
adat rejtés
öröklés (kiterjesztés)
többalakúság (polymorphism)
üzenet vezérlés (message-passing)
Alapfogalmak:
objektum, osztály
tag: adattag, metódus; osztálytagok
konstruktor, destruktor
felüldefiniálás, elfedés, túlterhelés
Objektum orientált programozás
PHP-ban
PHP 4:
kezdetleges OOP nyelvi elemek
fejlesztési zsákutca
PHP 5:
más OOP nyelvekből átvett nyelvi elemek, de
PHP 4 örökség
nem igazi OOP nyelv!
Osztályok, objektumok
class SimpleClass
{
// member declaration
private $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
Példányosítás
$a = new SimpleClass();
// echo $a->$var ;
$a->displayVar();
function autoload($class_name) {
require_once $class_name . '.php';
}
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
Célja:
osztálytagok és konstansok hivatkozása
szülő osztály hivatkozás
parent::tag
Osztálytagok
Minősítés: static
Nem példányosul, hivatkozni csak osztály
alapján lehet.
Nem hivatkozhat nem statikus tagra.
Csak a definiáló osztályban hivatkozható.
Nem definiálható felül, csak elfedhető!
Konstansok osztályban
Minősítés: const
Változónévben nem szükséges a $ jel.
Inicializálása csak konstans kifejezéssel.
Nem adható neki érték.
Hivatkozása az osztálytaghoz hasonló.
Absztrakt metódus és osztály
Absztrakt metódus:
nincs törzse
csak metódus deklaráció
nem lehet osztálytag
minősítése: abstract
Absztrakt osztály:
nem példányosítható
ha van absztrakt metódusa, akkor az osztálynak
is absztraktnak kell lenni
minősítése: abstract
Interfészek
Objektum iterátorok.
A final kulcsszó.
Objektumok klónozása.
Objektumok összehasonlítása.
Késői kötés.
Reflexió.
Kivételek PHP-ban
Van kivételkezelés
try … catch blokk definiálható
throw kulcsszó
Exception osztály
konstruktor kivételével minden final
csak kiegészíteni lehet.
Kivétel destruktorból nem dobható.
Konstruktorból dobott kivétel automatikus
betöltés esetén fatális hibát okoz.
Web Technológiák
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
Java SE alapú
Alkalmazásmodell:
elosztott
komponensalapú
többrétegű (4)
Futtatókörnyezet:
nyílt specifikáció
komponens konténerek
konténer szolgáltatások egységes interfésszel
Csomagolt alkalmazások
Java EE
Alkalmazásmodell rétegek:
EIS: adatbázisok, háttérrenszerek
Business Tier: alkalmazáslogikai komponensek
Web Tier: megjelenítési és szolgáltató
komponensek
Client Tier: alkalmazások kliens és/vagy web
böngésző
Java EE
Konténer típusok:
Java EE server: EJB és Web konténer
EJB konténer: perzisztens entitás objektumok,
munkafolyamat komponensek, üzenetvezérelt
komponensek
Web konténer: JSP lapok, Servletek esetleg
JavaBean komponensek
Alkalmazás kliens konténer: alkalmazások
Applet konténer: kisalkalmazások
Java EE – web tier
1.kérés a konténerhez
2.megfelelő
komponens
metódus hívás
3.JavaBean hívás
4.erőforrás hozzáférés
5.válasz készítés
6.válasz küldés
Java EE – web tier
További
technológiák:
JSTL: JSP
jelöléskészlet
kiegészítésére
JSF: MVC
alkalmazásmodell
megvalósítása
Mindennek az
alapja:
Java Servlet
Java EE – web tier
Életciklus
1.web komponens kódjának fejlesztése
2. deployment descriptor fejlesztése
3. web komponensek és segédosztályok fordítása
4. alkalmazáscsomag készítése (opcionális)
5. telepítés a webkonténerbe
6. használat (web böngészővel)
Web erőforrások: web komponensek,
statikus állományok együttese
Web modul: web erőforrások legkisebb
telepíthető és használható egysége
Webalkalmazások
A modul
jegyzékstruktúrája
kötött, case
sensitive.
A modul egyetlen
állományba jar
tömörítéssel, .war
végződéssel
tárolódik.
Fájlnév =
alkalmazásnév
Webalkalmazások
A Web kontextus:
a servlet példány számára rendelkezésre álló
futásidejű eszközök:
nemzetköziesítés paraméterei
erőforrás hozzárendelések
objektum értékű attribútumok
naplózási lehetőségek
minden servlet lekérdezheti kontextusát a
getServletContext metódussal
a kontextus, nem része a servlet-nek
Java Servlet
Válasz előállítása
a Service metódus második paraméterea
ServletResponse (HttpServletResponse)
a getWriter() metódus visszaadja a servlet
kimeneti adatfolyamát
bináris adatok küldésére a getOutputStream()
által adott ServletOutputStream objektumot
használjuk
a setContentType() metódussal beállítjuk a
válasz MIME típusát
a kimenet pufferelhető: setBufferSize()
Java Servlet
Kérés továbbítása:
a RequestDispatcer objektummal
getRequestDispatcher(“URL”)
include() metódus másik erőforrás beágyazása
forward() metódus a kiszolgálás vezérlésének
átadása
minden esetben a request és response
objektumok átadása szükséges
Java Servlet
HTTP-Cookie kezelés:
Cookie osztály reprezentálja
response.addCookie() metódus küldi
request.getCookies() metódus adja vissza a
kapott Cookie-k tömbjét
Java Servlet
Java osztály
nem final, nem abstract
javax.servlet.Servlet interface-t implementálja
javax.servlet.Servlet interface
metódusok: init(), getServletConfig(), service(),
getServletInfo(), destroy()
javax.servlet.GenericServlet osztály
implementálja a Servlet, ServletConfig és
Serializable interfészeket
Java Servlet
javax.servlet.ServletConfig interfész
metódusok: getInitParameter(),
getServletContext(), getInitParameterNames(),
getServletName()
A GenericServlet
implementálja az interfészeket
log() metódust ad hozzá
általános célú servlet váz
nincs (L7) protokollhoz kötve
Java Servlet
javax.servlet.http.HttpServlet osztály
kiterjeszti a GenericServlet osztályt
L7 protokollhoz specializált servlet
metódusok: doDelete(), doGet(), doOption(),
doPost(), doTrace(), getLastModified(), service()
a HTTP-metódushoz tartozó default kiszolgáló
metódus “Bad Request” választ ad
a service() dispatcher funkciót lát el
kiterjesztése többnyire a doXXX() metódusokat
definiálja felül
Java Servlet - életciklus
Példányosítás:
constructor hívás
Inicializáció
init() hívás
Kérés kiszolgálás
service() hívás 2 paraméterrel:
ServletRequest (HttpServletRequest) request objektum
ServletResponse (HttpServletResponse) response
objektum
Leállítás
destroy() hívás
Megszüntetés: JVM GC
Java Servlet
package hu.uni_miskolc.iit.webtech;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
Fogadott cookie-k:
request objektumból:
használat:
out.println("<hr>Cookies:<ul>");
for (int i=0; i<sutik.length; i++)
out.println("<li>"+sutik[i].getName()+" : "
+sutik[i].getValue()+"</li>");
out.println("</ul>");
Java Servlet - Cookie
Küldés:
létrehozás
Cookie suti = new Cookie("nev", "ertek");
Container szolgáltatás
Session objektum:
hozzáférés
HttpSession sess = request.getSession();
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
JSP technológia:
szöveg alapú dokumentumok előállítása
tartalmaz statikus és dinamikus szakaszokat
jelölő nyelv szerver oldali objektumok elérésére
lehetőség a jelölő nyelv kiterjesztésére
JSP lap tartalma:
statikus szakaszok: szöveg (lehet strukturált is,
pl. HTML, XML, WML, stb.)
dinamikus tartalmat előállító JSP elemek
JSP lapok (javasolt) tárolása:
.jsp : teljes JSP oldal
.jspf : egy JSP oldal részlete
Java Server Pages - JSP
JSP elemek:
feldolgozásra kerülnek
dinamikus tartalommal helyettesítődnek
típusai:
scriptlet: <% … %>
direktíva: <%@ directive … %>
standard JSP elem: <jsp:element ...>…</jsp:element>
egyedi JSP elem: <prefix:element ...>...</prefix:element>
JSP kifejezés: ${ … }
JSP lapok életciklusa
Szükséges beállítások:
Milyen MIME típus lesz a statikus tartalomból?
Milyen kódolású lesz?
Milyen a JSP statikus tartalmának kódolása?
A kódolást az elő feldolgozó végzi, direktívák
alapján:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="UTF-8" %>
lehet egyetlen page direktívába is írni.
Dinamikus tartalom előállítása
<html>
<head>
<title>JSP Page</title>
</head>
<body>
<h2>Bart's penalty</h2>
<%
for (int i=0; i < 100; i++)
out.println("I'm not going to use scriptlets this way.<br/>");
%>
</body>
</html>
JavaBean -ek használata
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Répási Tibor
egyetemi tanársegéd
Hogyan tovább?
Célok és akadályok
Üzemeltetési:
hoszting technológiák
storage technológiák
Fejlesztési:
egységes fejlesztési módszertanok
bevezetése (pl. MVC)
Megjelenítési:
table-less layout design
aszinkron webalkalmazás
hatékony navigációt segítő design,
akadálymentes web
Előfutárok
Üzemeltetés:
Google: progressive storage
Fejlesztés:
Java Server Faces
Megjelenítés:
table-less layout design div-elemekkel és
CSS-sel
aszinkron webalkalmazás: hidden frame,
AJAX
Aszinkron webalkalmazás
Előnyei:
sávszélesség kihasználás
modell, nézet és vezérlő elkülönítése
felhasználói élmény
Hátrányai:
böngésző integráció („Vissza” gomb!)
válaszidő probléma
keresőrendszerek felderítése („deep web”)
JavaScript függőség (szabvány hiánya)
Web statisztikák
AJAX és PHP kapcsolat
multiply.common.php
<?php
require_once ("../../xajax.inc.php");
multiply.server.php
<?php
require("multiply.common.php");
$xajax->processRequests();
?>
Webes keresőrendszerek
A keresés lehetősége egyidős a
hipertext ötlettel.
Keresés a weben:
Nagyon nagy adatmennyiség:
nagyon sok olda
nagyon gyakori változás
sok új oldal
adatbázis jellegű keresés igénye
hipertext tartalom:
többnyire szöveg
linkek a szövegben
Webes keresőrendszerek
Adatbányászat:
nagy adatmennyiségek
strukturált adatok
rejtett összefüggések felderítése
Szövegbányászat:
adatbányászat kiterjesztése strukturálatlan
adatokra
osztályozási, klaszterezési feladatok
Web-bányászat:
szövegbányászat kiterjesztése a web,
szemi-strukturált, hipertext-rendszerére
Webes keresőrendszerek
Keresőmotorok feladatai:
feldolgozandó dokumentumok kijelölése
dokumentumok letöltése
dokumentumok szóhalmazának előállítása
dokumentumok metaadatainak előállítása
dokumentumok hatákony tárolása
keresési adatszótárak nyilvántartása
keresésfeldolgozó megvalósítása
keresési megaadatok feldolgozása
Webes keresőrendszerek
Minőségi mérőszámok:
pontosság (precision): releváns válaszok
aránya válasz dokumentumaihoz
felidézés (recall): kiválaszott
dokumentumok aránya a releváns
dokumentumokhoz
tartalomegyezés (exhaustivity): kiválasztott
dokumentumok és a keresőkifejezés
egyezésének mértke
kifejezőerő (power): a leíró kulcsszavak
szelektivitásának és hosszának aránya
Webes keresőrendszerek
Hármas szerep
a web kapcsolatrendszerének felderítése
dokumentumok letöltése indexelésre
indexelt dokumentumok ismételt letöltése
Teljes letöltés lehetetlen, a web mérete
végtelennek tekinthető.
A robotok korlátos erőforrásokat
igényelnek, működésüket szabályozni
kell.
Webrobot - begyűjtő
Szabályozó elvek:
kiválasztási elv (selection policy): mely
dokumentumok töltsük le?
újralátogatási elv (re-visit policy): melyik
dokumentumot kell újra letölteni?
udvariassági elv (politeness policy): milyen
hatást gyakorolhat a robot a webre?
párhuzamos feldolgozási elv (parallelization
policy): párhuzamosan dolgozó robotok
összehangolása
Webrobot - begyűjtő
kiválasztási elv:
minden dokumentum tartalmaz linkeket
minden link újabb dokumentumot tár fel
Melyeket érdemes letölteni?
Header-ből kiderül a tartalom típusa,
nem szöveges tartalmat nem érdemes
Headerek letöltésének csökkentésére
vizsgáljuk az URL-t
Aratórobot
begyűjti a csonkolt URL-ek dokumentumait is
relevancia alapú kiválasztás
Webrobot - begyűjtő
Újralátogatási elv:
az index naprakészsége múlik rajta
nagyobb index --> több újralátogatás
több újralátogatás --> kevesebb új
dokumentum
az újralátogatási arány igen érzékeny
paramétere a keresőrendszernek
újralátogatás aging algoritmus alapján:
uniform: minden dokumentum egyformán
öregszik
arányos: dokumentumonként hangolt
újralátogatási gyakoriság
Webrobot - begyűjtő
Udvariassági elv:
a robot sokkal gyorsabban olvas, mint az
ember
a robot nagyon „kíváncsi”
két alapelv:
a robot ne okozzon jelentősen nagyobb terhelést
egy webszerveren, mint egy ember
a weblap gazdájának legyen lehetősége a robotot
befolyásolni (robots.txt, HTML fejrész)
Webrobot - begyűjtő
Kivonatolás:
kulcsszavak kinyerése
szelektivitás biztosítása
Indexstruktúra:
indexek hatékony tárolása
kulcsszavak hozzárendelése
dokumentumokhoz
Dokumentum kivonatok tárolása.
Keresés feldolgozás
Répási Tibor
egyetemi tanársegéd
Webalkalmazások UI létrehozásához
támogatja:
a „Drop-in” komponensek kezelését
grafikus IDE funkciók támogatása
UI komponens események kötése szerver-oldali
kezelőkhöz
UI komponens tartalom (adatok) kötése szerver-
oldali adat-objektumokhoz (JavaBeans)
újrahasznosítható és bővíthető UI komponensek
UI állapot mentés és visszaállítás lehetősége
Ezek mind szokásosak GUI fejlesztésben (pl.
Swing)
JSF felhasználói felület
Előnyei:
függetleníti a megjelenítést és a viselkedést
függetleníti az alkalmazás logikát a
megjelenítéstől (vö. MVC)
felépítése egyezik a megszokott UI
technológiákkal (pl. swing, mfc, .net, motif, Qt,
stb.)
nem korlátozódik egyetlen leíró nyelvre sem
(HTML független)
gazdag környezet komponens állapotok és
adatok kezelésére, felhasználói bemenet
ellenőrzésre és eseménykezelésre
JSF alkalmazások
Répási Tibor
egyetemi tanársegéd
Miskolc Egyetem
Infomatikai és Villamosmérnöki
Tanszékcsoport (IVM)
Fejlesztői keretrendszerek
Java EE web-tier:
Servlet, JSP, JTL,
JSF: szabványos, JSP + JTL megoldás
Struts: nyílt-forrású, Servlet API-ra épül
PHP:
interpretált célnyelv
kiterjedt API
fél-professzionális megoldás
Egyéb:
Oracle AS
.Net: ASPX
Python alapú: pl. Zope
Google Web Toolkit
Főbb komponensei:
Java-to-JavaScript Compiler: Java forrást képes
JavaScript-re fordítani
GWT Hosted Web Browser: GWT alkalmazások
futtatására alkalmas böngésző (natív JVM)
JRE emulation library: JavaScript
implementációja a Java API egyes részeinek
GWT Web UI class library: előkészített UI
komponensek gyüjteménye
Google Web Toolkit
Tulajdonságai:
újrahasznosítható UI komponensek
egyszerűsített RPC
böngésző history kezelés
debug lehetőség
JUnit integráció (teszteléshez)
böngészők különbözőségeinek feloldása
egyszerű többnyelvűség
letöltésre optimalizált és cache-elhető JavaScript
kód előállítása (az olvashatóság rovására)
Webtechnológiák - összefoglalás
Felhasználói keretrendszerek
számos, előre elkészített funkcionalitású
webalkalmazás
gyenge együttműködés
komplex funkcionalitású tartalomkezelő
rendszerek
gyenge együttműködés
portlet alapú keretrendszerek
portlet: egy komplex funkcionalitású portál egy
modulja, mely hordozható
Tartalomkezelő rendszerek
Tulajdonságai:
tartalom tárolása, szerkeszthetőség biztosítása
tartalom publikálása, verziókövetése
webes megjelenésű
testre szabható megjelentés (look&feel)
sablon alapú megjelenítés
felhasználók és szerepkörök azonosítása
jogosultságok odaítélése
munkafolyamatok definiálása, betartatása
kereső funkciók biztosítása
Webes tartalomkezelők
Specializált tartalomkezelők
Blog
lehet személyes vagy tematikus
vezércikk alapú
hozzászólás támogatása
Wiki
enciklopédia jellegű
egymásra hivatkozó szócikkek gyűjteménye
kiemelt keresési funkcionalitás
kollaboráció alapú szerkesztés lehetősége
Webes tartalomkezelők
start
stop
- Vezérlés menetét mutatja
- Programkód orientált
feldolgozás - Alacsony szintű
- Elemi funkciók
- Általános eszköz
IO - elemei :
- szekvencia
- elágazás
- ciklus
elágazás
vezérlési folyam
Alap folyamatábra modell
start
I
záp? kuka stop
N
összedolgoz
N
habos?
sütőedénybe tesz
működés?
odaégett?
adatok ?
Petri hálók
A modell szerepe:
- vezérlési szerkezet, folyamatok struktúráját adja meg
- időbeliséget, állapotváltozást is követni tud
- párhuzamos, kunkurrens folyamatokat kezel
- működési szabályok adhatók meg
- matematikai megalapozottság
- determinisztikus vagy sztochasztikus működés
Petri háló szerkezete:
P = (H,T, E, J, A, S, K)
1
0
1
0
0
2
0
1
Petri háló dinamikája
Ez a folyamat a tüzelés
Tüzelés szabályai:
- akkor lehet feltöltött egy tranzíció, ha minden forrásállapotában
legalább annyi token van, emennyi az oda vezető él súlya
- egy feltöltött tranzíció tetszőlegesen tüzelhet vagy passzív maradhat
- a tüzelés során minden forrás helyen csökken a tokenszám az
élsúllyal és minden célhelyen nő a tokenszám a bevezető él súllyával
1
1
2
2
1
Tüzelés
1
1
2
2
1
Petri hálók mátrix modellje
W: tranzíció-hely mátrix
helyek
2
1 1
2 1
1
Petri hálók mátrix modellje
Tüzelés leírása
M : állapotvektor
M = M + WT * e
1 1 -1 -2 0
1
0 0 2 0 -1
M = + * 0
0 0 0 1 -1
0
0 0 0 0 2
1 -1
2 0 2
1 1 M = +
0 0
0 0
2
0
2 1 2
M =
1 0
0
Vezérlési elemek
szekvencia, megelőzés
p1 t1 p2 t2 p3
szinkronizáció
t1
Vezérlési elemek
t1 párhuzamosítás
t2
versengés
t1 t1
t2 t2
Minta Petri háló (étterem)
pincér szabad
vendég 1 vendég 2
rendelés rendelés
v. várakozás v. várakozás
p. nyugtázás
fogyasztás fogyasztás
konyhába
kész
rendelés kiszolgálás
kiszolgálás leadás
főzés
T
Minta Petri háló (étkező filozófusok)
esznek
induló
tokenek van egy tojás
van tej
kukába dob
rendben vége
van záp
edény
összedolgoz
sütőedénybe tesz
adatok finomítása ?
Minta Petri háló (adatok küldése két processz között)