Systemy i Narzędzia Baz Danych z Dostępem Przez Internet ASP.NET cz.1 Witam państwa serdecznie. Moje nazwisko Piotr Kuźniacki, jestem z Zakładu Teorii Informatyki, Instytutu Informatyki, Politechniki Śląskiej . Będę miał przyjemność zaprezentować państwu artykuł związany z Gliwice 2004
Agenda 1. Wprowadzenie 2. Przegląd ASP.NET 3. Architektura ASP.NET 3.1 ASP a ASP.NET 3.2 VBScript a VB.NET 4. Biblioteki klas bazowych .NET 5. Składnia strony 6. Obiekty ASP.NET 7. Konfiguracja 7.1 Global.asax 7.2 Web.config
Agenda 8. Wprowadzenie do Web Forms 9. Zarządzanie stanem 8.1 Prosty formularz w ASP i Web Forms 8.2 Klasa Page 8.3 Oddzielenie kodu od interefejsu 9. Zarządzanie stanem
1 Wprowadzenie ASP.NET następcą ASP platforma do budowy aplikacji WWW rozbudowana o szereg funkcji i narzędzi ułatwiających pracę programisty pełna integracja ze środowiskiem .NET składnia zgodna z ASP, jednak wzbogacona o nowe możliwości opracowany z myślą o poprawieniu skalowalności i niezawodności
2 Przegląd ASP.NET Przegląd nowych technologii ASP.NET wsparcie wielu języków programowania – m.in. C#, C++, Visual Basic.NET, JSCRIPT.NET korzystanie ze wspólnego środowiska CLR (Common Language Runtime) – zarządzane środowisko wykonania, bezpieczeństwo typów, wspólne typy, dziedziczenie, dynamiczna kompilacja biblioteki klas bazowych .NET BCL (Base Class Libraries) – dostęp do bibliotek .NET udostępniających wiele funkcji zaawansowana konfiguracja – plik konfiguracyjny w formacie XML zawierający ustawienia zarządzające środowiskiem Web Forms – nowe podejście w tworzeniu stron internetowych, zarządzanie i przechwytywanie zdarzeń,kontrolki serwera i użytkownika potrafiące dostosować generowany kod HTML do możliwości klienta ADO.NET – następna generacja ADO, duże wsparcie i wykorzystanie w strukturach wewnętrznych języka XML
2 Przegląd ASP.NET XML – promowanie rozwiązań opartych na XML, główny format transportowy wielu usług Usługi sieciowe XML (XML Web Services) – model obiektów rozproszonych zastępujący DCOM (Distributed Component Object Model), opiera się na standardach HTTP oraz XML. Zarządzanie stanem – poprawione zarządzanie stanem, możliwość pracy bez udziału cookie, wydzielenie zewnętrznego magazynu stanu dla zapewnienia współdzielenia stanu w farmach sieci WWW Buforowanie – poprawione buforowanie, buforowanie żądań dla zwiększenia efektywności i współdzielenia danych na różnych stronach, buforowanie stron, bądź jej fragmentów na podstawie różnych kryteriów Bezpieczeństwo – duże wsparcie i ułatwienie uwierzytelniania oraz autoryzacji za pomocą różnych technik Projektowanie urządzeń przenośnych – pakiet do projektowania dla urządzeń przenośnych działających w środowisku WAP i WML
Interfejs użytkownika 3 Architektura ASP.NET Architektura trójwarstwowa (n–warstwowa) warstwa interfejsu użytkownika – przeglądarka internetowa warstwa logiki aplikacji – Web Forms, XML Web Services, Usługi składników warstwa dostępu do danych – ADO.NET, RDBMS Interfejs użytkownika Logika aplikacji Dane Web Forms ADO.NET SOAP XML Web Services XML Przeglądarka użytkownika HTTP XML RDBMS binar Usługi składników XML
3.1 ASP a ASP.NET ASP.NET to coś więcej niż kolejna wersja ASP, całkowicie różne jeśli chodzi o platformę i implementację ASP ASP.NET stan aplikacji ograniczona skalowalność wiele opcji skalowalności typy danych późne wiązanie, problemy z konwersją typów silne typowanie, wspólne typy danych wykonywanie skrypty interpretowane kod kompilowany rozszerzenia rozszerzenie plików .asp rozszerzenie plików .aspx struktura plików prezentacja i logika w jednym skrypcie prezentacja oddzielona od logiki, w oddzielnych plikach obsługa języków języki skryptowe JavaScript, VBScript brak obsługi języków skryptowych, obsługa języków .NET bezpieczeństwo ograniczone wsparcie mechanizmy poprawiające bezpieczeństwo
3.1 ASP a ASP.NET Kod HTML wewnątrz ciała funkcji w klasycznym ASP <% Function mojaFunkcja() %> <table><tr><td> <% Response.Write Now() %> </td></tr></table> End Function Analogiczny skrypt w ASP.NET Response.Write (”<table><tr><td>”) Response.Write (Now()) Response.Write (”</td></tr></table>”)
3.2 VBScript a VB.NET VBScript nie jest już obsługiwany, ale składnia VB.NET jest praktycznie identyczna z drobnymi różnicami VBScript VB.NET typy danych typ Variant, Integer 16 bitów, rzutowanie niejawne typ object, Integer 32bitów, rzutowanie jawne wywołania funkcji brak nawiasów otaczających parametry lista parametrów musi być ujęta w nawiasy przekazywanie parametrów domyślnie przez referencje domyślnie przez wartość właściwości obiektów domyśle właściwości obiektów brak domyślnych właściwości obiektów obsługa obiektów przypisywanie obiektów poprzez Set myOb1=myOb2 proste przypisywanie obiektów myOb1=myOb2 składnia klas Property Let, Property Get Inny zapis Let,Get w postaci jednej właściwości instrukcje If if może być w 1 wierszu musi składać się z wielu wierszy
3.2 VBScript a VB.NET Składnia właściwości klas w klasycznym ASP Public Property Get mojaWlasciwosc() mojaWlasciwosc=mWartosc End Property Public Property Let mojaWlasciwosc(nowaWartosc) mWartosc=nowaWartosc Składnia właściwości klas w klasycznym ASP.NET Public Property mojaWlasciwosc as String Get End Get Set mWartosc=mojaWlasciwosc End Set
4. Biblioteki klas bazowych .NET Biblioteka klas bazowych BCL (Base Class Library) platformy .NET zawiera klasy, interfejsy i typy danych optymalizujący proces projektowania pozwala na dostęp do wielu funkcji i usług systemu może być wykorzystywana w dowolnym języku, który jest zgodny z CLS (Common Language Specification)
4. Biblioteki klas bazowych .NET Wybrane funkcje dostępne w ramach biblioteki Dane System.Date - zawiera klasy określające strukturę ADO.NET System.XML - zawiera klasy służące do przetwarzania dokumentów XML System.XML.Serialization - zawiera klasy służące do serializacji obiektów do XML i odwrotnie Usługi platformy System.DirectoryServices - dostęp do Active Directory System.Messaging - dostęp i zarządzanie MSMQ oraz wysyłanie i odbieranie wiadomości System.Timers - zgłaszanie wyjątków co pewien czas Sieć System.Net - zawiera proste interfejsy popularnych protokołów Bezpieczeństwo platformy .NET System.Security - dostęp do podstawowych systemów bezpieczeństwa .NET System.Security.Cryptography - usługi kryptograficzne, kodowanie, dekodowanie, tworzenie skrótów, generowanie liczb losowych, podpis cyfrowy
5. Składnia strony Składnia strony blok odrysowania – kod wykonywany w momencie odrysowywania strony <% kod lub wyrażenie wstawiane %> blok deklaracji – definiuje zmienne i metody <script runat=”server” language=”kodjezyka” src=”sciezka”> kod... </script> runat=”server” – informuję, że blok ma zostać przetworzony na serwerze przed przesłaniem strony do przeglądarki language=”kodjezyka” – dowolny język kompatybilny z .NET, wartość domyślna jest w dyrektywie @page, jeśli i tam nie podano to VB.NET, cała strona musi być napisana w jednym języku src=”sciezka” – podaje ścieżkę dostępu i nazwę pliku zawierającego kod do wczytania, gdy podana kod między znacznikami jest ignorowany blok komentarza – pozwalają na umieszczenie komentarza <%– anulowany kod lub komentarz –%>
5. Składnia strony Przykład Składnia deklaracji kontrolek Web Forms <tagprefix:tagname id=”OpctionalID” attributename=”value” attributename-propertyname=”value” eventname="eventhandlermethod runat=”server” /> tagprefix - alias pełnej nazwy przestrzeni nazw kontrolki tagname - nazwa klasy zawierająca kontrolkę id - unikalny identyfikator umożliwiający odwoływanie się do kontrolki attributename - nazwa atrybutu propertyname - nazwa właściwości value - wartość przypisana eventname - nazwa zdarzenia kontrolki runat=”server” – informuję, że kontrolka ma zostać przetworzony na serwerze przed przesłaniem strony do przeglądarki eventhandlermethod - nazwa metody obsługi zdarzenia Przykład <asp:TextBox id=”MyTextBox” runat=”server”/>
5. Składnia strony Składnia deklaracji obiektów serwera Przykład <object id=”ID” runat=”server” class=”.NET Framework Class Name” /> <object id=”ID” runat=”server” class=”COM ProgID” /> <object id=”ID” runat=”server” class=”COM ClassID” /> id - unikalny identyfikator umożliwiający odwoływanie się do obiektu .NET Framework Class Name - identyfikuje nazwę klasy .NET COM ProgID - identyfikuje komponent COM COM ClassID - identyfikuje komponent COM Przykład <object id=”MyDataBase” class=”Microsoft.OleDBAdaptor” runat=”server”/> Składnia dyrektywy dołączania po stronie serwera <!-- #include pathtype=filename --> pathtype - virtual bądź filename filename - pełna wirtualna ścieżka bądź plik w bieżącym katalogu
5. Składnia strony Dyrektywy @page - <%@Page attribute=value [attribute=value]...%> definiuje atrybuty stosowane przez parser i kompilator strony ASP.NET @Control - <%@Control attribute=value [attribute=value]...%> służy do definicji atrybutów nowotworzonej kontrolki użytkownika @Import - <%@Import namespace=”nazwa przestrzeni”%> jawne importowanie przestrzeni nazw, elementy strony mają dostęp do klas z tej przestrzeni @Register -<%@Register Tagprefix=”tagprefix” NameSpace=”tagname” %> lub <%@Register Tagprefix=”tagprefix” Tagname=”tagname” Src=”pathname” %> określenie aliasów dla własnych kontrolek użytkownika @Assembly -<%@Assembly Name=”name” %>lub<%@Assembly Src=”pth”%> definiuje połączenie między stroną a zbiorem skompilowanym lub przeznaczonym do skompilowania, elementy strony mają dostęp do klas i interfejsów zdefiniowanych w zbiorze. Zbiory w katalogu /bin są automatycznie łączone ze stronami aplikacji
6. Obiekty ASP.NET Podstawowe obiekty ASP.NET odpowiadają obiektom ASP Application Request Response Server Session
6.1 Obiekt Application (klasa HttpApplication) Obiekt Application zawiera wiele właściwości, które udostępniają obiekty innych klas. Właściwości Application – referencja do instancji HttpApplicationState Context – umożliwia dostęp do obiektu HttpContext Request – umożliwia dostęp do obiektu HttpRequest Response – umożliwia dostęp do obiektu HttpResponse Server – umożliwia dostęp do obiektu Server Session – umożliwia dostęp do obiektu Session Zdarzenia OnStart – zdarzenie występuje gdy aplikacja jest uruchamiana OnEnd – zdarzenie występuje podczas zamykania aplikacji Error – zdarzenie zgłaszane w momencie wystąpienia błędu BeginRequest – zgłaszane, gdy aplikacja otrzyma żądanie EndRequest – zgłaszane, gdy kończy przetwarzanie żądania AuthenticateRequest – zgłaszane, gdy aplikacja przystępuje do uwierzytelniania AuthorizeRequest – zgłaszane, gdy aplikacja przystępuje do autoryzacji
6.2 Obiekt Application (kl. HttpApplicationState) Obiekt Application może być używany jako zbiór zmiennych, obiektów i komponentów o zasięgu aplikacji. Aplikacja ASP.NET to suma wszystkich stron, plików, procedur obsługi w katalogu wirtualnym i w jego podkatalogach. Właściwości AllKeys – zwraca tekstową tablicę z wartościami kluczy przechowywanych el. StaticObjects – zawiera wszystkie obiekty dodane za pomocą tagu <OBJECT> Count – liczba elementów w zbiorze przechowywanych elementów Item – umożliwia pobranie elementu poprzez nazwę lub indeks, Application.Item(12), Application.Item(”nazwa”) Contents – umozliwoa pobranie elementów, dodane dla kompatybilności z ASP Metody GetKey – zwraca nazwę obiektu przechowywanego pod podanym indeksem Remove(nazwa|indeks) – usuwa element z kolekcji Contents RemoveAll – usuwa wszystkie elementy z kolekcji Contents Add – dodaje nowy obiekt do zbioru Lock – uniemożliwia innym klientom modyfikację właściwości obiektu Application. Unlock – umożliwia innym klientom modyfikację właściwości obiektu Application.
6.3 Obiekt Request (klasa HttpRequest) Obiekt Request pobiera wartości, które przeglądarka klienta przekazała do serwera w czasie żądania HTTP oraz pobiera inne informacje z serwera WWW. Właściwości AcceptTypes – tablica łańcuchów znaków obsługiwanych przez klienta typów MIME ApplicationPath – ścieżka do katalogu głównego wirtualnej aplikacji Browser – informacje na temat przeglądarki klienta ClientCertificate – wartości pól przechowywane w certyfikacie klienta, który jest przesyłany w żądaniu HTTP ContentType – typ zawartości MIMIE odebranego żądania FilePath – wirtualna ścieżka bieżącego żądania Files – zbiór plików przekazanych przez klienta (MIME multipart) HttpMethod – metoda transferu danych przez klienta (GET,POST) Cookies – wartości plików cookie przesłane w żądaniu HTTP Form – wartości elementów formularza w zawartości żądania HTTP IsAuthenticated – czy nastąpiło uwierzytelnienie połączenia IsSecureConnection – czy połączenie jest bezpieczne HTTPS RequestType – metoda transferu danych przez klienta (GET,POST)
6.3 Obiekt Request (klasa HttpRequest) URL – informacja o bieżącym adresie URL żądania URLReferrer – adres URL poprzedniego żądania, które doprowadziło do tego QueryString – wartości zmiennych w ciągu kwerendy HTTP ServerVariables – wartości wstępnie ustalonych zmiennych środowiska TotalBytes – całkowita liczba bajtów przesłana do serwera, tylko do odczytu UserHostAddress – zwraca adres IP klienta UserHostName – zwraca nazwę DNS klienta UserLanguages – zwraca tablicę z preferencjami językowymi klienta Metody BinaryRead – stosuje się do pobierania danych bajtowych MapPath – przekłada wirtualną ścieżkę na fizyczną ścieżkę na serwerze SaveAs – zapisuje żądanie HTTP na dysku
6.4 Obiekt Response (klasa HttpResponse) Obiekt Response może być używany do wysyłania wyników do klienta. Właściwości BufferOutput – wskazuje, czy wyniki strony są buforowane Cache – ustala informacje o buforowaniu strony Charset – dołącza nazwę zestawu znaków do nagłówka typu zawartości ContentEncoding – ustala zestaw znaków zawartości HTTP ContentType – określa typ zawartości HTTP dla odpowiedzi Cookies – zbiór cookie wysłanych z bieżącą odpowiedzią Expires – określa długość czasu przed wygaśnięciem strony buforowanej w przeglądarce IsClientConnected – wskazuje, czy klient rozłączył się z serwerem StatusCode – wartość kodu stanu zwrócona przez serwer StatusDescription – ustala komunikat stanu zwrócony przez serwer
6.4 Obiekt Response (klasa HttpResponse) Metody AppendToLog – dodaje ciąg na końcu wpisu dziennika Web dla tego żądania. BinaryWrite – zapisuje dane informacje w bieżącym wyniku HTTP bez żadnej konwersji zestawu znaków. Clear – usuwa wszelkie buforowane wyniki HTML. ClearContent – usuwa zawartość z bufora ClearHeaders – usuwa nagłówki z bufora End – zatrzymuje przetwarzanie pliku .asp i zwraca bieżący wynik. Flush – natychmiast wysyła buforowany wynik. Redirect – wysyła do przeglądarki komunikat o readresowaniu, co skłania ją do próby połączenia się z innym adresem URL. Write – zapisuje zmienną jako ciąg w bieżącym wyniku HTTP. WriteFile – zapisuje plik bezpośrednio do strumienia wyjściowego
6.5 Obiekt Server (klasa HttpServerUtillity) Obiekt Server umożliwia dostęp do użytecznych metod i właściwości na serwerze. Właściwości ScriptTimeout – limit czasu przetwarzania skryptu MachineName – nazwa serwera WWW Metody CreateObject – tworzy wystąpienie składnika serwera COM Execute – wykonuje inną stronę wstrzymując z wykonaniem bieżącą GetLastError – zwraca ostatni odnotowany błąd lub wyjątek na stronie HTMLEncode – stosuje kodowanie HTML do określonego ciągu bez znaczników HTML HTMLDecode – operacja odwrotna MapPath – mapuje określoną ścieżkę wirtualną, albo ścieżkę bezwzględną na bieżącym serwerze albo ścieżkę względną w stosunku do bieżącej strony, na ścieżkę fizyczną Transfer – zatrzymuje wykonywanie bieżącej strony i wysyła wszystkie informacje bieżącego stanu do innej strony URLEncode – stosuje do ciągu zasady kodowania URL URLDecode – operacja odwrotna
6.6 Obiekt Session (klasa HttpSessionState) Obiekt Session może być używany do przechowywania informacji potrzebnych do konkretnej sesji użytkownika. Zmienne przechowywane w obiekcie Session nie są usuwane, kiedy użytkownik przechodzi między stronami w aplikacjiWłaściwości CodePage – strona kodowa bieżącej strony LCID – identyfikator regionalny SessionID – zwraca identyfikację sesji dla tego użytkownika. TimeOut –limit czasu dla stanu sesji dla tej aplikacji, w minutach. Count – liczba elementów w zbiorze przechowywanych elementów Item – umożliwia pobranie elementu poprzez nazwę lub indeks, Session.Item(12), Session.Item(”nazwa”) Contents – umozliwoa pobranie elementów, dodane dla kompatybilności z ASP IsCookieless – informacja, czy sesja odbywa się z udziałem cookie IsNewSession – informacja, czy rozpoczyna się nowa sesja Keys – zwraca wartości kluczy przechowywanych elementów Mode – tryb zarządzania sesją, 0-off, 1-InProc, 2-StateServer, 3-SQLServer StaticObjects – zawiera wszystkie obiekty dodane za pomocą tagu <OBJECT>
6.6 Obiekt Session (klasa HttpSessionState) Metody Abandon – niszczy obiekt Session i zwalnia jego zasoby. Remove – usuwa element ze zbioru sesji RemoveAll – usuwa wszystkie elementy ze zbioru sesji Zdarzenia Session_OnEnd – zdarzenie wywoływane przy zakończeniu sesji Session_OnStart – zdarzenie wywoływane przy tworzeniu sesji
7. Konfiguracja Konfiguracja aplikacji ASP.NET odbywa się poprzez dwa mechanizmy, oparte na plikach konfiguracyjnych global.asax - plik globalnych ustawień aplikacji web.config - plik konfiguracji aplikacji w formacie XML
7.1 Konfiguracja global.asax Plik global.asax umożliwia definiowanie zmiennych i obiektów o zasięgu aplikacji i sesji umożliwia definiowanie procedur obsługi zdarzeń wywoływanych dla aplikacji i sesji plik global.asax musi znajdować się w katalogu bazowym aplikacja ASP.NET może posiadać tylko jeden plik global.asax wszelkie zmiany w pliku są wykrywane i wprowadzane przez serwer automatycznie, jednak wiąże się to z restartem aplikacji - wszystkie połączenia są zrywane bezpośrednie pobranie pliku global.asax poprzez przeglądarkę nie jest możliwe użycie dyrektyw @assembly, @import rejestrują skompilowane zbiory i importują przestrzeń nazwa dla całej aplikacji użycie <object> deklaruje obiekty o zakresie dla aplikacji lub sesji w zależności od parametru scope równym session lub application
7.1 Konfiguracja global.asax Przykładowy plik global.asax <script language=”vb” runat=”server”> Sub Application_OnStart() ‘kod wykonywany przy starcie aplikacji, np.. Application(”ZmiennaAplikacji”)=”zmienna aplikacji” Session(”ZmiennaSesji”)=”zmienna sesji” End Sub Sub Application_OnEnd() ‘kod wykonywany przy zakończeniu aplikacji Sub Session_OnStart() ‘kod wykonywany przy starcie sesji Sub Session_OnEnd() ‘kod wykonywany przy zakończeniu sesji </script>
7.2 Konfiguracja web.config Plik web.config zazwyczaj znajduje się w katalogu głównym jeśli znajduje się także w podkatalogach to ustawienia są łączone bądź nadpisywane w przypadku dublowania się to standardowy plik tekstowy w formacie XML zawiera cztery główne sekcje <configSections> - używana do definiowania procedur obsługi, które interpretują kod XML w web.config, tylko gdy jest potrzeba definiowania własnych procedur obsługi pliku konfiguracyjnego <appSetting> - stosowana do przechowywania zdefiniowanych elementów konfiguracyjnych dla aplikacji, szeroko stosowane np.. do przechowywania łańcucha połączenia z bazą danych <location> - to alternatywna metoda dla stosowania wielu plików web.config w przypadku potrzeby określenie innych ustawień dla podkatalogów, atrybut path określa podkatalog, którego dotyczą ustawienia, w tej sekcji mogą powtarzać się wszystkie sekcje pliku web.config <system.web> - główna i najważniejsza część pliku web.config, zawierająca ustawienia określające sposób pracy środowiska ASP.NET
7.2 Konfiguracja web.config Sekcja <system.web> - składa się z wielu podsekcji Ogólna konfiguracja <compilation> - definiowania języka użytego do kompilacji strony <customErrors> - włączanie i wyłączanie błędów oraz przekierowania na strony obsługi odpowiednich błędów <trace> - włączanie i wyłączanie śledzenia Konfiguracja środowiska <globalization> - określenie ustawień specyficznych dla lokalizacji i kultury, kodowanie <pages> - określenie domyślnych właściwości wszystkich stron Konfiguracja bezpieczeństwa <authentication> - określenie metody uwierzytelniania użytkowników; Windows, Forms, Passport, None <authoryzation> - definiowanie ustawień autoryzacji dla aplikacji; podskekcje allow, deny <identity> - ustawienia tożsamości aplikacji WWW przy użyciu techniki personifikacji Konfiguracja IIS <proccesModel> - ustawienia odnośnie działania IIS, timeouty, limity <sessionState> - w jaki sposób przechowywany jest stan sesji
7.2 Konfiguracja web.config Przykładowy plik web.config <configuration> <system web> <compilation defaultLanguage=”vb” debug=”true” /> <customErrors defaultRedirect=”defaultError.aspx” mode=”remoteOnly” /> <trace enabled=”false” requestLimit=”10” pageOutput=”false” traceMode=”SortByTime” localOnly=”true” /> <sessionState mode=”InProc” cookieless=”false” timeout=”30” /> </system.web> </configuration>
8. Wprowadzenie do Web Forms nowy model programistyczny ASP.NET, za pomocą którego tworzymy programowalne strony internetowe pozwalają na implementację logiki aplikacji i wysyłanie na wyjściu znaczników HTML oparte na CLR, możliwość korzystania z wszystkich zalet tej technologii można tworzyć za pomocą zwykłego edytora tekstowego
8.1 Prosty formularz w ASP i Web Forms Obsługa prostego formularza logowania w klasycznym ASP, plik z formularzem – login.htm <html><body> <form action=checklogin.asp method=post> <table> <tr> <td>użytkownik:</td> <td><input type=text name=User></td> </tr> <td>hasło:</td> <td><input=password name=Pass</td> <td colspan=2><input type=submit value=”Wyślij”></td> </table> </body></html>
8.1 Prosty formularz w ASP i Web Forms Obsługa prostego formularza logowania w klasycznym ASP, skrypt weryfikujący nadesłane dane – checklogin.asp <%Option Explicit%> <html> <body> <% if Request.Form(”User”)=”kowalski” and Request.Form(”Pass”)=”hasło” then Response.Write ”Poprawne logowanie” else Response.Write ”Logowanie nieudane” end if %> </body> </html>
8.1 Prosty formularz w ASP i Web Forms Obsługa prostego formularza logowania w Web Forms ASP.NET jeden skrypt – login.aspx <html> <head> <script language="vb" runat="Server"> Sub Button1_Click(source as Object, e As EventArgs) If User.Value.Equals("kowalski") And Pass.Value.Equals("haslo") Then tekst.InnerHtml="Poprawne logowanie" Else tekst.InnerHtml=" Logowanie nieudane" End If End Sub </script> </head> <body>
8.1 Prosty formularz w ASP i Web Forms <form runat=server> <table> <tr> <td>użytkownik:</td> <td><input id=User runat=server></td> </tr> <td>hasło:</td> <td><input id=Pass type=password runat=server></td> <td colspan=2><input type=submit OnServerClick="Button1_Click" value="Wyślij" runat=server></td> </table> </form> <p><span id="tekst" runat=server /> </body></html>
8.1 Prosty formularz w ASP i Web Forms Porównanie obu rozwiązań w Web Forms realizowane jest rozwiązanie za pomocą jednej strony, nie jak w ASP gdzie zazwyczaj są oddzielne skrypty, po których się nawiguje nie ma określonego atrybutu action, dane po zatwierdzeniu formularza są kierowane na tę samą stronę zamiast atrybutu name każdy element ma id para atrybut–wartość runat=server oznacza, że element będzie przetwarzany przed wysłaniem do przeglądarki uzupełniane są atrybuty action, method oraz elementy otrzymują także name po przesłaniu danych wywoływana jest procedura Button1_Click w zawiązku z atrybutem OnServerClick w kodzie
8.2 Klasa Page Każda strona domyślnie dziedziczy po klasie Page z przestrzeni nazw System.Web.UI Właściwości Request Response Server Application Session IsPostBack - zwraca false jeśli bieżące żądanie jest pierwszym żądaniem Metody MapPath - zastępuję tę samą metodę obiektu Server Validate -wymusza na wszystkich kontrolkach walidacyjnych weryfikacje danych Zdarzenia Page_Load - zgłaszane gdy strona się ładuje Page_UnLoad - można używać do zamykania plików i jawnego zwalniania obiektów
8.2 Klasa Page Przykład zastosowania <html> <script language=”vb” runat=”server”> Sub Page_Load() if Not IsPostBack then informacja.InnerHtml=”Witamy na stronie” end if end Sub Sub Button1_Click(source as Object, e as EventArgs) informacja.InnerHtml=”Właśnie przesłałeś dane” End Sub </script> <body> <form runat=”server”> Nazwa: <input id=”nazwa” runat=”server”> <input type=submit runat=”server” OnServerClick=”Button1_Click”> </form> <p><span id=”informacja” runat=”server”> </body> </html>
8.3 Oddzielenie kodu od interfejsu dobra praktyka programistczna klasa w pliku kodu stanowi rozszerzenie klasy Page jeśli kod jest skompilowany używamy atrybutu Codebehind jeśli kod jest kodem źródłowym używamy atrybutu Src Przykład - plik test.aspx <%@page language="vb" Src="logika.vb" Inherits="Logika"%> <html> <body> <form runat="server"> Nazwa: <asp:TextBox id=Nazwa runat="server"></asp:TextBox> <asp:Button id=Button1 Text="Wyślij" runat="server" OnClick="Button1_Click"></asp:Button> </form> <p><asp:Label id=Informacja runat="server"></asp:Label> </body> </html>
8.3 Oddzielenie kodu od interfejsu Imports System Imports System.Web.UI.WebControls Public Class Logika Inherits System.Web.UI.Page Protected Informacja as label Protected Nazwa as TextBox Protected Button1 as Button Sub Page_Load() if Not IsPostBack then Informacja.Text="Witamy na stronie" end if end Sub Public Sub Button1_Click(source as Object, e as EventArgs) Informacja.Text=Nazwa.Text End Sub End Class
8.4 Proste przykłady Proste przykłady Web Forms Przesłanie danych formularza (proste logowanie) przykład, źródła Stan sesji przykład, źródła Stan aplikacji przykład, źródła
9. Zarządzanie stanem Problem zarządzania stanem aplikacji protokół HTTP jest protokołem bezstanowym tzn. przy przechodzeniu poprzez strony nie ma przekazywania i przechowywania informacji zarządzanie stanem to zdolność do przechowywania informacji w ASP.NET możliwe jest utrzymywanie i zarządzanie danymi na poziomie całej aplikacji dzięki obiektowi Application w ASP.NET możliwe jest utrzymywanie i zarządzanie danymi na poziomie sesji pojedynczego użytkownika dzięki obiektowi Session zarówno nieumiejętne wykorzystanie stanu aplikacji jak i stanu sesji może doprowadzić do zmniejszenia wydajności aplikacji, w związku ze zużyciem zasobów serwera, do przechowywania dużych danych zaleca się stosować mechanizm zarządzaniem buforowania ASP.NET sekcja sessionState pliku web.config służy do konfigurowania stanu: mode - off - wyłącza stan sesji, InProc - zarządzanie stanu sesji przez IIS, StateServer - zarządzanie przez usługę Windows, SQLServer - przechowywanie w bazie SQLServer cookieles - czy wykorzystywać cookie, czy kodować identyfikator w URL żądania timeout - ilość minut po której nieaktywna sesja jest usuwana connectionString - adres IP lub DNS serwera z włączoną usługą StateServer sqlConnectionString - łańcuch łączenia z bazą danych SQLServer
10. Literatura http://msdn.microsoft.com – MSDN Microsoft http://asp.net Scot Worley, ASP.NET Vademecum Profesjonalisty, Helion, 2003 Robert B. Dunaway, Visual Studio .NET, Mikom, 2003
Piotr Kuźniacki piotr.kuzniacki@polsl.pl Kontakt Piotr Kuźniacki piotr.kuzniacki@polsl.pl Politechnika Śląska, Instytut Informatyki, ul. Akademicka 16, 44‑101 Gliwice, Polska Dziękuję za uwagę... Dziękuję za uwagę...