Alkalmazásfejlesztés gyakorlat ASP.NET
Alapfogalmak Statikus tartalom HTML fájl Dinamikus tartalom Generált HTML fájl A generálás módjára több megoldás létezik. Java: Servlet, JSP, JSF, Struts, stb.. .NET (C#, VB, …): ASP.NET Hatókörök Request/Response Adott HTTP kérést és választ reprezentáló objektumok Pl.: Adat egy oldal instance változójában, csak a kérés megválaszalásának idejére létezik Application Az alkalmazás teljes futása alatt elérhető scope, hatókör Pl.: Adat egy statikus változóban, tárolás valamilyen alkalmazás szintű objektumban Session Adott user globális objektuma Ahány user annyi session objektum Érvényes: rendszerint timeout feltétel, pl. 10 percig érvényes
Statikus ↔ dinamikus tartalom Statikus tartalom A HTML a szerveren is egy fizikai fájl, egyszerűen visszakapja a kliens Dinamikus tartalom Generált HTML fájl, fizikailag nem létezik Valamilyen szkript motor generálja
Session Igény A HTTP állapotmentes Egy appban szükséges a munkamenet (session) során átmeneti adatok tárolása. A HTTP állapotmentes Minden HTTP request-response külön kérés Közöttük a HTTP nem tart meg adatot Így magával a HTTP-vel nem tudunk átmeneti adatokat tárolni
Session Megoldás: Session id küldése többféle lehet Adatok tárolása szerver oldalon pl. memóriában egy kulccsal, a session id-vel A session id küldözgetése HTTP kérés-válaszok során Session id küldése többféle lehet Cookie URL átírás Rejtett input field Stb…
Session / cookie Cookie HTTP válaszban lehet küldeni rövid szöveges adatokat A böngésző az oldal domain-jéhez eltárolja Minden kérésben küldi az aktuális domain cookie-jait Session id tárolás: Session id-t tartalmazó cookie küldése böngészőnek Böngészőtől érkező, session id-t tartalmazó cookie olvasása web szerverben
Session / cookie
Session / URL átírás URL átírás URL: schema:…:schema://part.part…part/dir/dir/file?param=value… Pl.: http://alkfejl.hu/gyak/10/index.html?user=szte Pl.: jdbc:sqlite://c:\db\bookshop.db A fontos a ? utáni rész, melynek neve query string Benne paraméterek adhatóak meg, melyet az oldal opcionálisan feldolgoz URL átírás során a session id-t itt tároljuk Pl.: http://localhost/index.html?sid=12345 Ezt a web szerver olvassa és kikeresi a user sessionjét.
Sessions / ASP.NET ASP.NET Sessions MSDN: http://msdn.microsoft.com/en-us/library/ms178581.aspx Érdemes átolvasni Általános ismeretek is vannak benne Pl: „SessionID values are sent in clear text, …. A malicious user could get access to the session of another user by obtaining the SessionID value and including it in requests to the server. If you are storing sensitive information ...”
Active Server Pages Webböngészőben megjeleníthető lapok .aspx 2 fő rész Design (felület) Codebehind (felület logikája) E két komponens kódjából a keretrendszer összeállítja a böngészők számára értelmezhető HTML kódot
Design Felépítése: ASP konténerek, vezérlők tartalmazhat HTML elemeket, szerveren futó ASP konténereket, vezérlőket, vagy mindkettőt ASP konténerek, vezérlők az asztali alkalmazásban megismert komponensek átiratai
Codebehind Programkód (esetünkben Visual C#), mely közvetlenül képes kommunikálni a felület komponenseivel, illetve a középső réteggel Az oldalhoz rendelt osztály található itt, mely a System.Web.UI.Page-ből származik További támogatott nyelvek: Visual Basic Visual J# JScript .NET
Eseménykezelés A desktop alkalmazásokban megismert technológia segítségével Fontos különbség: a generált események csak a tartalmazó konténer (form) szerverre történő visszaküldése (postback) esetén futnak le (pl. OK gomb lenyomása). Lehet szabályozni Pl. ComboBox, TextBox esetén AutoPostBack=true Ekkor azonnal végrehajtódik a komponens által generált esemény
ASP.NET projekt megnyitása Visual Studio indítása File -> Open -> Project BookShopWeb.sln-nel egyből indítható Új project: File -> New -> Project A megjelenő ablakban ASP.NET web application-t kell kiválasztani
Controller réteg beállítása referenciaként Visual Studioban Jobb gomb a BookShop solutionre, Add -> Existing Project…; A megjelenő ablakban keressük ki a BookShopCore projektet Jobb gomb a Web projektre -> Add -> Reference…; A megjelenő ablakban a Solution fül alatt válasszuk ki a BookShopCore-t Ezzel a BookShopCore projekt osztályait (mögöttes logika) elérhetővé tettük a webes alkalmazás számára
Book Shop Web Könyvesbolt webes alkalmazás Ügyfelek felvétele, listázása, stb. Könyvek beszerzése, listázása, stb. Könyvek eladása, eladások listázása, stb. Az órai példa az asztali alkalmazás átírása webesre, felhasználva annak control és model rétegét.
Projekt felépítése Lapok MasterPage .aspx kiterjesztésű fájlok (design, markup): ezt fordítja be a keretrendszer a html kódba *.designer.cs: mögöttes kód számára szükséges osztály generálása, ugyanúgy, mint a desktop alkalmazásban .cs: codebehind MasterPage az oldalak sablonja (nem kötelező): közös tulajdonságok definiálását teszi lehetővé (pl. megjelenés, menü)
Feladat „Buy Book” menüpont megvalósítása Ügyfelek felvételéhez analóg módon Következő attribútumokat lehet megadni: Author (TextBox) szerző Title (TextBox) könyv címe Year (TextBox) kiadás éve Category (ComboBox) műfaj Price (TextBox) ár Piece (TextBox) készlet, darabszám Készítsünk ASPX lapot a beszerzéshez (leírás a .doc fájlban)
Feladat „List Books” menüpont megvalósítása Hozzunk létre egy lapot, mely a „Default” leszármazottja, továbbá a MyMasterPage.master szolgáltatja a megjelenítés alapját Design nézetben adjunk hozzá egy GridView vezérlőt Az oldal Page_Load függvényében töltsük fel a GridView-t a ListCustomers.aspx–ben található példa mintájára.
Házi feladat Sell Book menüpont kifejlesztése A Controller réteg már megvalósított funkcióját felhasználva 1-1 ComboBoxban listázzuk ki az adatbázisban lévő könyvek címeit ill. ügyfelek neveit Az ügyfél adatai bal, a kiválasztott könyv adatai jobb oldalt jelenjenek meg nem szerkeszthető módon Alul OK és Cancel gombok + eseménykezelés hozzá Debugoljuk az alkalmazást, figyeljük meg az események bekövetkezési sorrendjét! (Page_Load, BtnOk_Click)
Linkek System.Web.UI névtér bemutatása: http://msdn.microsoft.com/en-us/library/system.web.ui(VS.85).aspx Ha elakadunk (rengeteg problémára segítség, példaprogramok): http://www.codeproject.com/