asp.net-3.5-dla-programistow-php full scan.pdf

(10508 KB) Pobierz
888433669.001.png
4
ASP.NET 3.5 dla programistów PHP
Rozdział 5. Obsługa strony ............................................................................... 49
Wszystkie drogi prowadzą do strony — Page ................................................................ 49
Request — tak wszystko się zaczyna… .......................................................................... 52
Ciasteczka ................................................................................................................ 53
Niewinne szpiegowanie ............................................................................................ 54
Response — …a tak się kończy ..................................................................................... 54
Nie tylko dla studentów — potyczki z sesjami ............................................................... 56
Rozdział 6. Źródła danych ................................................................................ 59
Słowo o wzorcach… ....................................................................................................... 59
Źródła danych ................................................................................................................. 62
SqlDataSource ................................................................................................................ 63
Rozdział 7. Klasy struktur danych — ADO.NET .................................................. 67
DataColumn i DataRow — kolumny + wiersze = tabela ................................................ 68
Relacje ............................................................................................................................ 70
Widok danych ................................................................................................................. 73
Dostawca danych na przykładzie MS SQL ........................................................................... 73
Rozdział 8. Kontrolki danych ............................................................................ 77
Obsługa danych bez ogródek .......................................................................................... 79
Repeater ................................................................................................................... 80
DetailsView .............................................................................................................. 82
3 w 1 — kontrolki i źródła ....................................................................................... 84
GridView — cała władza w ręce siatki .................................................................... 87
Rozdział 9. Walidacja danych ........................................................................... 93
RequiredFieldValidator .................................................................................................. 93
RangeValidator ............................................................................................................... 95
CompareValidator .......................................................................................................... 97
RegularExpressionValidator ........................................................................................... 98
Rozdział 10. System użytkowników .................................................................... 99
Konfigurowanie aplikacji ASP.NET ............................................................................ 100
Role, czyli uprawnienia ................................................................................................ 104
Rozdział 11. Mistrz i uczeń, czyli zastępcy include’a ......................................... 107
ASP.NET i PHP — to samo czy tak samo? .................................................................. 108
Rozdział 12. Historia o starych znajomych, czyli AJAX w .NET ........................... 111
A(SP.NET) + A(JAX) — brzydkie kaczątko i piękny łabędź ...................................... 112
Rozdział 13. Praktyczne przykłady .................................................................... 117
Księga gości ................................................................................................................. 117
Licznik (pliki) ............................................................................................................... 120
Sonda (ankieta) ............................................................................................................. 127
Tokeny, czyli test na człowieczeństwo ......................................................................... 132
CMS ............................................................................................................................. 136
Bibliografia .................................................................................. 151
Skorowidz .................................................................................... 153
Rozdział 5.
Obsługa strony
Strony internetowe to nie tylko kontrolki graficzne. Zanim ASP.NET zajmie się ob-
sługą kontrolek, musi zostać wysłane przez klienta żądanie, a po wszystkim powinna
zostać odesłana do niego odpowiedź. Ponadto często (nawet w poprzednim rozdziale)
konieczne jest uzyskanie pewnych informacji o serwerze lub samej aplikacji niemoż-
liwych do odczytania z poziomu kontrolek. Większość tych informacji można pobrać
za pośrednictwem klasy Page i jej właściwości.
Wszystkie drogi prowadzą
do strony — Page
Z klasą Page mieliśmy do tej pory kontakt wielokrotny, gdyż wszystkie tworzone przez
nas proste aplikacje złożone z jednej strony (formularza) były w istocie klasami wy-
wiedzionymi bezpośrednio z klasy Page . Co za tym idzie, wiele elementów wykorzy-
stywanych uprzednio bezpośrednio (jak właściwości Response czy Server ) stanowiło
właściwości klasy Page .
Można powiedzieć, że klasa Page sama w sobie nie oferuje rozbudowanej funkcjonalności;
głównym jej zadaniem jest zebranie w jedną całość. Właściwości tej klasy można po-
dzielić na dwie nieformalne grupy — zwykłe, pomocne w określeniu działania strony,
i rozbudowane, których działanie nie jest blisko związane z samą klasą Page . W pew-
nym sensie klasa Page stanowi jedynie zbiór odwołań do kluczowych obiektów, dzięki
czemu nie trzeba ich szukać w innych miejscach. Oczywiście wszystkie te obiekty nie
biorą się znikąd — instancje znajdujące się we właściwościach danej strony są po-
wiązane właśnie z nią. Do „dużych” właściwości, które będą tematem osobnych pod-
rozdziałów i rozdziałów, zaliczają się:
HttpApplicationState Application — określa obiekt klasy, której zadaniem
jest wymiana informacji między różnymi żądaniami i stronami, czyli zarządzanie
stanem aplikacji.
HttpRequest Request — zwraca obiekt aktualnie obsługiwanego żądania.
50
ASP.NET 3.5 dla programistów PHP
HttpResponse Response — określa obiekt aktualnie generowanej odpowiedzi
na żądanie.
HttpServerUtility Server — określa obiekt pomocny przy obsługiwaniu żądań,
udostępniając pewne mechanizmy serwera — w przeciwieństwie do właściwości
Request , której zadaniem nie jest interakcja ze środowiskiem serwera.
HttpSessionState Session — określa obiekt sesji, w którym można
przechowywać wartości między kolejnymi żądaniami HTTP.
IPrincipal User — określa dane użytkownika, który wysłał żądanie
(przydatne zwłaszcza po wprowadzeniu do aplikacji mechanizmu autentyfikacji
— uwierzytelnienia).
Jak widać, klasa Page gromadzi niemal wszystkie istotne elementy przydatne w trak-
cie projektowania aplikacji WWW. Oczywiście można wykorzystywać również inne
właściwości; z niektórymi już mieliśmy kontakt (np. IsPostBack ), niektóre poznamy
przy okazji konkretnych rozwiązań zamieszczonych w dalszej części książki.
Z pewnością w tym miejscu warto zapoznać się z modelem zdarzeń klasy Page . Opiera
się on rzecz jasna na modelu zdarzeń klasy Control . Wytłuszczonym drukiem zostały
zaznaczone zdarzenia wprowadzone dopiero w klasie Page :
PreInit — na najwcześniejszym możliwym etapie ładowania strony można
określić, czy strona jest ładowana w wyniku żądania zwrotnego (postback).
Należy jednak pamiętać, że kontrolki nie są jeszcze w pełni załadowane.
Z tego względu ustawianie ich wartości na tym etapie nie gwarantuje ich
zachowania później.
Init — w tym momencie kontrolki są zainicjalizowane (strona może wywołać
zdarzenie dopiero wtedy, gdy wszystkie kontrolki zgłosiły to zdarzenie).
Można więc dowolnie korzystać z ich właściwości.
InitComplete — zgłaszane, gdy cały proces inicjalizacji (włącznie ze stroną)
został zakończony. Jeśli jakaś czynność wymaga do działania zakończenia
inicjalizacji, powinna znaleźć się w tej metodzie zdarzenia.
PreLoad — podczas tego zdarzenia jest ładowany stan widoku strony
i kontrolek oraz dane przesłane w żądaniu zwrotnym.
Load — ładuje stronę, a następnie rekursywnie wszystkie kontrolki na stronie.
W tym momencie można utworzyć połączenia z bazą danych. Po zdarzeniu
Load następują inne zdarzenia kontrolek, takie jak kliknięcie przycisku.
LoadComplete — podobnie jak InitComplete , to zdarzenie zachodzi
po zakończeniu ładowania wszystkich kontrolek.
PreRender — zachodzi tuż przed renderowaniem, czyli generowaniem kodu
HTML na podstawie kontrolek ASP.NET. Przed zajściem tego zdarzenia
kontrolki są wiązane ze źródłami danych, więc to jest najlepszy moment na
wykonanie ewentualnych zmian związanych z danymi w takich kontrolkach.
Bezpośrednio po tym zdarzeniu zachodzi renderowanie, po którym nie można
zmodyfikować już w żaden sposób kontrolek.
Rozdział 5. Obsługa strony
51
Unload — ma miejsce po zajściu zdarzenia dla wszystkich innych kontrolek.
Można wtedy zwolnić zasoby przydzielone w ramach całej strony.
Wszystkie te zdarzenia są częścią większego procesu, jakim jest realizacja żądania HTTP.
Można powiedzieć, że proces ten składa się z trzech części:
1. Wysłanie żądania do serwera.
2. Analiza treści żądania i przetworzenie go (ten etap jest pomijany, w przypadku
gdy wysyłane są statyczne strony HTML i nie są używane żadne technologie
server-side ) — powstanie odpowiedzi na podstawie plików znajdujących się
na serwerze i danych zawartych w żądaniu.
3. Odesłanie odpowiedzi do klienta.
W przeciwieństwie do innych protokołów sieciowych, takich jak FTP, protokół HTTP
jest protokołem bezstanowych. Oznacza to, że każde nowe żądanie wysłane przez
klienta nie ma związku z poprzednim. Gdyby nie zastosowanie mechanizmów, takich
jak sesje czy ciasteczka (ang. cookies ), praktycznie nie byłoby możliwe korzystanie
np. z poczty elektronicznej za pośrednictwem przeglądarki — wysyłając każde żądanie,
trzeba byłoby za każdym razem podawać login i hasło — protokół sam w sobie nie
umożliwia zapamiętania takich danych.
Etap nr 1 stanowi zadanie przeglądarki. Na podstawie decyzji podejmowanych przez
użytkownika (wpisanie adresu URL, kliknięcie odnośnika, wysłanie formularza) ge-
nerowane są odpowiednie żądania (ang. request ) HTTP, które następnie są wysyłane
do odpowiedniego serwera. Nasz kontakt z tym etapem sprowadza się do możliwości
pobrania informacji na temat żądania — zajmuje się tym klasa HttpRequest , która za
pośrednictwem właściwości Request jest obecna w klasie Page .
Etap nr 2 stanowi meritum niniejszej publikacji. Niezależnie od użytej technologii se-
rver-side schemat działania jest zawsze taki sam — serwer WWW sprawdza typ pliku
(na podstawie rozszerzenia lub typu MIME), jaki jest zawarty w żądaniu. Na tej pod-
stawie może po prostu odesłać zawartość pliku do klienta (jeśli jest to zwykły plik
danych) lub poddać treść pliku działaniu którejś z dostępnych technologii server-side .
Oczywiście w takiej sytuacji do modułu server-side musi przekazać także szereg innych
danych — informacje przesłane przez klienta (np. z formularzy albo adresu URL),
dane żądania, ciasteczka, etc. Gdy to wszystko zostanie razem połączone i przetworzone
przez moduł server-side , w wyniku renderowania (używając terminologii ASP.NET,
choć termin ten pasuje również do innych technologii server-side ) powstaje końcowy
dokument HTML.
Etap nr 3 polega na przesłaniu danych od serwera do klienta. W przypadku pominię-
cia etapu 2. przesyłane dane pochodzą po prostu z wczytanego pliku znajdującego się
na dysku serwera. Gdy klient odbierze cały plik, połączenie jest zamykane, a operacja
wykonana przez klienta i serwer przechodzi do historii. Co ważne, z poziomu ASP.NET
możemy mieć wpływ również i na ten etap (np. przez ustawienie kodowania przesy-
łanego tekstu) za pośrednictwem właściwości Response klasy Page (analogicznie jak
w etapie 1.).
Ponieważ drugi etap omawiamy w zasadzie w znamienitej większości tej książki,
przyjrzymy się teraz pozostałym etapom procesu.
Zgłoś jeśli naruszono regulamin