1 Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze Dominik Kostka Databázová aplikace ...
Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze
Dominik Kostka Databázová aplikace pomocí ASP.NET Bakalářská práce
2011
Prohlášení Prohlašuji, že jsem bakalářskou práci na téma Databázová aplikace pomocí ASP.NET zpracoval samostatně a použil pouze zdroje, které cituji a uvádím v seznamu použitých informačních zdrojů.
V Praze, 19. 12. 2011
................................ Dominik Kostka
Poděkování Na tomto místě bych rád poděkoval vedoucímu bakalářské práce Ing. Davidu Klimánkovi, Ph.D. za čas věnovaný při konzultačních hodinách a některé připomínky k práci. Dále děkuji rodině za podporu a trpělivost.
Abstrakt Bakalářská práce Databázová aplikace pomocí ASP.NET se snaží zpracovat návrh a implementaci rezervačního systému restaurace. Pro její vývoj jsou používány následující softwarové prostředky: vývojové prostředí Visual Studio 2010 a webové technologie ASP.NET, XHTML, CSS a AJAX. V teoretické části bakalářské práce jsou čtenáři seznámeni se základními principy webové technologie ASP.NET, její komparací s alternativními technologiemi PHP a JSP a rešerší existujícího řešení pro rezervační systém restaurace. V praktické části jsou názorné ukázky návrhu a implementace databázové aplikace a popis jejího vývoje. V závěru práce jsou shrnuty veškeré poznatky s návrhy možností dalšího využití. Klíčová slova: Databáze, aplikace, ASP.NET, rezervační systém restaurace
Abstract The bachelor thesis Database application by ASP.NET deals with the proposal and implementation of a restaurant reservation system. For the development are used following software resources: IDE Visual Studio 2010 a websites technology ASP.NET, XHTML, CSS a AJAX. In the theoretical part of the bachelor thesis are readers acquainted with basic principles of the web technology ASP.NET in comparison with alternative technologies PHP and JSP, and with the research of existing solutions for the restaurant reservation system. In the practical part are demonstrative examples of the proposal and implementation of database application and the description of its development. In the conclusion of the thesis are summarized all findings and suggestions of other application.
Obsah Obsah................................................................................................................................7 Úvod..................................................................................................................................9 Teoretická část...............................................................................................................10 1
Představení technologie ASP.NET .....................................................................10 1.1
Distribuce aplikace na web ........................................................................51
Závěr...............................................................................................................................52 Seznam použitých zdrojů .............................................................................................53 Přílohy ............................................................................................................................55
8
Úvod Zadáním mé bakalářské práce je návrh a implementace databázové aplikace pomocí ASP.NET. Při jejím vývoji kladu důraz především na využití serverových ovládacích prvků, které poskytuje technologie ASP.NET. Aplikace představuje rezervační systém restaurace. Toto téma jsem si zvolil z toho důvodu, že se již dlouho zajímám o problematiku technologie ASP.NET, a proto jsem touto cestou konkretizoval její přínos v praxi na rezervačním systému restaurace, který nabízí v této podobě více funkcí než alternativní webové technologie. V rámci vývoje používám primárně prostředky technologie ASP.NET. Kromě serverových ovládacích prvků využívám programovací jazyk C# pro tvorbu obslužného kódu událostí, které jsou vyvolané uživatelem aplikace. Pro vytvoření přehledného grafického uživatelského rozhraní využívám jednak ASP.NET masterpages, které slouží k vytvoření jednotného vzhledu aplikace, dále ASP.NET Themes and Skins, jež umožňují konfigurovat vzhled serverových ovládacích prvků a rovněž technologii CSS pro formátování jednotlivých HTML elementů stránek. Při zpracování jsem primárně čerpal z publikace Beginning ASP.NE T 4 in C# and VB eBook, dále také z vývojářské brožury Webový vývoj v ASP.NET 2.0 pomocí bezplatných Express nástrojů pro úplné začátečníky od společnosti Microsoft a z publikace Návrh databází od Michaela J. Hernandeze. Pro úplnost a ucelenost projektu jsem získal další důležité informace z internetových materiálů, jako například: .NET Framework od začátku od Tomáše Hercega nebo webový portál Microsoft MSDN ASP.NET 4. Dílčí výstupy vývoje jsem zpracoval v praktické části, a to jak vizuálně, pomocí vývojových diagramů, tak i ukázkami kódu z průběhu programování aplikace.
9
Teoretická část 1 Představení technologie ASP.NET ASP.NET je technologie pro tvorbu webových aplikací a služeb od firmy Microsoft a považuje se za nástupce starší technologie ASP. Název ASP.NET je odvozen od předchůdce ASP, obě technologie však fungují na odlišném principu. Starší ASP používá k vývoji aplikací skriptovací programovací jazyky jako VBScript apod., které se interpretují, což má výrazný dopad na rychlost aplikací. Oproti tomu ASP.NET používá téměř výhradně jazyky kompilované, které navíc již plně podporují principy OOP. Geneze ASP.NET na základě [9] je následující:
ASP verze 1.0 (distribuováno s IIS 3.0) v prosinci 1996
ASP verze 2.0 (distribuováno s IIS 4.0) v září 1997
ASP verze 3.0 (distribuováno s IIS 5.0) v listopadu 2000
ASP.NET verze 1.0 (součást rozhraní .NET Framework 1.0) v lednu 2002
ASP.NET verze 1.1 (.NET Framework 1.1) v dubnu 2003
ASP.NET verze 2.0 (.NET Framework 2.0) v listopadu 2005
ASP.NET verze 3.5 (.NET Framework 3.5) v prosinci 2007
ASP.NET verze 4 (.NET Framework 4.0) v dubnu 2010
1.1 Základní principy ASP.NET 1.1.1 Architektura .NET Frameworku ASP.NET je součástí rozhraní .NET Framework. Jedná se o prostředí potřebné pro běh a vývoj .NET aplikací. Nabízí jak spouštěcí rozhraní, pomocí něhož lze vyvíjené
aplikace
spouštět
a
testovat,
tak
i
velké
množství
potřebných
programátorských knihoven. Umožňuje tak programátorům vyvíjet .NET aplikace v jakémkoliv
programovacím
jazyce,
jenž
podporuje
základní
součást .NET
Frameworku zvanou CLR.[2] Komponenta .NET Framework zajišťuje pro vývojáře automatické provádění následujících nezbytných procesů na základě [2] a [19]:
Správa paměti, vytváření a rušení objektů pomocí Garbage Collection
Spouštění a zastavování vláken kódu, podpora Multithreadingu
Zabezpečení kódu a kontrola oprávnění k prováděným operacím
Rozšiřitelnost metadat
Linkování potřebných knihoven a komponent do paměti apod. 10
O všechny tyto operace se stará právě CLR - viz obrázek celé architektury .NET Frameworku:
Obrázek 1.1: Architektura .NET Framework [2] Architektura rozhraní .NET Frameworku se skládá z několika softwarových vrstev, a na základě [2] a [19], uvádím stručnou charakteristiku každé z nich:
Operační systém – standardně pouze Windows OS
Common Language Runtime (CLR) – běhové prostředí .NET Frameworku, jehož role je ekvivalentní k roli JVM na vývojové platformě Java. Jeho základní funkce uvádím výše a podrobně jsou popsány v [2].
Base Class Library (BCL) – knihovna, která obsahuje nejčastěji používané pomocné funkce pro práci se soubory, třídění, diagnostiku, síťovou komunikaci apod.
ADO.NET (ActiveX Data Object for .NET) – knihovna zpřístupňující práci s externím daty s možností jejich prezentace ve formátu XML.
ASP.NET Web Forms and Web Services – knihovna pro vývoj uživatelského rozhraní webových aplikací a služeb. Tuto součást používám v praktické části práce při vývoji ukázkové webové aplikace.
Windows Forms – knihovna pro vývoj uživatelského rozhraní desktopových aplikací, např. pro Windows.
Common Language Specification (CLS) – je specifikace definující sadu základních vlastností. Tyto vlastnosti musí mít programovací jazyky používané pro vývoj .NET aplikací. 11
V nejvyšší
vrstvě
architektury .NET
Framework
se
nachází
sada
nejpoužívanějších jazyků pro vývoj .NET aplikací. Vyvinula je sama firma Microsoft speciálně pro platformu .NET a všechny patří mezi jazyky s plnou podporou OOP. Výrazně zefektivňují vývoj aplikací a umožňují jejich snadnější rozšiřitelnost o nové moduly. Podrobněji je charakterizuji v následující kapitole.[2] Poslední součástí schématu, nikoliv ovšem .NET Frameworku, je vývojové prostředí Visual Studio .NET, také od firmy Microsoft. Prostředí dokáže operovat se všemi vrstvami .NET Frameworku a pro profesionály představuje nejkomplexnější vývojový nástroj na zmiňované platformě.[19]
1.1.2 Kompilace .NET aplikací Kompilace zdrojového kódu aplikací spouštěných na platformě .NET je prováděna dvěma různými způsoby [2]:
Aplikace vytvořené na platformě.NET kompiluje a spouští přímo CLR, jedná se o tzv. řízený kód.
Aplikace vytvořené na jiné platformě, nebo ty, u nichž je použití řízeného kódu explicitně zakázáno, se kompilují do tzv. neřízeného kódu.
Do druhé varianty spadají např. všechny aplikace napsané v jazyce C++, jelikož ten patří mezi jazyky s absolutní volností a jeho kompilátor neumí vygenerovat řízený kód. U jazyků, jejichž kompilátor dovede vygenerovat řízený kód, se program přeloží do kódu jazyka CIL – Common Intermediate Language (dříve označovaného jako MSIL – Microsoft Intermediate Language). Jedná se o univerzální jazyk podobný Assembleru (strojový programovací jazyk), jehož smyslem je zjednodušit přenášení existujícího kódu .NET aplikací mezi různými platformami. CIL je však mnohem vyspělejší, jelikož dokáže pracovat s objekty, metodami a jinými datovými strukturami používanými v jazyce, ze kterého se program překládá. Nevýhoda CIL spočívá v neexistenci procesoru schopného přímo vykonávat jeho kód. Kód v jazyce CIL se tudíž pomocí JIT kompilátoru přeloží do tzv. nativního (strojového) kódu platformy, na níž se aplikace spouští. Popsaný princip kompilace platí obecně pro všechny .NET aplikace (tedy i desktopové). Pro ASP.NET webové aplikace platí, že jejich kód se nikdy neinterpretuje, je tedy plně kompilovaný. Při kompilaci se vytvoří jeden či několik souborů typu .dll nebo .exe, jež se označují jako tzv. assembly (jednotka používaná pro libovolně velkou
12
zkompilovanou část kódu .NET aplikace). Podrobně jsou assembly soubory popsány v [2]. Kód webové stránky stačí jen umístit na webový server do virtuálního adresáře, zkompiluje se automaticky při prvním přístupu klienta a stránka se uloží do vyrovnávací paměti jeho webového prohlížeče. Kdykoliv se kód stránky změní, je při dalším přístupu klienta ke stránce rekompilován.
Obrázek 1.2: Kompilace a spouštění .NET aplikací [2] Jednotlivé webové stránky aplikace v ASP.NET se tedy kompilují znovu pouze tehdy, když dojde k aktualizaci jejich zdrojového kódu, což podstatně zvyšuje rychlost běhu aplikace, resp. načítání stránek.
1.2 Používané programovací jazyky Jak zmiňuji v předchozí kapitole, .NET Framework resp. ASP.NET podporuje pro vývoj svých aplikací použití libovolného jazyka kompatibilního s CLR. Mezi ně patří např. VB .NET, C#, J# , JScript, Managed C++ a jiné. Prvním dvěma jmenovaným se věnuji v této kapitole, jelikož jsou to dva nejužívanější jazyky pro psaní webových aplikací v ASP.NET.
1.2.1 Charakteristika VB .NET VB.NET je objektově orientovaný jazyk, vyvinul se z jazyka Visual Basic. Visual Basic byl prvním jazykem, jenž umožňoval díky svému vývojovému prostředí jednoduše vytvářet okenní aplikace s pokročilým uživatelským rozhraním za pomocí techniky drag and drop a následným dopsáním obslužného kódu. Již ve své době však 13
zaostával za konkurencí, a to především kvůli pomalému běhu jeho aplikací a omezeným možnostem vývoje. Jeho poslední klasická verze je Visual Basic 6 z roku 1998. Tato verze již sice částečně podporovala OOP, ale zaměřovala se především na databázové aplikace. Se zveřejněním první verze platformy .NET uvolnila firma Microsoft vlastní verzi jazyka pod názvem Visual Basic 7, který se označuje jako oficiálně první verze VB.NET. V současnosti je jeho nejnovější verze Visual Basic 10 (označovaná také jako Visual Basic 2010). VB.NET sebou přinesl celou řadu novinek. K jeho základním charakteristikám [6] patří:
nezávislost na cílové platformě,
kompletní podpora OOP včetně rozhraní, dědičnosti a generických datových typů,
rozsáhlé množství knihovních funkcí,
pokročilá práce s databázemi, podpora technologie LINQ,
zpětná kompatibilita s rozhraními COM a WinAPI,
povinná deklarace proměnných (od verze 7),
názvy všech slov kódu jsou case insensitive (nezávislé na velikosti písmen),
automatická detekce konce řádků kódu (od verze 10).
Kompletní specifikace jazyka VB .NET je samozřejmě mnohem širší a popisuje ji dokumentace jazyka [17]. Závěrem k VB.NET dodávám, že je vhodnou variantou pro vývojáře, co začínají s vývojem na platformě .NET bez jakýchkoliv zkušeností s programováním. Díky originální syntaxi patří k těm snadno srozumitelným a definuje velké množství klíčových slov, jež jsou pro začátečníky lehce zapamatovatelné. Partial Class Default4 Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Visible = False End Sub End Class
Tabulka 1.1: Ukázka kódu jazyka VB .NET [9]
1.2.2 Charakteristika C# Na rozdíl od VB .NET patří C# mezi nové jazyky. Vyvinula ho firma Microsoft a vznikal paralelně s první verzí platformy .NET, pro kterou je určen. C# přímo vychází z jazyků C/C++ a Java, s nimiž ho spojuje velmi podobná syntaxe. Je tak primárně určen pro vývojáře na těchto platformách, protože je nenutí učit se syntaxi zcela novou. 14
Mezi jeho základní charakteristiky patří následující výčet vlastností podle [2] a [6]. A jak zmiňuje ([2], str. 6): „Většina uvedených vlastností vychází přímo z funkcionality vývojového rámce .NET.“:
Podpora pouze jednoduché dědičnosti a násobné implementace rozhraní
Vedle členských dat přidává objektům vlastnosti a události
Podpora atributového programování
Zpětná kompatibilita se stávajícím kódem na binární i strojové úrovni
Názvy všech slov kódu jsou case sensitive (rozlišují se velká a malá písmena)
Konec řádku kódu musí být označen středníkem (je nesignifikantní)
Implementace jazyka C# s názvem Visual C# je rovněž součást vývojového prostředí Visual Studio .NET. Pro kompletní specifikaci odkazuji i zde na dokumentaci jazyka [4]. Na závěr opět uvádím ukázku kódu, tentokrát pro C#: public partial class Default5 : System.Web.UI.Page { protected void Button1_Click(object sender, EventArgs e) { Button1.Visible = false; } }
Tabulka 1.2: Ukázka kódu jazyka C# [9]
1.3 Komunikace klienta a serveru Tuto kapitolu věnuji konkrétním specifikům ASP.NET, komunikace klienta a serveru, na němž ASP.NET aplikace běží. Čerpám v ní ze zdrojů [19], [1].
1.3.1 Objektový model ASP.NET stránek S příchodem ASP.NET se vývoj webových aplikací a služeb zásadně změnil. Do té doby existoval zásadní rozdíl mezi principem vytváření klasických desktopových a webových aplikací. Tvorba desktopových aplikací se stala postupně pro vývojáře všeobecně snadnou činností. Aplikace se skládá z jednotlivých navzájem propojených formulářů (Forms). Každý formulář obsahuje jeden nebo více ovládacích prvků (Controls) – jako jsou tlačítka (Button), rozbalovací seznamy (DropDownList), kalendáře (Calendar) apod. Při vytváření formuláře se jednotlivé prvky jednoduše přetahují z palety prvků. Každý vývojový nástroj má samozřejmě omezený počet těchto prvků. V případě, že nestačí, existují v zásadě dvě možnosti. Buď prvky dokoupit, nebo použít volně dostupné prvky vytvořené jinými vývojáři, nebo si naprogramovat své vlastní. [19] 15
Podstatou ovládacích prvků v ASP.NET je, že všechny fungují na principu OOP. Každý prvek se chová jako objekt, má definované určité vlastnosti (výška, šířka, barva apod.). Prvky také na základě interakce s uživatelem vyvolávají událost (např. kliknutím myši na tlačítko). Samotný vývoj aplikace spočívá hlavně v programování obslužného kódu těchto událostí, tzv. kódu na pozadí (Code Behind), který je umístěn v samostatném souboru navázaném na soubor s webovou stránkou. ASP.NET využívá pro tvorbu webových aplikací osvědčené principy vývoje desktopových aplikací a zároveň poskytuje koncovým uživatelům komfortní a efektivní uživatelské rozhraní. Každá ASP.NET stránka je uložena v souboru s příponou .aspx. Obsahuje stejně jako formulář desktopové aplikace ovládací prvky, což jsou v tomto případě objekty umístěné na serveru. Stejně tak i tyto objekty mají definované vlastnosti a události, které na nich mohou vyvolávat uživatelé.[19]
Obrázek 1.3: Princip komunikace klientský prohlížeč-ASP.NET server [19] Na straně klienta se při nahrání stránky zobrazuje pouze její čistý HTML popřípadě XHTML obraz. Klient, resp. jeho webový prohlížeč není zatěžován nutností dodatečné instalace různých appletů (doplňkových programů) jako je ActiveX apod. Jediná interaktivita klientského prohlížeče a serveru probíhá pomocí Javascriptů, jejichž podpora v prohlížeči je společně s podporou HMTL, resp. XHTML jedinou podmínkou pro zobrazení stránky. Všechny ovládací prvky stránek se umísťují na server a zde se také spravují. ASP.NET aplikace tak kladou na stranu klienta minimální požadavky.
16
1.3.2 Postback a ViewState Všechny objekty (ovládací prvky) použité v ASP.NET stránce existují na serveru pouze po dobu vykonávání klientských požadavků, poté se do klientského prohlížeče pošle stránka s aktualizovanými HTML obrazy všech ovládacích prvků.[19] Princip pouze dočasného uložení ovládacích prvků stránky v paměti serveru nutně vede k otázce, jak tyto prvky opětovně reagují na události vyvolané klientem. To zajišťuje ASP.NET funkce nazývaná Postback. V případě, že klient provede akci na některém ovládacím prvku (stisknutí tlačítka, výběr položky v rozbalovacím seznamu apod.), pošlou se z jeho prohlížeče pomocí Javaskriptu informace o vyvolané události. Na základě nich se na serveru obnoví celý objektový model stránky se všemi prvky. Pokud je k prvku přiřazen obslužný kód události, tak se provede. Následně je celá aktualizovaná stránka odeslána zpět na klienta.[19] Využití funkce Postback se u jednotlivých ovládacích prvků liší. Typickým příkladem prvku, který by bez této funkce postrádal význam, je tlačítko. Naopak např. u prvku rozbalovací seznam závisí použití funkce na aktuálních potřebách vývojáře. Zapnutí nebo vypnutí funkce Postback se pak určuje pomocí jeho vlastnosti AutoPostBack. Funkce Postback má však nevýhodu ve velkém zatěžování serveru. Proto její nadměrné používání může způsobit zpomalení ASP.NET aplikace, jež se projeví značně dlouhým „problikáváním“ prohlížeče při aktualizaci stránek. Při vývoji aplikace je tedy vhodné zvažovat, zda u jednotlivých prvků funkci použít či nikoliv.[19] Funkce Postback tedy zajišťuje komplexní aktualizaci ASP.NET stránky. To však pro její správné zobrazení nestačí. Proto, aby se mohl na serveru obnovit celý objektový model stránky, musí server obdržet informace o aktuálním stavu jednotlivých ovládacích prvků stránky zobrazených na klientovi. Uchování těchto stavů umožňuje funkce zvaná ViewState. Výsledek její činnosti se ve zdrojovém kódu stránky zobrazené v klientském prohlížeči projeví následovně:[19] Tabulka 1.3: Výsledek funkce ViewState v kódu ASP.NET stránky [19] Při každé
rekonstrukci
objektového
modelu
stránky
získává
server
od jednotlivých prvků jejich stav a ten pak po dokončení rekonstrukce posílá ve zdrojovém kódu stránky zpět do prohlížeče v zakódovaném a digitálně podepsaném skrytém vstupním poli. Při následném klientském požadavku se pomocí funkce 17
Postback odešle obsah pole zpět na server, kde se podle něj aktualizuje stav ovládacích prvků. Používání funkce ViewState u prvků se řídí nastavením hodnoty jejich vlastnosti EnableViewState. Podrobně práci s funkcemi Postback a ViewState popisuji v praktické části práce.[19]
1.4 Komponenty ASP.NET Web Controls Před vznikem ASP, resp. ASP.NET se ve webových stránkách používaly klasické HMTL ovládací prvky (HTML Controls). ASP.NET poskytuje vývojářům svou vlastní sadu webových ovládací prvků (Web Server Controls), jejichž funkcionalita zahrnuje veškeré možnosti HTML Controls, ovšem ASP.NET je výrazně rozšiřuje a přidává řadu nových. Podle aktuální verze ASP.NET 4 je lze rozdělit podle jejich funkcionality do následujících kategorií [1]:
Standard Controls – je skupina nejčastěji používaných prvků. Patří sem prvky, které jsou odvozené od prvků ze standardních webových formulářů, a také řada komplexnějších prvků – tyto umožňují pokročilou manipulaci se statickými i dynamickými daty. Nejsou vázány na žádné HTML elementy a umožňují naprogramovat pokročilou funkcionalitu pomocí obslužného kódu událostí, které zachytávají.
Data Controls – je skupina prvků, které slouží pro práci s externími daty, typicky s těmi umístěnými v relační databázi.
Validation Controls – zahrnuje všechny standardní validační prvky. Ty například umožňují kontrolovat vyplnění povinných polí formuláře, správně zadané uživatelské jméno a heslo při přihlášení uživatele apod.
Navigation Controls – poskytuje prvky ke znázornění navigace v ASP.NET webu, tj. zobrazení kompletní mapy webu pomocí stromové struktury nebo např. nastavení jejího XML datového zdroje.
Login Controls – tyto prvky obsahují veškeré funkce potřebné k autentizaci uživatele při vstupu do ASP.NET webové aplikace. Patří sem např. prvky zobrazující přihlašovací uživatelské rozhraní nebo umožňující uchování přihlašovacích údajů uživatele v paměti webového prohlížeče.
HTML Server Controls – je sada prvků vytvořená konverzí ze standardních HTML elementů. Umožňuje jejich použití v ASP.NET stránce. Tyto prvky totiž dokáže ASP.NET server zpracovat, ale standardní HTML elementy považuje za nesrozumitelný text. Musí být navíc vždy součástí HTML elementu