Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Internetes alkalmazásfejlesztés

Hasonló előadás


Az előadások a következő témára: "Internetes alkalmazásfejlesztés"— Előadás másolata:

1 Internetes alkalmazásfejlesztés
Endrődi Tamás

2 HTML alapok

3 Alap HTML tagok (1) HTML konténer tagok Karakter formázó HTML tagok
Sorformázó HTML tagok P H1, H2, stb. BR, NOBR PRE CENTER 1.1 1.2 1.3 1.4 1.5 1.6

4 Alap HTML tagok (2) Kép (IMG) Hiperhivatkozás (A) Listák létrehozása
A HREF attribútum megadásának lehetőségei Listák létrehozása Rendezetlen lista (UL) Rendezett, sorszámozott lista (OL) Lista elemek (LI) 1.7 1.8 1.9

5 HTML tábla TABLE elem Táblázatok formázásának attribútumai
Táblasorok (TR) Táblacellák (TD) Táblázatok formázásának attribútumai BORDER CELLSPACING, CELLPADING BGCOLOR, BACKGROUND COLSPAN, ROWSPAN HTML táblák egymásba ágyazása Összetett Web lap megjelenítése táblaként 1.10 1.11 1.12 1.13 1.14

6 HTML keret (Frame) Frame és Frameset szerepe COLS attribútum
In-line keretek alkalmazása (IFRAME) Frameset-ek egymásba ágyazása Navigálás a keretek között TARGET attribútum 1.15 1.16 1.17

7 További HTML elemek COMMENT FIELDSET és LEGEND MAP SPAN és DIV XMP
A karakter egyedek használata 1.18 1.19 1.20 1.21 1.22 1.23

8 Cascading Style Sheet

9 A CSS előnyei A tartalom szétválasztható a formától
Önállóan tervezhető és újrafelhasználható A régi technikában számos szöveg grafikaként jelent meg, ami lassú A CSS csak egyszer megy le a kliens gépre, és nem laponként külön-külön Egységes megjelenés Külön CSS lehet a képernyőre, és külön a nyomtatóra.

10 CSS vezérlés Láthatóság (visibility) Megjelenítés (Display)
pl. reflow (maradjon-e üres hely, vagy az alatta lévők feljebb kússzanak) Z-sorrend (Z order) Az adott elem relatív mélysége Web Embedding Font Tool (WEFT) Csak az IE használja

11 CSS szabályok definiálása
Szintaktika: szabályhatáskör {attr:érték;attr:érték;…} Tag példa: body {font-family:ariel;font-size:10;} Osztály példa: .error {font-color:red} A pont (.) jelenti azt, hogy ez egy osztályszabály

12 CSS használata Magába a tagba is rakható stílus információ
Kivételes körülmények között Stíluslap szintaktikája Globális stíluslap a /HEAD szekcióban HTML LINK tag használata Az elsődlegeshez ezt célszerű használni Osztályok Stílus osztályok Globális osztályok Pszeudoosztályok 2.1 2.2 2.3 7.6 2.4 2.5 2.6

13

14 DHTML alapok

15 A DHTML komponensei (1) Document Object Model Dynamic Styles
Objektumok, tulajdonságok, metódusok, események Dynamic Styles Dinamikus stílus beállítás lehetősége A stílus élesen elválik a tartalomtól Dynamic Positioning A betöltést követő helyváltoztatás lehetőségét nyújtja. Animáció készítésének lehetősége.

16 A DHTML komponensei (2) Dynamic Contect Data binding
A tartalom dinamikus változtathatósága Elemek beillesztése, illetve törlése Szöveg és egyéb attribútumok módosítása Data binding Adathordozó vezérlőelemek beépíthetősége

17

18 Kliensoldali script alkalmazása
HTML komment technikát kell használni <SCRIPT Language=VBScript> <!-- Function Valami() …….. End --> </SCRIPT> Ha a böngésző nem ért VB-ül, akkor ignorálja, mert kommentnek tekinti. 5.2 5.3

19 VBScript szabályok VBScript-nél csak Variant adattípus van.
A típust a VarType fg-vel lehet lekérdezni. Nem lehet konstans deklarálni. Automation objektumok: Dictionary, Err, FileSystemObject, TextStream Szerveroldali VBScript-ben tilosak: InputBox, MsgBox, GetObject függvények

