ASP.NET
ASP.NET (ang. Active Server Pages Network Enabled Technologies) to zestaw technologii opartych na frameworku stworzonym przez firmę Microsoft. Jego głównym celem jest umożliwienie tworzenia różnorodnych aplikacji internetowych oraz aplikacji typu XML Web Services. ASP.NET wzbogaca platformę deweloperską .NET o dedykowane narzędzia i biblioteki do tworzenia aplikacji webowych.
Strony ASP.NET są generowane przez serwer, który potrafi wytwarzać treści w formacie HTML (razem z CSS), WML lub XML, które są następnie interpretowane przez przeglądarki internetowe. ASP.NET wspiera model programowania oparty na wątkach, który oddziela warstwę logiki od warstwy prezentacji, co przyczynia się do lepszej wydajności aplikacji. Logika stron ASP.NET oraz XML Web Services może być tworzona w językach takich jak Visual Basic .NET, C# czy jakimkolwiek innym języku, który wspiera technologię Microsoft .NET Framework lub .NET Core.
Historia
Po wprowadzeniu Internet Information Services (IIS) 4.0 w 1997 roku, Microsoft rozpoczął poszukiwania nowych metod na efektywne tworzenie stron internetowych przy użyciu przejrzystego kodu, który oddzielałby logikę od prezentacji. Mark Anders (menadżer zespołu IIS) oraz Scott Guthrie (absolwent Uniwersytetu Duke’a) postanowili zbadać, jak taki model programowania mógłby wyglądać w praktyce. W ciągu dwóch miesięcy – podczas Świąt Bożego Narodzenia 1997 roku – powstała prototypowa wersja, początkowo nazywana XSL.
Pierwsza wersja była stworzona w Javie, jednak wkrótce postanowiono opracować nową platformę korzystając z Common Language Runtime (CLR), oferującego obiektowo-zorientowane środowisko programistyczne z dodatkowymi narzędziami, jak garbage collector. Reimplementacja miała miejsce w języku C#. Początkowe nazewnictwo „Project Cool” szybko zostało zmienione na ASP+, co miało nawiązywać do łatwego przejścia dla deweloperów ASP.
Pierwsza prezentacja ASP+ miała miejsce w maju 2000 roku na konferencji ASP Connections w Phoenix, a wersja beta została zaprezentowana podczas Professional Developers Conference 11 lipca 2000 roku w Orlando.
W drugiej połowie 2000 roku, nazwa ASP+ została zmieniona na ASP.NET. W ciągu następnych kilkunastu miesięcy opublikowano kilka wersji beta, a 5 września 2002 roku zadebiutowała wersja ASP.NET 1.0 jako część .NET Framework 1.0. Zaledwie rok później, 2 kwietnia 2003 roku, wydano ASP.NET 1.1, która była częścią Windows Server 2003 i wprowadzała wsparcie dla urządzeń mobilnych.
Charakterystyka
Pliki
Pliki zawierające zawartość stron internetowych ASP.NET mają rozszerzenie .aspx. Dokumenty te składają się z statycznej treści (X)HTML, a także umożliwiają dodawanie fragmentów dynamicznych, np. <% -- dynamic code -- %>, podobnie jak w przypadku technologii PHP czy JSP. Wraz z pojawieniem się ASP.NET Framework 2.0, Microsoft wprowadził rozdzielenie warstwy prezentacji od logiki, umieszczając obie części w osobnych plikach. To udogodnienie nazwano „Code-Behind”, co oznacza, że plik ze statyczną treścią może mieć nazwę MyPage.aspx, a dokument z logiką (w Microsoft Visual Studio będący podwęzłem pliku .aspx) to MyPage.aspx.cs lub MyPage.aspx.vb (w zależności od używanego języka, np. C# lub Visual Basic). Takie rozdzielenie warstw prowadzi do większej przejrzystości kodu oraz możliwości wielokrotnego wykorzystania implementowanych klas i ich zawartości.
Dyrektywy
Dyrektywy w ASP.NET informują system, jak przetwarzać daną stronę internetową. Przykładową dyrektywą może być <%@ Page Language="C#" %>, która określa język programowania użyty na stronie oraz sposób interpretacji kodu.
Inline-code vs. Behind-code
Inline-coding to technika, w której statyczny kod zawiera dynamiczny skrypt. Przykład można zobaczyć poniżej.
W przykładzie mamy kontrolkę Label, która jest implementowana w treści statycznej, natomiast logika przypisująca kontrolce Label aktualny czas odbywa się dynamicznie za pomocą funkcji Page_Load umieszczonej pomiędzy znacznikami <script>.
W przypadku korzystania z code-behind treść statyczna i dynamiczna są rozdzielane między różne pliki. Na początku pliku ze statyczną treścią (.aspx) umieszczamy znacznik <%@ Page %>, przykładowo:
Dyrektywa @Page wskazuje, że istnieje dodatkowy plik (code-behind), który zawiera logikę programu.
Obydwa pliki, analogicznie do wcześniejszego przykładu, mogą wyglądać tak:
MyPage.aspx
oraz MyPage.aspx.cs, będący naszym code-behind:
Jak widać, drugie rozwiązanie jest znacznie bardziej przejrzyste.
Zarządzanie stanem
Aplikacje ASP.NET są hostowane przez serwer webowy i działają w bezstanowym protokole HTTP, co oznacza, że każde nowe żądanie nie jest powiązane z poprzednim. Zarządzanie stanem sesji musi być zatem realizowane przez aplikację. ASP.NET oferuje różne metody zarządzania stanem, które można klasyfikować według zasięgu, czasu życia oraz rozmiaru przechowywanych danych i miejsca ich przechowywania.
Stan aplikacji
Utrzymywanie stanu aplikacji jest możliwe dzięki klasie HttpApplicationState, która zawiera mechanizm kolekcji par klucz-wartość. Te zmienne są dostępne przez cały czas działania aplikacji ASP.NET.
Tworzenie zmiennych stanu aplikacji można zrealizować dzięki obiektowi Application. Przykład:
tworzy klucz „Rower” i przypisuje mu wartość „Pojazd dwukołowy”.
Pobieranie tak utworzonej zmiennej może wyglądać w ten sposób:
Stan sesji
W przypadku przechowywania zmiennych, które mają działać jako koszyk w sklepie internetowym, potrzebne będą zmienne stanu sesji, za które odpowiedzialny jest obiekt Session. Przykładowe wykorzystanie:
Oprócz typów prostych, można również przechowywać obiekty złożone, takie jak wspomniana wcześniej instancja klasy Koszyk.
Stan widoku
Stan widoku (View state) odnosi się do przechowywania informacji w ramach pojedynczego formularza, z dodatkowym wymogiem, aby formularz miał atrybut runat=”server”. Jeśli strona zostanie przeładowana, dane z poprzedniej sesji zostaną utracone. W takiej sytuacji należy skorzystać z innego mechanizmu, jak obiekt Session. W przypadku stanu widoku, przechowywanie zmiennych odbywa się podobnie jak w poprzednich przypadkach. Używanym obiektem jest ViewState, a jego zastosowanie może wyglądać tak:
Możliwe jest również przechowywanie obiektów złożonych, np:
Jednak konieczne jest umieszczenie atrybutu [Serializable] przed nazwą klasy Rower, której instancja będzie wykorzystywana jako wartość pary klucz-wartość.
Bibliografia
Randy Connolly, ASP.NET 2.0. Projektowanie aplikacji internetowych, marzec 2008, Helion, ISBN 978-83-246-1128-7.