20 Jscript szabályok Java-tól függetlenül jött létre
Pontosvessző az utasítások végén Nem kötelező használni! Kommentjelek ( //, illetve /*…..*/ ) Változódeklaráció var Kakukk Érzékeny a kisbetű-nagybetű különbségre! A deklaráció nem kötelező.

21 Jscript műveletek Boole algebrai műveletek: Matematikai műveletek:
&& AND | | OR ! NOT Matematikai műveletek: A Math objektum metódusai: x = Math.PI y = Math.LN10 z = Math.max(num1, num2) String változók objektumként működnek

22 Jscript vezérlőszerkezetek
if (feltétel { // igaz ág } else { // hamis ág } For (x=1;x<=10;x++) { // ciklusmag }

23 Kliensoldali programozás elemei
Az IIS simán leküldi a böngészőnek Tipikusan UI elemek ActiveX control és Java applet ActiveX control ToolBox-ból kényelmesen felrakható Bármit megtehet a user gépén A VBScript és a Jscript nem tudott a file rendszerbe belenyúlni Certificate és Authenticode mechanizmus Eldöntheti a user, hogy letölti vagy sem.

24 ActiveX control Szintaktika:
<OBJECT classid="clsid:registryszám" id=név <PARAM NAME="Year" VALUE="1999"> ….. </OBJECT> A classid egy Global Unique Identifier (GUID) az időből (msec), és az aktuális gép infoból csinál egy hexa számot A PARAM tagban lehet serverscript is, pl: <PARAM NAME <%=változó%>….. CodeBase tulajdonság adja meg a control URL-jét Akkor kell, ha le kellene tölteni, mert nincs a user gépén.

25 Java appletek Szintaktika:
<APPLET code=valami.class id=kutya <PARAM NAME=Ez VALUE="Az"> /APPLET> Toolbox-ra felrakható, és újrafelhasználható A class file gépfüggetlen byte kódból áll. .java file-ból generálja a Java compiler Egy applet több .class-ból is állhat. Intranet=ActiveX, Internet=Applet A legjobb a sima HTML(?!)

26 window objektum Metódusok Tulajdonságok Események Kollekció
open, showModelDialog, showModelessDialog, close, navigate Tulajdonságok document, event, history, location, navigator Események onload, onbeforeunload, onunload, onfocus, onblur Kollekció frames

27 document objektum Metódusok Tulajdonságok Események Kollekciók
open, write, close, createElement, insertAdjacentElement, insertBefore Tulajdonságok body, cookie, title Események onclick, onpropertychange, onmousexxx, onkeyxxx, ondragxxx Kollekciók all, frames, forms 5.4

28 További DHTML objektumok
navigator objektum Csak tulajdonságadatai vannak event objektum srcElement, type, propertyName, fromElement, toElement, returnValue tulajdonságok A cancelBubble szerepe form objektum A document.forms kollekcióból származtatható 5.5 5.6

29 Behavior Script encapsulation (component) Szintaktikai alakja:
{behavior:string}, ahol a string lehet: "url(a1.htc) url(a2.htc)…" "url(#objID)" "url(#default# név)" Dinamikus hozzárendelés is használható: addBehavior(), removeBehavior() Elkészítés eszköze: VBScript, Jscript, Windows Scripting Components (WSC) vagy C++

30 HTC referencia (1) ATTACH (eseménykezelő hozzárendelése)
<PUBLIC:ATTACH EVENT=sNev FOR=document | element | window ONEVENT=sFg ID=sID/> METHOD (dokumentumból hívható) <PUBLIC:METHOD NAME=sNev INTERNALNAME=sIntNev ID=sID/> PROPERTY (dokumentumban használható) <PUBLIC:PROPERTY NAME=sNév ID=sId INTERNALNAME=sIntNév GET=sFg1 PUT=sFg2 PERSIST=bPersist VALUE=vKezdőÉrték/>

31 HTC referencia (2) EVENT (a dokumentumnál lép fel)
<PUBLIC:EVENT NAME=sNév ID=sID/> COMPONENT (a legkülső konténer) <PUBLIC:COMPONENT NAME=sNev ID=sID URN=sURN> …. </PUBLIC:COMPONENT> element objektum A komponensen belül az elem elérésére szolgál createEventObject és fire metódusok

32 HTC referencia (3) Speciális behavior események ondocumentready
Amikor a dokumentum ellenőrzött (parsed) oncontentready Az adott elem ellenőrzött (parsed) ondetach Amikor az elemről leszedtük a behavior-t (pl. egy removeBehavior metódussal vagy az ablak bezárásával)

33 HTC referencia (4) Fontos tulajdonságadatok style.behavior
Így lehet hozzáférni a behavior-hoz. behaviorUrns Az adott elemhez rendelt behavior-ok URN-jeinek kollekciója document.all.urns("x") Azokat az elemeket adja vissza, amelyekhez az adott behavior-t rendeltük. scopeName A namespace-t adja vissza (XMLNS:név) tagURN A namespace helyettesítő értékét adja vissza (XMLNS:név="

34 Default Behavior elemek
Multimédia elemek img, anim, animation, audio, video, media, seq, time, par clientCaps (információ a böngészőről) download (egy letöltés végigvitele) startDownload metódussal anchor, httpFolder (folder nézet megjelenítése)

35 Perzisztencia Előnyei userData saveFavorite, saveHistory, saveSnapshot
Keresésnél megmarad a régi keresőkifejezés A fastruktúra úgy jön be, ahogy hagytuk Űrlap adatokat nem kell ide-oda cipelni, amíg nincs minden kitöltve Vásárlókosárnál az eddig bejelöltek megmaradnak. userData Jobb, mint a cookie, mivel session-ök közt is működik (64K/lap) save és load metódus Tárolás: XML Store saveFavorite, saveHistory, saveSnapshot

36 Custom Tag használata Példa:
<HTML XMLNS:SAJAT> <STYLE> @media all {SAJAT\: IGAZIT { text-align:justify; width:500} } </STYLE> … <SAJAT:IGAZIT> …. …. </SAJAT:IGAZIT>

37 Dinamikus tulajdonságok
Sok helyen a scriptek helyett elég egy képlet Excel-szerű táblázat automatikusan frissülő összesen cellával. Elem pozíciója az egértől függ. (drag & drop) Időzített elemmozgatás valósítható meg Metódusok object.setExpression(sProperty,sKif,sNyelv) bSiker=object.removeExpression(sProperty) document.recalc() implicit függőségeknél vKif=object.getExpression(sProperty)

38 Dinamikus tartalom sajatH1.innerText = "Új szöveg"
sajatH1.innerHTML = "Új <I>szöveg</I>" sajatH1.outerText = "Valami" sajatH1.outerHTML="<SPAN>..</SPAN>" Ez lecseréli a <H1> tagot <SPAN>-re Figyelem! Csak a window.onload után!

39 Mouse Capture Adott objektumhoz rendelhetjük az egéresemények kezelését object.setCapture Ha pl. az object egy DIV, akkor a benne lévő összes elemnél a DIV-beli eseménykezelés él. object.releaseCapture Megszüntetés (fellép az onlosecapture esemény) Példa: Dinamikus pop-up menü készíthető, ami mindig az aktuális objektum tulajdonságadatait mutatja Kétszintű lebomló menü is előállítható

40 Adatkezelés a DHTML segítségével

41 DHTML adatbázis komponensek
Data Source Objects Az adatot biztosítja a Web lap számára Data Consumers Az adat megjelenítéséről gondoskodik Binding Agent A szinkronizálásért felelős Table repetition agent

42 DHTML adat architektúra

43 DSO objektumok Tabular Data Control (TDC) Remote Data Services (RDS)
Régebben ADC volt a neve) JDBC applet XML adatforrás objektum MSHTML adatforrás objektum

44 A DSO feladatai és működése
Feladatok: Meghatározza hogyan néz ki az adat Lehozza az adatot a Web lapra Manipulál az adattal Visszajuttatja a módosításokat a szerverre. Aszinkron vagy szinkron transzport. Az aszinkron a javasolt. OLE DB API-t kell tudni az adatszolgáltatónak.

45 Tabular Data Control (TDC)
ActiveX control az IE 4.0-ban Mezőszeparátorokkal elválasztott mezők és sorszeparátorokkal elválasztott sorok. A legtöbb adatbázis-kezelő képes ilyet előállítani. UseHeader=True Az első sor a mezőinfot tartalmazza

46 A TDC tulajdonságai és metódusai
Tulajdonságok DataURL Az adatfile URL címe. FieldDelim A vessző az alapértelmezés. RowDelim Az NL az alapértelmezés. Sort Pontosvesszőkkel elválasztott mezőlista. A mezőnév előtt + vagy - állhat. Filter Szűrőfeltétel. Metódusok Reset Végrehajtja a rendezést és a szűrést.

47 Remote Data Service (RDS)
Komplexebb és robosztusabb, mint a TDC. Data-marshalling (Spec. MIME formátum) Kétirányú kapcsolat az adatbáziskezelőkkel. Komponensek RDS.DataControl (kliensoldalon) RDS.DataFactory (szerveroldalon) SubmitChanges (RDS.DataControl metódusa) A módosítások élesítése. Csak a módosított rekordok mennek át a szerverre.

48 Remote Data Service (2) A kliensoldalon a következő szükséges:
<OBJECT id=valami classid="clsid:…….."> <PARAM name="Server" value=" <PARAM name="Connect" value="DSN=kakukk"> <PARAM name="SQL" value="select * from g"> </OBJECT> Protokollok: HTTP HTTPS DCOM in-process COM

49 XML adatforrás objektum
XML = Extensible Markup Language Az adatformátum leírását tartalmazza. Bármilyen TAG használható, nemcsak a normál HTML tagok. XML Parser kell az értelmezéshez. (XMLDSO.class nevű JAVA)

50 Data Consumers Adatfogyasztó elemek Attribútumok
Normál HTML elemek ActiveX-ek Java appletek Attribútumok DATASRC Az adatelem (pl. TDC) ID-je DATAFLD Melyik mezőhöz kapcsoljuk az adott HTML elemet. DATAFORMATAS"text" vagy "html" lehet. DATAPAGESIZE Hány sor jelenjen meg egyszerre.

51 Adatfogyasztó HTML elemek

52 Szinkronizálás Binding agent Table repetition agent
Az MSHTML.DLL-ben van (Ez a HTML Viewer) Scriptekkel felfogható eseményeket tüzel ki, melyek a DSO és a Consumer közötti szinkront teremtik meg (Notify mechanizmus) Table repetition agent Ez biztosítja, hogy HTML TABLE-ként jelenjenek meg a táblázatos adatok.

53 XML alapok

54 XML (Extensible Markup Language)
Az SGML (Standard Generalized Markup Language) subset-je Platform-független adatátadás Bármilyen dokumentum Adatrekord Objektum adatokkal és metódusokkal Grafikai UI elem Séma információ Meta elem (pl. Channel Definition Format)

55 XML példa <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="konyv.xsl"?> <!DOCTYPE filmek SYSTEM "filmek.dtd"> <filmek> <film nyelv="angol"> <cím>Matrix</cím> <szereplő>Keanu Reeves</szereplő> <szereplő>Laurence Fishburne</szereplő> </film> <film nyelv="magyar"> <cím>Csinibaba</cím> <szereplő>Gálvölgyi János</szereplő> <rendező>Tímár Péter</rendező> </film> </filmek>

56 Az XML előnyei (1) Keresések értelmesebbek lehetnek:
Könyvkeresésnél pl. ma a "Bill Gates"a róla szóló és az általa írt könyveket is kihozza Az egymással inkompatibilis adatbázisokban való kombinált keresés megoldható Az adat a séma révén az értelmezési és validálási infot is hordozza Egy XML a szervertől függetlenül is kezelhető, sőt módosítható is. Granuláris update: nem kell az egész lapot letölteni, ha csak egy adatsor változott

57 XML előnyei (2) Független a UI-től, ezért a user ízlésének megfelelő prezentációt lehet hozzá csatolni Hasonló a mail-merge-höz Jól tömöríthető az adatátadásnál A tagok szabályos ismétlődő szerkezete jól fekszik a tömörítő eljárásoknak A HTTP 1.1 szerverek és kliensek már ki is használják ezt.

58 Namespaces A különböző XML dokumentumok összekapcsolásakor a tagok megkülönböztetése miatt kell Példa: <Rendelesek xmlns:partner="// xmlns:dsig="//dsig.org"> <partner:nev> <partner:vezeteknev>Nagy</partner:vezeteknev> <partner:keresztnev>Pál</partner:keresztnev> </partner:nev> <dsig:digalair> </dsig:digalair> </Rendelesek>

59 Adat és prezentáció szétválasztása
HTML A Web lap "szöveges", nem változó része CSS A HTML rész stílus információi XML A Web lap "adat" része. (Minden, ami változhat) XSL (Extensible StyleSheet Language) Az "adat" rész stílusinformációi

60 XML dokumentum szabályok
Kezdő és záró tag mindig kell (well-formed document) Rövidítés lehetséges, pl.: <Kutya/> Kisbetű/nagybetű különbségre érzékeny! Az XML dokumentum gyökéreleme egyedi Unicode-os karakterkészletet használ (1 karakter=16 bit) Az attribútumok megadásakor idézőjelek használata

61 XML Data Island Az adatsziget egy XML a HTML lap belsejében
Inline megadás <XML ID="Valami"> <film> <cím>Matrix</cím> </film> </XML> SRC hivatkozás <XML ID="Valami" SRC="film.xml"</XML> Script tag <SCRIPT LANGUAGE="xml" ID="Valami"> <film> … stb. </SCRIPT>

62 XML ágak elérése a DOM-ból
Valami.documentElement A komplett gyökér elemet éri el Valami.documentElement.childNodes A gyökér alatti ágak kollekcióját éri el Valami.documentElement.childNodes.item(0). nodeName A gyökér alatti első ág nevét adja vissza nodeName helyett a text a tartalmat adná vissza nodeName helyett a childNodes.item(0).text eggyel beljebb menne a hierarchiában.

63 XML attribútumok elérése
Valami.documentElement.childNodes.item(n).attributes.item(z).nodeName Az első szinten található n-edik ág z-edik attribútumának a neve Valami.documentElement.childNodes.item(n).getAttribute("nyelv") Az első szinten található n-edik ág "nyelv" nevű attribútumának az értéke

64 További elemek az XMLDOM-ban
Data Island elemeinek elérése Valami.XMLDocument.documentElement.stb. Namespace elemek elérése xmlns:partner="// esetén: nodeName a teljes nevet adja vissza prefix-szel együtt namespaceURI az URI nevet vagy ""-t ad vissza prefix a példában "partner" baseName a prefix nélküli nevet adja vissza adottTag.xml A teljes XML string-et adja vissza

65 XMLDOMDocument Kétféle interfész létezik:
XMLDOM Interface (COM prog. Interface) XMLDOM Objects (ActiveX interface) XMLDOMDocument objektum létrehozása VBScript Set xmldok = CreateObject("Microsoft.XMLDOM") Jscript Var xmldok = new ActiveXObject("Microsoft.XMLDOM") Visual Basic Dim xmldok = New DOMDocument

66 XML file betöltése xmldok.load("//et/kakukk.xml")
xmldok.loadXML("<vevő>….</vevő>") Aszinkron (default) és szinkron betöltés xmldok.async = false (még a load előtt) xmldok.abort-ra az aszinkron betöltés leállítható Az értelmezés elhalasztható xmldok.validateOnParse = false (ezt is a load előtt) Hiba esetén a parseError ad információt Mentés xmldok.save(Server.MapPath("Minta.xml"))

67 Dokumentumágak elérése
Set root = xmldok.documentElement For Each gyerek In root.childNodes MsgBox gyerek.text Next Set yNode=xmldok.documentElement. nodeFromID("xxxyyzz") Set yNodeList=xmldok.documentElement. getElementsByTagName("film") vagy Set yNodeList=xmldok.documentElement. selectNodes("film/cím")

68 Új ágak beépítése createNode(típus,név,namespaceURI)
Az egyes típusokra külön createTípus metódusok léteznek createElement példa: Set ujElem = xmldok.createElement("film") ujElem.setAttribute("nyelv","német") ujElem.text = "akármi" xmldok.documentElement.childNodes.item(3) appendChild ujElem Egyéb lehetőségek replaceChild, removeChild, insertBefore

69 XMLDOMNode (1) Információ a Node-ról hasChildNodes() igaz vagy hamis
nodeName prefix:név formában nodeType és nodeTypeString NODE_ELEMENT 1 NODE_ATTRIBUTE 2 NODE_TEXT 3 NODE_CDATA_SECTION stb. parsed logikai iagz, ha ellenőrzött specified attribútumoknál, ha van default vagy meg van adva Xml az adott node xml string-ként

70 XMLDOMNode (2) Adat olvasása és írása Navigálás az adott Node-ból
nodeValue nodeTypedValue Text Navigálás az adott Node-ból parentNode, firstChild, lastChild, previousSibling, nextSibling, ownerDocument tulajdonságok childNodes kollekció attributes kollekció révén jutunk el az attribútumokhoz definition visz el a sémához

71 XSL Extensible Stylesheet Language
Olyan, mint a mail-merge, ahol az XSL a template, és az XML az adat Hasonlít az ASP ciklushoz és a Tabular Data Control-hoz Kétféle modell ötvözhető Template-driven model Data-driven model

72 Egyszerű XML-XSL-HTML példa
<?xml version="1.0"?> <portfolio xmlns:dt="urn:schemas-microsoft- com:datatypes"> <részvény tőzsde="BSE"> <név>OTP Bank Rt.</név> <jel>OTP</jel> <árf dt:dt="number">16000</árf> </részvény> <részvény tőzsde="Nasdaq"> <név>…</név> … </részvény> </portfolio>

73 HTML template <HTML> <BODY> <TABLE Border="2">
<TR> <TD>Jel</TD> <TD>Név</TD> <TD>Árfolyam</TD> </TR> <TD>…</TD> </TABLE> </BODY> </HTML>

74 A template "feltöltése" (1)
<?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="// <xsl:template match="/"> <HTML> <BODY> <TABLE Border="2"> <TR> <TD>Jel</TD> <TD>Név</TD> <TD>Árfolyam</TD> </TR>

75 A template "feltöltése" (2)
<xsl:for-each select="portfolio/részvény"> <TR> <TD><xsl:value-of select="jel"/></TD> <TD><xsl:value-of select="név"/></TD> <TD><xsl:value-of select="árf"/></TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template> </xsl:stylesheet>

76 XSL alapszabályok <xsl:for-each> tag adja meg az elemhalmazt
<xsl:value-of select="minta"> Az elemhalmazon belül egy gyereket azonosít A select adja meg az XSL pattern-t A file-könyvtár struktúrához hasonlít, de sima perjellel Az elért adat (attribútum, érték) kerül a hívás helyére A navigáció az aktuális node-nál indul

77 HTML template szabályok
Well-formed HTML (nyitó és záró tagok) Kisbetű/nagybetű a tagokban fontos Legyenek nagybetűsek! Minden attribútum idézőjelek vagy aposztrófok között legyen HTML és HEAD tag sem maradhat ki Csak a következő karakter egyedek vannak < > & " &apos; A scriptek belsejében sem lehetnek más jelek <SCRIPT><![CDATA[ ide jön a script ] ] ></SCRIPT>

78 HTML tag új attribútuma
<xsl:attribute name="TITLE"> <xsl:value-of select="jel"/> adatai a <xsl:value-of származnak </xsl:attribute> <TD>… Csak akkor lehet "TITLE"-t adni, ha még nincs neki. A <TD> tag előtt kell lennie, hogy a <TR>-re vonatkozzon

79 Feltételes template-ek
<TD> <xsl:value-of select="jel"/> <xsl:if </xsl:if> </TD> <xsl:attribute name="STYLE">color: <xsl:choose> <xsl:when test="price[. $le$ 25]">red </xsl:when> <xsl:otherwise>green</xsl:otherwise> </xsl:choose> </xsl:attribute>

80 "for-each" rendezése <xsl:for-each select="portfolio/részvény" order-by="árf"> Lehet csökkenő is order-by = "-árf" Több szempont is megadható order-by = "mező1; -mező2" order-by = "date(mező1);-number(mező2)" Ha a select-beli adatra akarunk rendezni: <xsl:for-each select="portfolio/részvény/név" order-by="-."

81 XSL pattern Egy egyszerű query nyelvhez hasonlít
portfolio/részvény az összes ilyen node portfolio/*/név példa a joker használatára portfolio/részvény/* 3 részvény esetén 9 elemet ad portfolio/részvény[jel]/név csak azok, amelyeknek van "jel" node-juk portfolio/részvény[jel='OTP']/árf csak az 'OTP' jelű részvények árfolyama jön le csak a BSE-n lévő részvények jönnek le csak az attribútum értékpár jön vissza

82 Internetes alkalmazás rétegei

83 Háromrétegű Web architektúra

84 Többrétegű architektúra példa

85 Thin/Thick-client Vékony kliens (Thin-client)
Böngésző-független Sok forduló a Web szerver és a kliens gép között Vastag kliens (Thick-client) Böngésző-függő Látványos Web-lapok Gyors interaktív funkciók

86 Alkalmazásfejlesztési csapat tagjai
Web fejlesztő Programozó HTML szerző Grafikus Web adminisztrátor Adatbázis adminisztrátor

87 Active Server Pages alapfogalmak

88 ASP környezet IIS 3.0-tól felfele létezik az ASP. Állapotkezelés
A stateless HTTP-vel szemben biztosítja a userenkénti, alkalmazásonkénti, illetve szerverenkénti állapotkezelést. MS ActiveX Data Objects (ADO) Adatbáziskezelés megvalósítása ASP komponensek is használhatók Nyelvek: VBScript, JScript, Perl

89 ASP file tartalma és nyelve
Az ASP file tartalma: Sima szöveg HTML Script Kliens oldali Szerver oldali (<% ……….%>) Script nyelvek VBScript Jscript Perl

90 ASP szintaktikai elemek
Határolójelek <…….> a HTML határolójelei <%……..%> az ASP Script határolójelei Response.Write helyett sima egyenlőségjel Példa: Ez a lap <% =Now %> -kor lett frissítve. Script példa: <SCRIPT RUNAT=Server | Client LANGUAGE=VBScript | JavaScript> …… itt van maga a script </SCRIPT>

91 Scriptek és HTML vegyítése
Példa: <% If Time < #12:00:00PM# Then %> Good Morning <% Else %> Good Afternoon <% Endif %>

92 Beépített (built-in) objektumok
Request Response Application Session Server

93 Request objektum A böngésző által küldött információ visszanyerésére szolgál. Gyűjtemények QueryString A kérdőjel utáni paraméterek Form A kérdőjel utáni paraméterek Cookies Adott változó tartalma Példa: Request.Cookies("Dolgozo")("Nev") ClientCertificate (Kulcs[almező]) Secure Sockets Layer (SSL) használatakor https lesz a sima http helyett

94 HTML Form készítése 3 lehetőség van Megvalósítás:
Statikus .HTM egy formCX-szel adatot ad át egy .ASP-nek .ASP küld adatot egy másik .ASP-nek .ASP küld adatot önmagának (self-posting) Megvalósítás: <Form Method=Post Action=kakukk.asp> Begyűjti az adatokat és a SUBMIT gombra elküldi a kakukk.asp-nek.

95 Az átküldött adatok elérése
Példák X = Request.Form("mezőnév") X = Request.Form("mezőnév")(n) Ha ugyanazzal a mezőnévvel több textbox is van Az index nélkül vesszőkkel elválasztott string jön Request.Form("mezőnév").Count Ezzel lehet megtudni, hogy hány azonos nevű van IsEmpty(Request("mezőnév") Ez dönti el, hogy van-e adat a mezőben. Self-posting-nál így dönthető el, hogy első hívás vagy önhívás történt-e

96 QueryString gyűjtemény
QUERY_STRING szerver változóba kerül a kérdőjelet követő rész Request.QueryString("mezőnév") A sima Request helyett akkor kell, ha nem form-ból jött ide a felhasználó pl. REQUEST_METHOD nevű szerver változó X=Request.ServerVariables ("REQUEST_METHOD") "POST" vagy "GET" lesz az X értéke

97 Response objektum (1) Információ küldése a böngészőnek
Tulajdonságadatok Buffer True esetén visszatartja a küldést, amíg az ASP le nem fut. Expires Meddig érvényes a lap a Cache-ben percekben. ExpiresAbsolute Meddig érvényes a lap abszolút időben mérve.

98 Response objektum (2) Metódusok Write Redirect End Clear
Sima egyenlőségjellel helyettesíthető Redirect Buffer=True esetén átszállhatunk egy másik ASP-re Response.Redirect " End Pufferezett esetben ekkor küldi el a böngészőnek Clear Ha mégse küldjük el, akkor az End helyett ez jön.

99 Response objektum (3) Cookies gyűjtemény
Cookie: a felhasználó gépén tárolt adat. A böngészőben értesítés kérhető, sőt le is tiltható a használata. Példa: Response.Cookies("Kakukk") = "Valami" Response.Cookies("Dolgozo")("Nev") = "Kovács" Tulajdonságok Secure Haskeys (True vagy False)

100 Application objektum Metódusok Események Változók Gyűjtemények
Lock és Unlock az objektum zárolására Események Application_OnStart és Application_OnEnd A Global.Asa-ban kell ezeket deklarálni Változók Application("Macska") = "Nokedli" X = Application("Macska") Gyűjtemények Contents Az összes változó StaticObjects <OBJECT>-en belüli obj-ok

101 Session objektum Az állapot nélküli HTTP feloldására Példa:
"Vásárlókosár" jellegű alkalmazás készíthető A Global.Asa kezeli Példa: Session("KakukkValt") = érték X = Session("KakukkValt") Tulajdonságok SessionID (long) és TimeOut (percek) Metódus Abandon Kierőszakolja a Session végét.

102 Események Application_OnStart Application_OnEnd Session_OnStart
Akkor, amikor az első user az első session-t nyitja. Application_OnEnd Akkor, amikor leállítják a Web szervert. Session_OnStart Minden usernél egyszer az elején fellép (Form_Load szerű). Itt lehet számolni a látogatókat. Session_OnEnd Amikor egy adott user elmegy.

103 Változók hatáskörei Dim Kakukk Session("Kakukk") Application("Kakukk")
Az adat elvész, amikor a user lemegy a lapról. Session("Kakukk") Annyi példány lesz, ahány user éppen benn van Application("Kakukk") Egy közös példány lesz. (Variant) Ha többen akarják egyszerre módosítani: Application.Lock Application("Adat") = Application("Adat") + 1 Application.Unlock

104 Server objektum A Web szerverrel való kapcsolattartásra Tulajdonság
ScriptTimeout Metódusok CreateObject Ezzel lehet az ActiveX komponenseket a szerveroldalon felhasználni. (ProgID-t kell átadni.) HTMLEncode MapPath URLEncode

105 Request.ServerVariables
A szerverről, illetve a böngészőről ad infot. QUERY_STRING REMOTE_ADDR A request-et kiadó host gép IP-címe. SERVER_PORT Az a port szám, ahova a request-et küldtük. SERVER_SOFTWARE Név és verzió URL Az URL cím alaprésze

106 ActiveX szerver komponensek
COM-ot tudó OLE Automation szerverek Elérik a file rendszert és a szerver hálózatot is (A VBScript és a Jscript nem éri el!) DLL-ként vagy EXE-ként működnek VB, C, C++, Cobol, Pascal, Java, stb. Jobb, mint a CGI Egy példány szolgálhatja ki az összes felhasználót

107 Szerveroldali komponensek
ADO Command, Connection, Recordset Ad Rotator Browser Capabilities Content Linking Index Server Dictionary Filesystem Object

108 Web alkalmazás Az adott Web site-on található .asp, .htm és egyéb file-ok összessége. A virtuális gyökérben kell egy Global.Asa Analógia: .EXE ===> .ASA .DLL ===> .ASP és .HTM .ASP és .HTM több alkalmazás része is lehet Application objektum =globális tárolóhely Alkalmazások közötti adatcserére nem jó.

109 Az ASP.NET alapjai

110 A .NET keretrendszer Nyelvfüggetlen futtatórendszer (Common Language Runtime – CLR) Alaposztályok és könyvtárak Adatkezelés (ADO.NET) Felhasználói interfész Web Forms Windows Forms Web szolgáltatások

111 Az ASP.NET újításai (1) Sokféle nyelvet támogat, nemcsak script nyelveket Lefordított kódot használ A teljes keretrendszer elérhető Intelligens szerver vezérlőelemeket tartalmaz Web szolgáltatások építhetők Kibővített engedélyezési rendszer működik benne

112 Az ASP.NET újításai (2) Többrétegű skálázhatóság
Munkamenet (session) kezelés sütik (cookies) nélküli böngészőknél Sokféle konfigurálási lehetőség Egyszerű telepítés

113 Web űrlap (Web Form) .ASPX kiterjesztésű file
@Page direktívát tartalmaz: Page Language=Vb %> Szerveroldali űrlappal rendelkezik: <Form runat=„server”> </Form> Egy ASPX lap a System.Web.UI.Page osztályból öröklődő dinamikus osztály Az ASPX lapon lévő vezérlőelemek objektumok

114 Szerver vezérlőelemek
A szerver oldalon programozható objektumok Tulajdonságok, metódusok, események Az események a kliensen következnek be, de a szerveren fut le az eseményvezérlő metódus Runat=„server” attribútummal rendelkeznek Böngészőfüggő HTML-t küldenek Típusai: Szerveroldali HTML vezérlőelemek Web vezérlőelemek

115 Szerveroldali HTML vezérlőelem
Megegyezik a megfelelő HTML elemmel Runat=„server” attribútumot tartalmaz Egyedi „ID” tag van benne A System.Web.UI.HtmlControls névteret használja Well-formed XML szintaktikát kell használni <tag attr=„érték” runat=„server”>….</tag> vagy <tag attr=„érték” runat=„server”/>

116 Web vezérlőelem Intelligens komponensként funkcionálnak
Az „asp” névtérben működő tagok <asp:textbox id=„kakukk” runat=„server”/> A System.Web.UI.Webcontrols névteret használja Ez van leképezve az „asp:” tagprefixre Négyféle típusba sorolható: Belső (beépített, intrinsic) Gazdag (rich) Ellenőrzés (validation) Lista

117 Hogyan működik egy Web űrlap?
Method=„post” Action=„ugyanez a lap” Az űrlap egyedi „id” és „name” attribútumot kap Mindegyik vezérlőelemhez hozzárendelődik egy „value” tag Rejtett vezérlőelem gondoskodik az állapot megőrzéséről (_VIEWSTATE néven) Kikapcsolható az enableviewstate=„false” megadásával bármelyik vezérlőelemnél

118 Eseményvezérlő eljárás írása
Kód deklarációs blokk vagy mögöttes kód <SCRIPT Language=„VB” Runat=„server”> Sub Valami(s As Object, e As EventArgs) …. End Sub </SCRIPT> Code-behind class file Összekapcsolás a szerver vezérlőelemnél: <tag runat=„server” onserverclick=„Valami” /> A metódus nevét kell leírni, és nem egy függvényhívást, mint az ASP-nél.

119 Page események sorrendje
Page_Init Page_Load Ahányszor csak meghívják az ASPX lapot Change típusú események AutoPostBack nélkül Click esemény és az AutoPostback-es Change események Vagyis az az esemény, amitől az űrlap elindult Page_Unload

120 Page.IsPostback Ezzel tesztelhető, hogy első meghívás vagy újrahívás történt: If Not Page.IsPostBack Then ‘ Első meghívás Else ‘ Újrahívás End If

121 Belső (instrinsic) Web vezérlőelem
Az eredeti HTML vezérlőelemek helyett Standard névkonvenciót használnak <input type=xxx> helyett Közös tulajdonsághalmaz Pl. Text, BackColor, ForeColor mindegyiknél A Windows-nál megszokott specifikus nevek Pl. Checked az asp:Checkbox-nál SelectedItem az asp:ListBox-nál Böngészőfüggő kódot generál

122 A Web vezérlőelemek típusai
<asp:textbox> <input type=text> <asp:button> <input type=button> <asp:imagebutton> <input type=image> <asp:checkbox> <input type=checkbox> <asp:radiobutton> <input type=radiobutton> <asp:listbox> <select size=„5”> </select> <asp:dropdownlist> <select> </select> <asp:hyperlink> <a href=„..”> </a> <asp:image> <img src=„…”> <asp:label> <span>…</span> <asp:panel> <div>…</div> <asp:table> <table>…</table>

123 Web vezérlőelemek eseménykezelése
Csak szerveroldali eseményekre reagál Click-típusú események Listadobozoknál Change-típusúak (pl. SelectionChanged) esemény=„metódusnév” Pl. onclick=„valami” Itt az onclick jelenti azt, amit a HTML vezérlőelemnél az onserverclick jelentett autoPostBack tulajdonság Ha true, akkor egy change típusú esemény is azonnal a szerverhez fordul

124 Adatellenőrző vezérlőelemek
Típusok: RequiredFieldValidator CompareValidator RangeValidator RegularExpressionValidator CustomValidator Ellenőrzés helye Kliens (Javascript kezelő böngészőknél) Szerver (a többi böngészőnél)

125 Közös tulajdonságok controlToValidate="Ellenőrzendő control ID-je"
errormessage="Hibaüzenet szövege" display="dynamic" vagy "static" vagy "none" static=fix helyet foglal el a képernyőn dynamic=ha nincs hiba, akkor nem foglal el helyet enableClientScript="true" vagy "false"

126 CompareValidator Összehasonlítás egy konstanssal vagy egy másik vezérlőelem értékével ValueToCompare="konstans" vagy ControlToCompare="másik vezérlőelem ID-je" Type="String" | "Integer" | "Date" | "Double" | "Currency" Operator="Equal" | "NotEqual" | "GreaterThan" | "GreaterThanEqual" |LessThan" | "LessThanEqual" | "DataTypeCheck"

127 RangeValidator Értéktartomány ellenőrzés MinimumValue="konstans"
MaximumValue="konstans" Type="String" | "Integer" | "Date" | "Double" | "Currency"

128 ValidationSummary Page.isValid="true" esetén jelenik meg
Az adott lap összes hibáját kiírja Az eredeti ellenőrző vezérlőelemek helyén ilyenkor "*" jel íratható ki <asp:xxValidator …>*</asp:xxValidator>

129 RegularExpressionValidator
Minta alapján történő ellenőrzés ValidationExpression="formátum" Példa adószámra: ValidationExpression="[0-9]{8}-[0-9]-[0-9]{2}"

130 Az ADO.NET alapjai

131 ADO .NET

132 Connection objektum Kétféle típusa van:
SQLConnection (SQLServer 7.0, 2000) OLEDBConnection (a többi esetén) ConnectionString (SQLConnectionnél) Data Source=.. vagy Server=.. ; Initial Catalog=.. vagy Database=.. ; Integrated Security= vagy Trusted_Connection=sspi; vagy User ID=.. Pwd=.. Connection String (OLEDBConnectionnél) Provider=..; a többi ugyanaz ODBC-t nem támogat (külön ODBC .NET provider kell)

133 Connection példa Az open nem kötelező Dataset esetén
Dim conDB = new SQLConnection() conDB.ConnectionString="Integrated Security=SSPI;Initial Catalog=northwind" conDB.open() Az open nem kötelező Dataset esetén

134 Command objektum Kétféle típusa van: Konstruktor paraméterek
SQLCommand (SQLConnection-nél) OLEDBCommand (OLEDBConnection-nél) Konstruktor paraméterek CommandText (Maga az SQL mondat) Connection (Az xxxConnection objektum) Transaction (A Transaction objektum) Egyéb tulajdonság CommandType=CommandType.StoredProcedure | .TableDirect | .Text (default) Parameters

135 Command objektum metódusai
ExecuteScalar Az eredményhalmaz első sorának első oszlopát adja ExecuteReader DataReader (Sql vagy OleDb) objektumot szolgáltat ExecuteXmlReader XmlReader objektumot szolgáltat ExecuteNonQuery Végrehajtja a megadott DDL vagy DML utasítást Visszaadja az érintett sorok számát Output paraméterek feltöltődnek

136 SqlParameter objektum
Konstruktor paraméterek: ParameterName (pl. SqlDbType (pl. SqlDbType.Int) Size (a méret byte-ban, pl. 4) Egyéb tulajdonságok Direction = ParameterDirection.Input | Output | InputOutput | ReturnValue Value (A paraméter értéke írható és olvasható) SourceColumn (Dataset-nél az eredeti oszlop neve)

137 SqlCommand paraméterei
Paraméter hozzáadása SQLCommand-hoz cmdSqlCom.Parameters.Add(Para1) ahol Para1 egy SqlParameter objektum Paraméterérték írása, olvasása: Az Executexxx után output paraméterre is A visszaadott érték átvétele Value

138 DataReader objektum Két típusa van:
SqlDataReader OleDbDataReader Az xxCommand.ExecuteReader hozza létre Saját konstruktorral nem lehet létrehozni! Csak előrefele olvasható adathalmaz Nyitott xxConnection kell hozzá A végén le kell zárni a Readert és a Connection-t Memóriakímélő

139 DataReader tulajdonságok és metódusok
Read metódus A következő sor beolvasása "False"-t ad vissza, ha nincs több rekord (EOF) Item (default property) dr.Item("SzlaSzam").Value vagy dr(1).Value Object-et ad vissza, ezért gyakran CType kell GetValues (tömböt vár és tölt fel) GetOrdinal("SzlaSzam") IsDbNull(i) "true", ha az oszlop DbNull

140 DataReader példa Dim cmdPartner As SqlCommand=new SqlCommand(
"SELECT PartAzon,PartNev FROM Partner",conDB) conDB.open() Dim rdrPartner As SqlDataReader rdrPartner=cmdPartner.ExecuteReader() Do While rdrPartner.Read() ListBox1.Items.Add(rdrPartner.GetInt16(0) & vbTab & _ rdrPartner.getString(1)) Loop rdrPartner.Close() I = rdrPartner.RecordsAffected ' -1-et ad, mert SELECT conDb.Close()

141 Több Recordset kezelése
Tárolt eljárás több eredményhalmazt is adhat vissza, ha több SELECT van benne rdrPartner.NextResult() megy rá a következő rekordhalmazra A RecordsAffected összeadja az INSERT, UPDATE, DELETE által érintett rekordokat

142 Tranzakciókezelés ADO .NET-ben
SqlConnection.BeginTransaction adja vissza az SqlTransaction objektumot. A tranzakció hatálya alá tartozó Command objektumoknál cmdPartner.TransAction = tranObj tranObj.IsolationLevel = IsolationLevel.Serializable Tranzakció metódusai tranObj.Commit() tranObj.Save() tranObj.Rollback()

143 Dataset Memóriában tárolt relációs adathalmaz
Adatbázis kapcsolat nélkül működik Alaposztályok System.Data.DataSet System.Data.DataTable System.Data.DataColumn System.Data.Constraint System.Data.DatRelation System.Data.DataRow System.Data.DataView

144 A DataSet osztály objektummodellje

145 DataSet létrehozása és feltöltése
Programozott módon A Visual Studio .NET grafikus eszközeivel XML segítségével DataAdapter használatával

146 DataSet programozott létrehozása
Új DataSet objektum létrehozása Dim dsSzamla As New DataSet("Szla") Új DataTable objektum létrehozása és hozzákapcsolása a DataSet objektumhoz Dim dtPartner As New DataTable = dsSzamla.Tables.Add("Partner") Ha nem adunk meg táblanevet, akkor "Table0,1,2" nevet ad Új DataColumn objektum hozzáadása a táblához Dim colPartAzon As New DataColumn = dtPartner.Columns.Add("PartAzon", GetType(System.Int32))

147 DataTable tulajdonságok
Columns A tábla oszlopainak kollekciója (DataColumnCollection) Constraints A tábla Constrainst kollekciója (ConstraintCollection) ForeignKeyConstraint vagy UniqueKeyConstraint osztály PrimaryKey DataColumn() tömbként kell megadni dtPartner.PrimaryKey=New DataColumn() _ {dtPartner.Column("PartAzon")} Rows Az adatsorok kollekciója

148 DataColumn tulajdonságok
AllowDbNull NULL constraints alkalmazása Unique UNIQUE constraints alkalmazása AutoIncrement colPartAzon.AutoIncrement = True colPartAzon.AutoIncrementSeed = 'Innen indul colPartAzon.AutoIncrementStep = 1 ' Egyesével megy SqlTypes.SqlGuid alkalmazása biztonságosabb, ha adatbázishoz nem kapcsolt környezetet használunk Expression Számított kifejezés használata

149 DataRelation objektum
Két DataTable összekapcsolása DataColumn objektumok mentén Rel1 = dsSzamla.Relations.Add("FK_Szamla_Partner", _dtPartner.Columns("PartAzon"), _dtSzamla.Columns("PartAzon"),True) "True" jelentése: constraint-ek felépítését kérjük A kapcsolt táblák elősegítik a navigálást DataRow.GetChildRows metódus pl. az adott partnerhez tartozó számlasorokat adja vissza DataRow() tömbként Törlési szabály beállítása Rel1.DeleteRule = Rule.Cascade | Rule.SetNull | Rule.SetDefault | Rule.None

150 DataException események
ConstraintException Kísérlet egy éles constraint megsértésére DuplicateNameException Valamelyik Add metódus duplikált elemet hozna létre InvalidConstraintException Rossz reláció létrehozása vagy elérése NoNullAllowedException Egy AllowDbNull=False mezőben NULL-t akarunk írni

151 Új sorok beillesztése a táblába
DataRow objektum létrehozása drPartner = dtPartner.NewRow() DataRow objektum feltöltése adatokkal drPartner("PartNev") = "Kakukk Kft." drPartner("PartVaros") = "Budapest" …. vagy drPartner.ItemArray = new Object() {"Kakukk Kft.","Bp"…} DataRow hozzáadása a DataTable objektumhoz dtPartner.Rows.Add(drPartner)

152 Adott sor megkeresése a táblában
A DataTable.Rows kollekció segítségével DataRowCollection típusú objektumot ad vissza Item tulajdonság dtPartner.Rows(3) a negyedik sort adja vissza Count tulajdonság a sorok számát adja A Find metódus az elsődleges kulcs alapján keres Dim Kulcs As Object Dim Sor As DataRow Kulcs = 214 Sor = dtPartner.Find(Kulcs) If Sor Is Nothing Then ' Nincs meg a keresett rekord

153 Meglévő sorok módosítása a táblában
DataRow.BeginEdit metódussal kezdődik Kikapcsolja a constraint események kezelését DataRow.EndEdit vagy .CancelEdit metódussal zárjuk le a módosítást Visszakapcsolja az eseménykezelést Mintapélda: ' Behozzuk a keresett sort, például: drPartner = dtPartner.Rows(7) drPartner.BeginEdit() drPartner("PartNev") = "Teszt Kft." drPartner.EndEdit()

154 Sorok törlése a táblából
Fizikai törlés dtPartner.Rows.RemoveAt(5) 'Törli a 6. sort drPartner = dtPartner.Rows(5) dtPartner.Rows.Remove(drPartner) ' Ez is törli a 6. sort Logikai törlés drPartner.Delete A drPartner.RowState értékét RowState.Deleted-re állítja

155 Adatellenőrzés menete
DataTable események ColumnChanging (oszlop módosítása előtt) ColumnChanged (oszlop módosítását követően) RowChanging (minden oszlop módosítását követően) RowChanged (minden RowChanging után) RowDeleting (akkor, amikor törlésre jelölünk egy sort) RowDeleted (a sor törlését követően) BeginEdit, EndEdit esetén Csak egyszer lép fel a RowChanging és a RowChanged Az események kezeléséhez WithEvents opcióval kell deklarálni a DataTable-t Throw-val lehet megakadályozni a módosítást

156 RowState és RowVersion
DataRow.RowState lehetséges értékei: Deleted = a sort törölték DataRow.Delete-tel Modified = módosították, de AcceptChanges még nem volt Added = új sort vettek fel, de AcceptChanges még nem volt Unchanged = a legutolsó AcceptChanges óta nem módosult Detached = a DataRow nincs DataTable-hez kapcsolva DataRow.RowVersion lehetséges értékei: Current = az éppen aktuális értékek Default = az alapértelmezett értékek Original = az eredeti (módosítás előtti) értékek Proposed = módosítás közbeni (még nem elfogadott) értékek DataRow("PartAzon",DataRowVersion.Original) DataRow.HasVersion-nel lekérdezhető, hogy van-e olyan verzió

157 A módosítások véglegesítése
AcceptChanges metódus DataRow, DataTable vagy DataSet szinten is kiadható Az "Original" értékek felveszik a "Current" értékeket A RowState értéke Unchanged lesz A RowError információk törlődnek A DataTable.HasErrors értéke false lesz RejectChanges metódus

158 DataView objektum Az SQL View szerepét tölti be DataSet-nél, DE!:
A DataView nem tekinthető DataTable-nek Csak egy DataTable-re alapulhat (join-ok nem lehetnek) Nem hagyhatók ki oszlopok az eredményből Tipikusan rendezésre és szűrésre alkalmas Dim dv As New DataView(dsSzamla.Tables("Partner")) dv.Sort = "PartNev" dv.Filter = "Irszam = '5600'" A felhasználói interfészen használjuk Így pl. több vezérlőelemet is hozzákapcsolhatunk ugyanahhoz a DataTable objektumhoz. DataTable.DefaultView használata

159 DataAdapter objektum Kétféle formája van:
SqlDataAdapter OleDbDataAdapter Hídnak tekinthető az adatbázis és a DataSet egy adott DataTable objektuma között Fill metódus tölti fel a DataTable-t az adatbázisból Update metódus viszi vissza a módosításokat a DataTable-ből az adatbázisba Mire alkalmas, és mire nem Jó: Tábla másolata egy közbenső rétegben Rossz: Kereső funkció eredménye egy Web site-on

160 DataAdapter létrehozása
Két módszer kínálkozik Data Adapter Configuration Wizard használata Saját kód készítése DataAdapter felépítése – egyelőre csak olvasásra Dim daPartner As SqlDataAdapter Dim cnSzamla As SqlConnection("connection string adatok") Dim cmdPartner As New SqlCommand( _ "SELECT * FROM Partner",cnSzamla) daPartner.SelectCommand = cmdPartner DataSet feltöltése DataAdapter-rel intSorok = daPartner.Fill(dsSzamla | dtPartner | dsSzamla, "Partner")

161 Módosítások visszaírása az adatbázisba
DataAdapter.Update(Para1) metódus meghívása A Para1 lehet DataSet, DataTable vagy DataRow() tömb A megfelelő SQL parancsok végrehajtása InsertCommand UpdateCommand DeleteCommand A kapcsolatot a DataTable-vel a megfelelő SQLParameter objektumok hozzák létre

162 Mintapélda módosításra
Dim cmdModos As New SqlCommand("UPDATE Partner SET" & _ WHERE _ cnSzamla) cmdModos.Parameters.Add(New _ SqlDbType.Int32, 4, ParameterDirection.Input, False, _ 0, 0, "PartAzon", DataRowVersion.Current, Nothing)) cmdModos.Parameters.Add(New _ SqlDbType.Char, 30, ParameterDirection.Input, False, _ 0, 0, "PartNev", DataRowVersion.Current, Nothing)) cmdModos.Parameters.Add(New _ SqlDbType.Int32, 4, ParameterDirection.Input, False, _ 0, 0, "PartAzon", DataRowVersion.Original, Nothing))

163 DataSet módosítások kezelése
DataTable.GetChanges metódus Előállít egy újabb DataTable-t, amibe csak az adott módosítások (pl. csak a törlések) kerülnek DataSet.GetChanges is hasonlóan működik DataTable.Select metódus Szűrő, rendezés és RowState alapján kijelölt sorokat egy DataRow() tömbbe rakja Nem másolás(!), hanem pointerek kialakítása DataSet.Merge metódus Az adott DataSet-hez hozzárakja egy másik DataSet vagy DataTable tartalmát

164 Konfliktusok kezelése
Az optimista zárolás miatt konfliktusok keletkezhetnek Konfliktusok detektálása Konfliktusok feloldása "Az utolsó győz" elv alapján A konfliktust okozó adatok a DataSet-ben maradnak A helyi DataSet-ben visszaállunk az eredeti adatra A helyi DataSet-be betöltjük a legutolsó adatokat

165 DataSet és az XML XSD Schema Erős típusú DataSet
Az XML dokumentum struktúráját írja le Az adatbázis szerkezeti leírásához hasonló Adattáblák és a táblák közötti kapcsolatok Adatmezők neve és adattípusa Kényszerek (pl. elsődleges kulcs, egyedi kulcs, stb.) Erős típusú DataSet Sémainformációval rendelkező DataSet A séma segíti az adatellenőrzést Hatékonyabb az adatimport és az adatexport

166 XSD séma alapelemei: element
<xs:element name="PartAz" type="xs:integer" /> Egyszerű vagy komplex adat leírására Kisbetű-nagybetű megadására érzékeny Primitív XML adattípusok string, Boolean, float, double, decimal, dateTime, time, date, anyURI Származtatott XML adattípusok integer, long, short, int, byte, positiveInteger, unsignedLong Példa adatfeltöltésre <PartAz>2547</PartAz> ' Jó példa <PartAz>XC35</PartAz> ' Rossz példa

167 XSD séma alapelemei: attribute
<xs:attribute name="PartPri" type="xs:number"/> Csak egyszerű adat leírására jó Alapértelmezésbeli érték megadható Az attribútumok sorrendje tetszőleges, míg az elemek sorrendje a séma szerinti kell hogy legyen

168 XSD séma alapelemei: simpleType
Létrehozás: <xs:simpleType name="ketJegyuSzam"> <xs:restriction base="xs:positiveInteger"> <xs:maxInclusive value="99" /> </xs:restriction> </xs:simpleType> Felhasználás: <xs:element name="Db" type="ketJegyuSzam" /> Tipikus facet elemek: length, maxLength, minLength, maxExclusive, pattern

169 XSD séma alapelemei: complexType
Létrehozás: <xs:complexType name="Cim"> <xs:sequence> <xs:element name="Varos" type="xs:string" /> <xs:element name="UtcaHsz" type="xs:string" /> <xs:element name="Irsz" type="xs:string" /> </xs:sequence> </xs:complexType> Felhasználás: <xs:element name="SzlaCim" type="Cim" /> A komplex típusok egymásba ágyazhatók

170 XSD séma alapelemei: group
Példa: <xs:group name="RendFej"> <xs:sequence> <xs:element name="VevoNev" type="xs:string" /> <xs:element name="RendSzam" type="xs:number" /> <xs:element name="RendDat" type="xs:date" /> </xs:sequence> </xs:group> Csoportok típusai: sequence kötött sorrendben minden elem kötelező choice a felsoroltak közül csak az egyik kell all nulla vagy több elem bármilyen sorrendben

171 XSD séma adatkiegészítése
A névtartományt meg kell adni: xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" Elsődleges kulcs megadása <xs:key name="pkPartner" msdata:PrimaryKey="true"> <xs:selector xpath=".//Partner"/> <xs:field xpath="PartAzon"/> </xs:key> Egyedi kulcs megadása <xs:unique name="Adoszam"> ….stb. Idegen kulcs megadása <xs:keyref name="fkRendPart" refer="pkPartner"> … stb.

172 XSD betöltése egy DataSet-be
Mintapélda: DS1 = new DataSet() DS1.ReadXmlSchema("C:\Proba\Kakukk.Xsd") Közvetlen filenév helyett használható: StreamReader, TextReader, XmlReader objektum is Metaadatok lekérdezhetők ezután: Ds.Tables tulajdonság, Ds.Relations tulajdonság Tables(index vagy név).Columns(index).ColumnName Tables(index vagy név).Columns(index).DataType Az InferSchema metódussal XML-ből is felépíti az adatszerkezetet

173 XML adatok betöltése a DataSet-be
Ds.ReadXml(XmlObjektum,XmlReadMode) Az XmlObjektum filenév, stream, text vagy Xmlreader Az XmlReadMode lehetséges értékei: ReadSchema Az inline séma és az adatok együttesen IgnoreSchema Inline séma nélkül csak az adatok InferSchema Az adatok alapján épül fel a séma is DiffGram Berakja a DiffGram-ot a DataSet-be Fragment SQLServer-ből generált XML-nél A sémának nem megfelelő adatok kimaradnak

174 XML írása DataSet-ből Ds.WriteXmlSchema(XmlObjektum) Ds.GetXmlSchema()
Csak a sémainformációt írja ki egy file-ba vagy reader-re Ds.GetXmlSchema() String-ként írja ki a sémainformációt Ds.WriteXml(XmlObjektum,XmlWriteMode) IgnoreSchema Csak az adatokat írja ki az XML-be WriteSchema Inline sémát és az adatokat írja ki DiffGram Diffgram-ot ír eredeti és aktuális adattal

175 DiffGram Csak a DataSet változásait írja ki DiffGram névtér:
Disconnected DataSet esetén pont ez kell DiffGram névtér: xmlns:diffgr="urn:schemas-microsoft-com:xml:diffgram-v1" Három részre osztható: Aktuális adat a sémának megfelelő elemekkel, majd ezután <diffgr:before> elemben az eredeti tartalom <diffgr:errors> elemben a fellépett hibák DiffGram attribútumok (annotációk) diffgr:hasChanges="modified | inserted | descent" diffgr:id = sorok egyedi azonosítása az összekapcsolás miatt

176 Adatok megjelenítése a Web űrlapon

177 Adatok vezérlőelemhez kapcsolása
Szintaktikai alakja <tagprefix:tagnév attr1=<%# Adatkötési kifejezés %> runat="server"> sima szöveg <%# Adatkötési kifejezés %> A DataBind() metódus hozza létre a kapcsolatot Page.DataBind() Az adott lap összes adatkötését élesíti ctlValami.DataBind() Csak az adott vezérlőelem adatkötéseire vonatkozik

178 Adatkötési kifejezés lehetséges formái
Template vezérlőelemeknél (DataGrid, DataList, Repeater) Container.DataItem("mezőnév") Csak akkor egyszerű, ha a mező string-et ad, egyébként a String.Format segítségével át kell alakítani DataBinder.Eval(Container.DataItem,"mezőnév", "formátum") Futáskori kötéssel működik Szerver vezérlőelemek között Az adott vezérlőelem valamelyik tulajdonsága <asp:label text=<%# lstOrszag.SelectedItem.Text %> runat="server">

179 DataGrid vezérlőelem Táblázatos adat megjelenítése
Rendezhető, editálható elemek Bármelyik Collection osztály, ami IEnumerable System.Data.DataView, System.Collections.ArrayList, stb. A vezérlőelem létrehozása <asp:DataGrid id="dgPartner" runat="server"> Hozzákapcsolás egy adatforráshoz dgPartner.DataSource=ds.Tables("Partner").DefaultView dgPartner.DataBind()

180 DataGrid oszlopok típusai
AutoGenerateColumns=true az alapértelmezés <Columns>….</Columns> között asp:BoundColumn Adatmegjelenítő oszlop asp:ButtonColumn Nyomógombot tartalmazó oszlop asp:EditCommandColumn Edit nyomógombot tartalmaz asp:HyperLinkColumn Adatmegjelenítés hyperlink-ként asp:TemplateColumn Saját template adható ezen belül

181 DataGrid oszlopok tulajdonságai
HeaderText, FooterText HeaderImageUrl HeaderStyle, FooterStyle, ItemStyle SortExpression Az OnSortCommand metódusnak átadott mező neve ReadOnly (csak a BoundColumn-nál) ButtonType (ButtonColumn, EditCommandCol.) ButtonColumnType.LinkButton vagy .PushButton CancelText, EditText, UpdateText EditCommandColumn esetén vagy az EditText vagy az UpdateText/CancelText kombináció látszik

182 Adathoz kapcsolható tulajdonságok
BoundColumn esetén DataField a megjelenített és editálható mező neve ButtonColumn esetén DataTextField adja a Text-hez kapcsolt mező nevét DataTextFormatString írja elő a megjelenítési formátumot HyperLinkColumn esetén DataNavigateUrlField adja az URL-t hordozó mező nevét, ami a NavigateUrl tulajdonságba kerül DataNavigateUrlFormatString írja elő a megjelenítési formátumot

183 Template elemek használata
TableRow-hoz vagy TableCell-hez rendelhető Hierarchikus sorrend EditItemStyle SelectedItemStyle AlternatingItemStyle ItemStyle ControlStyle Egyéb stíluselemek HeaderStyle, FooterStyle PagerStyle

184 DataGrid példa <asp:DataGrid id="Racs1" runat="server" BorderColor="black" BorderWidth="1" CellPadding="3" ShowFooter="true" OnItemDataBound="Item_Bound" AutoGenerateColumns="false"> <HeaderStyle BackColor="#00aaaa"> </HeaderStyle> <FooterStyle BackColor="#00aaaa"> </FooterStyle> <Columns> <asp:BoundColumn HeaderText="Number" DataField="IntegerValue"> <ItemStyle BackColor="yellow"> </ItemStyle> </asp:BoundColumn> <asp:BoundColumn HeaderText="Item" DataField="StringValue"/> <asp:BoundColumn HeaderText="Price" DataField="CurrencyValue" DataFormatString="{0:c}"> <ItemStyle HorizontalAlign="right"> </ItemStyle></asp:BoundColumn> </Columns> </asp:DataGrid>

185 Repeater vezérlőelem A megadott template alapján ismétli az adatokat
Ez az egyetlen olyan elem, ahol a HTML tagok szétbonthatók, például: A nyitó <table> a <HeaderTemplate>-be kerül A <tr> az <ItemTemplate>-be A záró </table> pedig a <FooterTemplate>-be Adathordozó template elemek: ItemTemplate és AlternatingItemTemplate Az ItemTemplate az egyetlen kötelező elem Nem adathordozó template elemek: HeaderTemplate, FooterTemplate, SeparatorTemplate

186 Repeater példa <asp:Repeater id="Tabla1" runat="server">
<HeaderTemplate> Partnerek neve és címe: </HeaderTemplate> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "PartNev") %> (<%# DataBinder.Eval(Container.DataItem, "PartCim") %>) </ItemTemplate> <SeparatorTemplate>, </SeparatorTemplate> </asp:Repeater> Tabla1.DataSource = ds ' Ez egy feltöltött DataSet Tabla1.DataMember = "Partner" Tabla1.DataBind()

187 DataList vezérlőelem A Repeater-hez hasonló template-ek
EditItemTemplate és SelectedItemTemplate is létezik Ennek megfelelően editálható (a DataGrid-hez hasonlóan) Az ItemTemplate az egyetlen kötelező elem A DataGrid-hez hasonló stílusok Minden template-hez stílus is tartozhat, pl. ItemStyle Tulajdonságok RepeatLayout = Table vagy Flow RepeatColumns = Hány oszlopba rendezze az adatokat RepeatDirection = Horizontal vagy Vertical

188 Felhasználói vezérlőelemek és komponensek készítése

189 Code-behind Page A Page direktíva kapcsolja össze a két file-t
Page Inherits="Lap1" Src= "Minta.vb" %> A Page direktíva kapcsolja össze a két file-t Eljáráshívás a Code-Behind Page alapján Page Inherits="Lap1" Src="Minta.vb"%> Imports System Imports System.Web Public Class Lap1 Inherits System.Web.Ui.Page Public Function Adat1() … End Function End Class ds = Adat1()

190 Vezérlőelemek elérése a kódból
A névtartományokat célszerű importálni Imports System.Web.UI.WebControls Imports System.Web.UI.HTMLControls A vezérlőelemeket azonos névvel Public-ként deklarálni kell Public lblPartNev As Label Public txtVaros As TextBox Eseményvezérlő eljárásokat kell írni Public Sub btnKuld_Click(s as Object, e as EventArgs) lblPartNev.Text = "Kakukk Kft." End Sub

191 User Control Felhasználói szerver vezérlőelem (.ascx file)
Az Include helyett használható Tipikus alkalmazás: fejléc, navigációs gombsor <Head>, <Body> és <Form> nem lehet benne @Page helyett direktívát használjuk Control Language="vb" Inherits="Elem1" Src="UIElem.vb" %> Információátadás a controlt tartalmazó lapnak Public Property pAdat As Integer Get Return Cint(txtAdat.Text) End Get End Property

192 User Control beépítése
Regisztrálni kell az adott ASP .NET lapon Register TagPrefix="FoNev" TagName="AlNev" Src="Kakukk.ascx" %> A TagPrefix adja az egyedi névteret A TagName adja a user control egyedi nevét Szerver vezérlőelemként építjük be a lapra: <FoNev:AlNev id="Vez1" runat="server"> FoNev:AlNev id="Vez2" runat="server"> Információátadás a lap és a control között lblSzam = Vez1.pAdat ' A Public Property Get-je alapján Vez1.pAdat = 23 ' A Public Property Set-je alapján

193 .NET komponensek A .NET komponensek előnyei a COM-hoz képest a telepítés szempontjából Nincs szükség regisztrációra Az alkalmazás/bin könyvtárba kell bemásolni Nincs névtartomány ütközés Nem kell a Web szervert újraindítani Minimum egy névtér és egy osztály Namespace EtKomp Public Class Szamla … End Class End Namespace

194 Komponensek felhasználása
Az alkalmazás indításakor a /bin könyvtárból a komponensek betöltődnek A Web.Config-ban beállítható, hogy melyek kellenek A komponens elérése az ASP .NET lapról Import Namespace="projektnév.EtKomp" %> Dim x As New Szamla Import nélkül: Dim x As New projektnév.ETKomp.Szamla

195 Web szolgáltatás Web Service

196 Web szolgáltatás működési modellje

197 Web szolgáltatások jellemzői
Alkalmazások közötti információátadás Nyílt Internet protokollt használ (nem DCOM!) Lehetséges protokollok: HTTP GET, HTTP POST XML és SOAP (Simple Open Access Protocol) WSDL (Web Services Description Language) által leírt üzenetek Nyilvános használatra szánt szolgáltatásoknál Discovery információ kialakítása UDDI (Universal Discovery Description and Integration)

198 Web szolgáltatás létrehozása
Egy .asmx és egy .asmx.vb file-ból áll Az .asmx file tartalma: <%& WebService Language="vb" Codebehind="Szemely.asmx.vb" Class="Projektnév.Szemely" %> Az .asmx.vb file tartalma: <WebService(Description:="Info…")> Public Class Szemely Inherits System.Web.Services.WebServices ' Nem kell <WebMethod(Description:="Info…")> Public Function FelvSzemely(strNev As String) As String … End Function End Class

199 Nyilvánosságra hozatal (discovery)
Manuális discovery dokumentum <disco:discovery xmlns:disco=… xmlns:WSDL=…> <WSDL:contactRef ref="//et/Proj/Szemely.asmx?WSDL"/> <disco:discoveryRef ref="Folder/default.disco"/> </disco:discovery> Dinamikus discovery dokumentum A VS .NET automatikusan létrehozza .vsdisco kiterjesztéssel <dinamycDiscovery xmlns=…> <exclude path="_vti_cnf"/> … </dynamicDiscovery> A tényleges discovery dokumentum futásidőben jön létre akkor, amikor a kliens alkalmazás rákérdez erre az info-ra

200 Web szolgáltatás elérése
HTML leíró lap //et/projektnév/Szamla.asmx hatására jelenik meg Az elérhető metódusok és argumentumok Egyszerű tesztelési célú szervizprogram Leírás a Description paraméterek tartalma alapján WSDL dokumentum //et/projektnév/Szamla.asmx?WSDL hatására jelenik meg XML formátumú leírás (szerződés)

201 Web szolgáltatás meghívása
Böngészőprogramból //et/Szamla.asmx/FelvSzemely?strNev=Kakukk XML-ként adja vissza a felvett személy kódját <?xml version="1.0"> <string xmlns=…>13479</string> A HTTP-GET protokollt használja Kliens alkalmazásból Web References hozzáadásával a VS .NET létrehoz egy proxy osztályt korai kötéssel Ezután úgy hivatkozunk, mint egy lokális komponensre Dim x As New Szamla.Szemely UjKod = x.FelvSzemely("Kakukk")

202 A Visual Studio .NET vizuális eszközei

203 Solution Explorer

204 IDE ToolBox-ok Típusok General Data Components XML Schema Web Forms
HTML Clipboard Ring Windows Forms

205 További ablakok Class View Properties Window Server Explorer
Object Browser Resource View Task List Output Window Command Window Document Outline

206 Projekt szemlélet File-ok gyűjteménye
Több projekt is megnyitható egyszerre A projekt megnyitása az éles Web site-ot jelenti Projekt nélkül is megnyitható egy file File menü Open File parancs Solution (.SLN) Projekt-konténer 1:N kapcsolat van a solution és a projekt között

207 Server Explorer Adatbázisok kezelése SQLServer Message Queues
Crystal Services Event Logs

208 ASP .NET Web alkalmazás telepítése és konfigurálása

209 Konfigurációs file szekciói
<configuration> <configSections> <sectionGroup name="system.web"> <section name="authorization" type="System.Web.Configuration.AuthorizationConfigHandler, System.Web, Version= , Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <section name="sessionState" type="System.Web.SessionState.SessionStateSectionHandler, System.Web, Version= , Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" /> </sectionGroup> </configSections> </configuration>

210 Szekciók kitöltése információval
<system.web> <authorization> <allow users="*" /> <!—Ha az összes felhasználót engedjük --> <!-- Allow or deny specific users. allow users="[felhasználók vesszővel elválasztott listája]" roles="[szerepkörök vesszővel elválasztott listája]"/> <deny users="[felhasználók vesszővel elválasztott listája]" --> </authorization> <sessionState sqlConnectionString="data source= ; user id=sa;password=" cookieless="false" timeout="10"/> </system.web>

211 Hitelesítés (authentication)
Windows Az IIS végzi el Basic Digest Integrált (Kerberos) Forms Cookie-t használhat Passport None

212 Forms hitelesítés konfigurálása
<authentication mode="forms"> <forms name="cookie_neve" loginurl="/login.aspx"> <credentials passwordFormat=SHA1> <user name="Gipsz Jakab" password="9EF4GZ5634HJ67F8"/> <user name="Teszt Elek" password="8G6K734FWP57FZQ0"/> </credentials> </forms> </authentication>

213 Forms hitelesítés programozása
FormsAuthentication.Authenticate Két paramétert vár (felhasználónév, jelszó) Logikai értéket ad vissza, hogy szerepel a Credentials szekcióban, vagy sem FormsAuthentication.RedirectFromLoginPage Két paramétert vár (felhasználónév, kell-e cookie) Kiállít egy "jegyet" az adott felhasználó nevére FormsAuthentication.SignOut() Érvényteleníti a korábban kiállított "jegyet"

214 Jogosultság (authorization)
<location path="szamla" <system.web> <authorization> <allow users="Nagy Jolán, Németh Péter"/> <deny users="Kiss Péter" /> <deny users="?" /> </authorization> </system.web> </location> <location path="mindenki" <allow users="*"/>


Letölteni ppt "Internetes alkalmazásfejlesztés"

Hasonló előadás


Google Hirdetések