Anda di halaman 1dari 12

ASP.NET 3.

5
dla programistw PHP
Autor: Krzysztof Rychlicki-Kicior
ISBN: 978-83-246-1916-0
Format: 158x235, stron: 160

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Stwrz aplikacje internetowe w technologii ASP.NET 3.5


Poznaj i skonfiguruj rodowisko programistyczne
Zaprojektuj struktur aplikacji
Pocz aplikacj z baz danych
Wywietl dane na stronach
Technologie PHP i ASP.NET maj kilka cech wsplnych obie su do tworzenia
aplikacji internetowych, uruchamianych za porednictwem przegldarki internetowej,
i generuj wynik swojego dziaania w postaci dokumentw XHTML. Jednak istnieje
midzy nimi jedna istotna rnica PHP wykorzystuje rozwizania open source,
a ASP.NET rozwizania komercyjne, rozwijane przez firm Microsoft. ASP.NET opiera si
na platformie .NET uniwersalnym frameworku, pozwalajcym na korzystanie
z rnych jzykw programowania w celu tworzenia skalowalnych, szybkich i atwych
do rozwijania aplikacji sieciowych. Nie bez znaczenia jest take rodowisko
programistyczne Visual Studio to doskonae narzdzie, znacznie przyspieszajce
i usprawniajce proces tworzenia oprogramowania.
ASP.NET 3.5 dla programistw PHP to wprowadzenie do technologii ASP
dla wszystkich twrcw aplikacji internetowych, ktrzy dotychczas korzystali z PHP.
Czytajc t ksik, zrozumiesz gwne zasady korzystania z platformy .NET i techniki
budowania aplikacji sieciowych. Dowiesz si, jak skonfigurowa rodowisko pracy
i zaprojektowa struktur aplikacji. Nauczysz si korzysta z najwaniejszych
elementw platformy .NET kontrolek bdcych gotowymi cegiekami do budowy
stron internetowych ASP. Poznasz podstawowe kontrolki, tworzce interfejs
uytkownika i zarzdzajce sesj, poczysz aplikacj z baz danych i zastosujesz
kontrolki do wywietlenia danych na stronie. Przeczytasz o sprawdzaniu poprawnoci
danych wprowadzanych do formularzy i przypisywaniu rl uytkownikom aplikacji.
Znajdziesz tu take informacje o tym, w jaki sposb wykorzysta technologi AJAX
do budowy interfejsw uytkownika aplikacji ASP.NET.
Porwnanie technologii sucych do tworzenia aplikacji sieciowych
Konfiguracja bazy MS SQL i instalacja narzdzi programistycznych
Kontrolki interfejsu uytkownika
Zarzdzanie sesj i plikami cookie
Komunikacja z bazami danych za pomoc ADO.NET
Wywietlanie danych na stronach
Weryfikacja poprawnoci danych z formularzy
Obsuga kont uytkownikw
AJAX w aplikacjach ASP.NET
Sprbuj czego nowego. Moe w ASP.NET 3.5 odnajdziesz to,
czego brakowao Ci w PHP?

Spis treci
Podzikowania ................................................................................. 5
Wstp .............................................................................................. 7
Rozdzia 1. Aplikacje webowe przegld technologii ......................................... 9
Perl ................................................................................................................................. 11
Python ............................................................................................................................. 12
Ruby ............................................................................................................................... 13
J2EE/JSP ........................................................................................................................ 13

Rozdzia 2. ASP.NET v. PHP ............................................................................. 15


Zalety .............................................................................................................................. 15
Wady .............................................................................................................................. 17

Rozdzia 3. rodowisko programistyczne .......................................................... 19


Konfiguracja rodowiska SQL ....................................................................................... 20
Pierwsza aplikacja webowa ............................................................................................ 22
Mikstura znacznikw ............................................................................................... 24
Debugowanie aplikacji ............................................................................................. 26

Rozdzia 4. Podstawowe kontrolki .................................................................... 29


HTML v. ASP.NET ........................................................................................................ 29
Control ............................................................................................................................ 30
WebControl .................................................................................................................... 33
TextBox (input type="text", textarea, input type="password") ...................................... 34
Button (input type="submit", type="button") ................................................................. 35
DropDownList (select) ................................................................................................... 36
Mechanizm PostBack ............................................................................................... 37
ListBox (select multiple="multiple") .............................................................................. 38
CheckBox (input type="checkbox") ............................................................................... 40
CheckBoxList ................................................................................................................. 41
RadioButton (input type="radio") .................................................................................. 42
RadioButtonList ............................................................................................................. 42
Image (<img>) ................................................................................................................ 42
ImageButton ............................................................................................................. 43
ImageMap ................................................................................................................ 43
FileUpload (input type="file") ........................................................................................ 45
Pozostae kontrolki ......................................................................................................... 47

ASP.NET 3.5 dla programistw PHP

Rozdzia 5. Obsuga strony ............................................................................... 49


Wszystkie drogi prowadz do strony Page ................................................................ 49
Request tak wszystko si zaczyna .......................................................................... 52
Ciasteczka ................................................................................................................ 53
Niewinne szpiegowanie ............................................................................................ 54
Response a tak si koczy ..................................................................................... 54
Nie tylko dla studentw potyczki z sesjami ............................................................... 56

Rozdzia 6. rda danych ................................................................................ 59


Sowo o wzorcach ....................................................................................................... 59
rda 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 przykadzie MS SQL ........................................................................... 73

Rozdzia 8. Kontrolki danych ............................................................................ 77


Obsuga danych bez ogrdek .......................................................................................... 79
Repeater ................................................................................................................... 80
DetailsView .............................................................................................................. 82
3 w 1 kontrolki i rda ....................................................................................... 84
GridView caa wadza w rce siatki .................................................................... 87

Rozdzia 9. Walidacja danych ........................................................................... 93


RequiredFieldValidator .................................................................................................. 93
RangeValidator ............................................................................................................... 95
CompareValidator .......................................................................................................... 97
RegularExpressionValidator ........................................................................................... 98

Rozdzia 10. System uytkownikw .................................................................... 99


Konfigurowanie aplikacji ASP.NET ............................................................................ 100
Role, czyli uprawnienia ................................................................................................ 104

Rozdzia 11. Mistrz i ucze, czyli zastpcy includea ......................................... 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 kacztko i pikny abd ...................................... 112

Rozdzia 13. Praktyczne przykady .................................................................... 117


Ksiga goci ................................................................................................................. 117
Licznik (pliki) ............................................................................................................... 120
Sonda (ankieta) ............................................................................................................. 127
Tokeny, czyli test na czowieczestwo ......................................................................... 132
CMS ............................................................................................................................. 136

Bibliografia .................................................................................. 151


Skorowidz .................................................................................... 153

Rozdzia 5.

Obsuga strony
Strony internetowe to nie tylko kontrolki graficzne. Zanim ASP.NET zajmie si obsug kontrolek, musi zosta wysane przez klienta danie, a po wszystkim powinna
zosta odesana do niego odpowied. Ponadto czsto (nawet w poprzednim rozdziale)
konieczne jest uzyskanie pewnych informacji o serwerze lub samej aplikacji niemoliwych do odczytania z poziomu kontrolek. Wikszo tych informacji mona pobra
za porednictwem klasy Page i jej waciwoci.

Wszystkie drogi prowadz


do strony Page
Z klas Page mielimy do tej pory kontakt wielokrotny, gdy wszystkie tworzone przez
nas proste aplikacje zoone z jednej strony (formularza) byy w istocie klasami wywiedzionymi bezporednio z klasy Page. Co za tym idzie, wiele elementw wykorzystywanych uprzednio bezporednio (jak waciwoci Response czy Server) stanowio
waciwoci klasy Page.
Mona powiedzie, e klasa Page sama w sobie nie oferuje rozbudowanej funkcjonalnoci;
gwnym jej zadaniem jest zebranie w jedn cao. Waciwoci tej klasy mona podzieli na dwie nieformalne grupy zwyke, pomocne w okreleniu dziaania strony,
i rozbudowane, ktrych dziaanie nie jest blisko zwizane z sam klas Page. W pewnym sensie klasa Page stanowi jedynie zbir odwoa do kluczowych obiektw, dziki
czemu nie trzeba ich szuka w innych miejscach. Oczywicie wszystkie te obiekty nie
bior si znikd instancje znajdujce si we waciwociach danej strony s powizane wanie z ni. Do duych waciwoci, ktre bd tematem osobnych podrozdziaw i rozdziaw, zaliczaj si:
HttpApplicationState Application okrela obiekt klasy, ktrej zadaniem

jest wymiana informacji midzy rnymi daniami i stronami, czyli zarzdzanie


stanem aplikacji.
HttpRequest Request zwraca obiekt aktualnie obsugiwanego dania.

50

ASP.NET 3.5 dla programistw PHP


HttpResponse Response okrela obiekt aktualnie generowanej odpowiedzi

na danie.
HttpServerUtility Server okrela obiekt pomocny przy obsugiwaniu da,

udostpniajc pewne mechanizmy serwera w przeciwiestwie do waciwoci


Request, ktrej zadaniem nie jest interakcja ze rodowiskiem serwera.
HttpSessionState Session okrela obiekt sesji, w ktrym mona

przechowywa wartoci midzy kolejnymi daniami HTTP.


IPrincipal User okrela dane uytkownika, ktry wysa danie

(przydatne zwaszcza po wprowadzeniu do aplikacji mechanizmu autentyfikacji


uwierzytelnienia).
Jak wida, klasa Page gromadzi niemal wszystkie istotne elementy przydatne w trakcie projektowania aplikacji WWW. Oczywicie mona wykorzystywa rwnie inne
waciwoci; z niektrymi ju mielimy kontakt (np. IsPostBack), niektre poznamy
przy okazji konkretnych rozwiza zamieszczonych w dalszej czci ksiki.
Z pewnoci w tym miejscu warto zapozna si z modelem zdarze klasy Page. Opiera
si on rzecz jasna na modelu zdarze klasy Control. Wytuszczonym drukiem zostay
zaznaczone zdarzenia wprowadzone dopiero w klasie Page:
PreInit na najwczeniejszym moliwym etapie adowania strony mona

okreli, czy strona jest adowana w wyniku dania zwrotnego (postback).


Naley jednak pamita, e kontrolki nie s jeszcze w peni zaadowane.
Z tego wzgldu ustawianie ich wartoci na tym etapie nie gwarantuje ich
zachowania pniej.
Init w tym momencie kontrolki s zainicjalizowane (strona moe wywoa

zdarzenie dopiero wtedy, gdy wszystkie kontrolki zgosiy to zdarzenie).


Mona wic dowolnie korzysta z ich waciwoci.
InitComplete zgaszane, gdy cay proces inicjalizacji (wcznie ze stron)

zosta zakoczony. Jeli jaka czynno wymaga do dziaania zakoczenia


inicjalizacji, powinna znale si w tej metodzie zdarzenia.
PreLoad podczas tego zdarzenia jest adowany stan widoku strony

i kontrolek oraz dane przesane w daniu zwrotnym.


Load aduje stron, a nastpnie rekursywnie wszystkie kontrolki na stronie.

W tym momencie mona utworzy poczenia z baz danych. Po zdarzeniu


Load nastpuj inne zdarzenia kontrolek, takie jak kliknicie przycisku.
LoadComplete podobnie jak InitComplete, to zdarzenie zachodzi

po zakoczeniu adowania wszystkich kontrolek.


PreRender zachodzi tu przed renderowaniem, czyli generowaniem kodu

HTML na podstawie kontrolek ASP.NET. Przed zajciem tego zdarzenia


kontrolki s wizane ze rdami danych, wic to jest najlepszy moment na
wykonanie ewentualnych zmian zwizanych z danymi w takich kontrolkach.
Bezporednio po tym zdarzeniu zachodzi renderowanie, po ktrym nie mona
zmodyfikowa ju w aden sposb kontrolek.

Rozdzia 5. Obsuga strony

51

Unload ma miejsce po zajciu zdarzenia dla wszystkich innych kontrolek.

Mona wtedy zwolni zasoby przydzielone w ramach caej strony.


Wszystkie te zdarzenia s czci wikszego procesu, jakim jest realizacja dania HTTP.
Mona powiedzie, e proces ten skada si z trzech czci:
1. Wysanie dania do serwera.
2. Analiza treci dania i przetworzenie go (ten etap jest pomijany, w przypadku

gdy wysyane s statyczne strony HTML i nie s uywane adne technologie


server-side) powstanie odpowiedzi na podstawie plikw znajdujcych si
na serwerze i danych zawartych w daniu.
3. Odesanie odpowiedzi do klienta.

W przeciwiestwie do innych protokow sieciowych, takich jak FTP, protok HTTP


jest protokoem bezstanowych. Oznacza to, e kade nowe danie wysane przez
klienta nie ma zwizku z poprzednim. Gdyby nie zastosowanie mechanizmw, takich
jak sesje czy ciasteczka (ang. cookies), praktycznie nie byoby moliwe korzystanie
np. z poczty elektronicznej za porednictwem przegldarki wysyajc kade danie,
trzeba byoby za kadym razem podawa login i haso protok sam w sobie nie
umoliwia zapamitania takich danych.
Etap nr 1 stanowi zadanie przegldarki. Na podstawie decyzji podejmowanych przez
uytkownika (wpisanie adresu URL, kliknicie odnonika, wysanie formularza) generowane s odpowiednie dania (ang. request) HTTP, ktre nastpnie s wysyane
do odpowiedniego serwera. Nasz kontakt z tym etapem sprowadza si do moliwoci
pobrania informacji na temat dania zajmuje si tym klasa HttpRequest, ktra za
porednictwem waciwoci Request jest obecna w klasie Page.
Etap nr 2 stanowi meritum niniejszej publikacji. Niezalenie od uytej technologii server-side schemat dziaania jest zawsze taki sam serwer WWW sprawdza typ pliku
(na podstawie rozszerzenia lub typu MIME), jaki jest zawarty w daniu. Na tej podstawie moe po prostu odesa zawarto pliku do klienta (jeli jest to zwyky plik
danych) lub podda tre pliku dziaaniu ktrej z dostpnych technologii server-side.
Oczywicie w takiej sytuacji do moduu server-side musi przekaza take szereg innych
danych informacje przesane przez klienta (np. z formularzy albo adresu URL),
dane dania, ciasteczka, etc. Gdy to wszystko zostanie razem poczone i przetworzone
przez modu server-side, w wyniku renderowania (uywajc terminologii ASP.NET,
cho termin ten pasuje rwnie do innych technologii server-side) powstaje kocowy
dokument HTML.
Etap nr 3 polega na przesaniu danych od serwera do klienta. W przypadku pominicia etapu 2. przesyane dane pochodz po prostu z wczytanego pliku znajdujcego si
na dysku serwera. Gdy klient odbierze cay plik, poczenie jest zamykane, a operacja
wykonana przez klienta i serwer przechodzi do historii. Co wane, z poziomu ASP.NET
moemy mie wpyw rwnie i na ten etap (np. przez ustawienie kodowania przesyanego tekstu) za porednictwem waciwoci Response klasy Page (analogicznie jak
w etapie 1.).
Poniewa drugi etap omawiamy w zasadzie w znamienitej wikszoci tej ksiki,
przyjrzymy si teraz pozostaym etapom procesu.

52

ASP.NET 3.5 dla programistw PHP

Request tak wszystko si zaczyna


Gwn zalet tej waciwoci klasy Page jest moliwo odczytania wielu przydatnych informacji zawartych w daniu. Chocia samo danie jest jedynie acuchem znakw (moe, co prawda, zawiera pliki w przypadku uycia kontrolki FileUpload, ale
nie wpywa to na sam form), zawarta w nim ilo informacji z pewnoci zadziwi
kadego, kto nie zna dokadnej struktury dania. Przegldarka przesya wraz z adresem
URL wicej informacji, ni mona by si spodziewa.
Zacznijmy jednak od tego, co najprostsze, czyli wanie adresu URL. Wbrew pozorom
nie jest on reprezentowany tylko przez jedn waciwo. Dostajemy a trzy waciwoci, ktre umoliwiaj nam dostp do wybranych elementw caego adresu:
string Url okrela peny adres URL dania (zawierajcy adres serwera,

ciek do pliku oraz parametry dodatkowe).


string RawUrl okrela adres URL bez nazwy serwera,

czyli np. /katalog/plik.aspx?parametr=wartosc.


NameValueCollection QueryString okrela kolekcj parametrw

przekazanych w daniu (po znaku zapytania).


Na uwag zasuguje zwaszcza ostatnia waciwo. acuch zapytania pozwala na przekazywanie parametrw do strony WWW przez adres URL. W innych technologiach
server-side jest to jeden z dwch gwnych sposobw na przekazywanie informacji
midzy kolejnymi daniami. W przypadku ASP.NET przekazywanie danych odbywa
si bez ingerencji programisty po wysaniu dania wystarczy po prostu odczyta
wybrane wartoci tak, jak zostao to opisane w rozdziale 4.
Mimo to istnieje moliwo wykorzystania mechanizmw podstawowych, takich jak
opisane wyej przekazywanie parametrw przez adres URL, nazywane metod GET,
i przesyanie danych przez formularz, jednak bez jawnej reprezentacji w ramach adresu,
a jedynie w obrbie dania, czyli metoda POST. Kada z tych metod ma swoje wady
i zalety. Metoda GET umoliwia przechowanie danych w jednym acuchu znakw,
w dodatku widocznym w pasku przegldarki.
Z drugiej strony, istnieje ograniczenie dugoci przesyanych danych (z reguy do kilku
kilobajtw). Tych ogranicze nie posiada metoda POST. Naley jednak pamita, e o ile
danie GET mona swobodnie przechowywa i przetwarza (np. przesya poczt elektroniczn, umieszcza jako odnoniki na innych stronach WWW, etc.), to danie POST
nie daje tej moliwoci raz wygenerowane danie przesane do serwera nie moe
by wywietlone w podobny sposb. Co za tym idzie, proste parametry s z reguy
przesyane za porednictwem metody GET, a bardziej skomplikowane metod POST.
Chocia dane w ASP.NET s niejawnie (tj. w sposb, ktry programista nie ingeruje)
przekazywane za pomoc widoku stanu, mona korzysta rwnie z metody GET. Wystarczy odpowiednio sformuowa np. adresy zawarte w odnonikach (kontrolka
HyperLink):
Strona.aspx?parametr1=wartosc1&parametr2=innawartosc

Rozdzia 5. Obsuga strony

53

W ten sposb mimo normalnego dziaania, zgodnego z ASP.NET, mona odczyta wartoci dania GET. Wystarczy skorzysta z opisanej powyej waciwoci QueryString.
Jest to typowa kolekcja-sownik, w ktrej do danych elementw-wartoci uzyskuje
si dostp przez podanie klucza-nazwy. Jeli dla powyszego adresu chcemy pobra
warto pierwszego parametru, wystarczy wywoa instrukcj:
string s = Request.QueryString["parametr1"];

Drug grup waciwoci, niejako spokrewnionych z adresem URL, s fizyczne cieki


dostpu, czyli cieki okrelajce pooenie katalogu strony bd samej strony na dysku
serwera.
string PhysicalApplicationPath okrela ciek do katalogu na dysku

serwera, w ktrym znajduje si dana strona.


string PhysicalPath okrela ciek do danej strony na dysku serwera.

Mona uywa te waciwoci bez sowa Physical w nazwie, ktre okrelaj ciek
wirtualn, np. /WebSite (ApplicationPath) lub /WebSite1/Strona.aspx (Path). Taki zestaw waciwoci (cznie siedem) pozwala na swobodne korzystanie z wszelkiego
rodzaju cieek.
Istotnym elementem kadego dania HTTP s nagwki. S one reprezentowane przez
waciwo NameValueCollection Headers. Jak wida, jest to kolejny sownik-kolekcja.
Odpowiada to faktycznej strukturze nagwkw. Przykadowy nagwek ma nastpujc
posta:
Content-type: text/html

Przed dwukropkiem znajduje si klucz, a za dwukropkiem warto. Oczywicie


zawarto nagwkw zaley od przegldarki i konkretnego dania mog one
ulega zmianie.

Ciasteczka
Inn istotn kolekcj s ciasteczka specjalne pliki tekstowe o nieduym rozmiarze,
zapisywane na komputerze uytkownika. Dziki nim mona zapisa informacje dotyczce na przykad danych logowania do poczty elektronicznej. Nie trzeba wtedy wprowadza ich za kadym razem. Ciasteczka, w odrnieniu od wykorzystywanego ju
typu NameValueCollection, maj nieco bardziej skomplikowan struktur, s wic reprezentowane za pomoc waciwoci HttpCookieCollection. Klasa ciasteczek (jak
mona si domyli HttpCookie) skada si z kilku wanych waciwoci, ktre
charakteryzuj kade ciasteczko. Oto najwaniejsze:
string Name okrela nazw ciasteczka.
string Value okrela warto ciasteczka.
DateTime Expires okrela dat wyganicia ciasteczka.

54

ASP.NET 3.5 dla programistw PHP


bool HasKeys okrela, czy warto ciasteczka jest pojedyncza, czy stanowi

kolekcj.
NameValueCollection Values okrela kolekcj wartoci w przypadku,

gdy stwierdzono jej istnienie.


Dwie pierwsze waciwoci musz by wypenione, inaczej istnienie ciasteczka nie ma
sensu. Pominicie waciwoci Expires skutkuje usuniciem ciasteczka z komputera
uytkownika po zakoczeniu sesji na danej stronie, czyli najczciej po zamkniciu
przegldarki. Reszta parametrw jest opcjonalna i z reguy nie wymaga stosowania.
Oczywicie mona rwnie tworzy ciasteczka. Jak wikszo podobnych, ale odwrotnych procesw (np. czytanie dania HTTP tworzenie odpowiedzi) tak i ten naley
do odpowiedzi, czyli klasy HttpResponse.

Niewinne szpiegowanie
dania HTTP zawieraj sporo informacji na temat uytkownika, a konkretnie jego przegldarki czy komputera. W tym celu mona wykorzysta waciwoci zaczynajce si
w wikszoci od sw User:
string UserAgent okrela nazw i informacje o przegldarce.
string UserHostAddress okrela adres IP komputera, z ktrego zostao

nawizane poczenie.
string[] UserLanguages okrela preferowane jzyki uytkownika

(ustawione w przegldarce; nie wszystkie maj tak moliwo).


bool IsAuthenticated okrela, czy uytkownik jest zalogowany

(o ile mechanizm ten zosta zaimplementowany).


bool IsLocal okrela, czy danie pochodzi z lokalnego komputera

(tego samego, na ktrym dziaa serwer) waciwo przydatna zwaszcza


do celw testowych, umoliwiajca rozgraniczenie testw, dokonywanych
czsto z lokalnego komputera, i innych da.
bool IsSecure okrela, czy nawizywane poczenie jest bezpieczne

(z uyciem protokou SSL).


Na tym koczymy omawianie klasy HttpRequest; kilka ciekawych waciwoci i metod,
oprcz ju poznanych, zostanie wykorzystanych przy okazji konkretnych przykadw.

Response a tak si koczy


W tej klasie odnajdziemy wiele podobiestw czcych j z klas HttpRequest. Przede
wszystkim niektre procesy, dziaajce niejako w jedn stron w klasie HttpRequest,
zostan odwrcone w klasie HttpResponse. Na przykad, wspomniane ciasteczka mogy

Rozdzia 5. Obsuga strony

55

by odczytywane za porednictwem klasy HttpRequest; teraz interesowa nas bdzie


tworzenie ciasteczek i dodawanie ich do odpowiedzi klasy HttpResponse.
Oglnie rzecz ujmujc, w zdecydowanej wikszoci przypadkw, jeli trzeba samemu
zaj si waciwoci Response klasy Page, polega to na dodawaniu/tworzeniu rnych obiektw.
Zaczniemy przewrotnie od faktu pozwalajcego na zlekcewaenie aktualnie przetwarzanej strony. Dysponujc waciwoci Response, moemy pozby si treci HTML
generowanej przez ASP.NET, a nastpnie wysa do strumienia dowoln zawarto
w bajtach. Zasada dziaania opiera si na kilku prostych elementach klasy HttpResponse:
string ContentType okrela typ MIME odpowiedzi. W przeciwiestwie
do klasy Request, gdzie waciwo ta penia rol jedynie informacyjn,

dziki niej moemy okreli typ odpowiedzi, np. na obrazek.


void Clear() czyci zawarto bufora z danych. Dziki temu mona

pozby si danych, ktre ju znalazy si w strumieniu odpowiedzi.


bool BufferOutput okrela, czy odpowied zostanie wysana dopiero

po cakowitym przetworzeniu strony.


Stream OutputStream okrela strumie, z ktrego dane zostan wysane do klienta.

Ponadto klasa Response definiuje waciwoci Cookies i Headers, ktre zostay opisane
przy okazji klasy Request. Tym razem mona do nich dodawa wasne ciasteczka bd
nagwki wszystko dla lepszej kontroli wysyanych do uytkownika danych. Wystarczy wykorzysta do tego celu metod Add(), ktra przyjmuje odpowiednio obiekty
klas HttpCookie i par danych: klucz-warto.
Z ciekawszych elementw tej klasy naley wymieni na pewno dwie metody, ktre s
czsto wykorzystywane w praktyce. S to:
void Redirect(string url) przerywa wykonywanie strony i przekierowuje

klienta pod podany adres. Uwaga! Naley podawa absolutne adresy URL
wraz z protokoem (np. http://www.helion.pl), gdy w przeciwnym razie
serwer potraktuje adres URL jako relatywny.
void TransmitFile(string sciezka) przekazuje plik o podanym adresie

(naley podawa relatywny URL) do klienta, pomijajc w odpowiedzi dan


stron.
Zwaszcza pierwsza z metod jest stosowana w wielu sytuacjach; najczstszym przykadem jest przekierowanie przy logowaniu/wylogowaniu, o ile nie skorzystano z domylnych mechanizmw. Poniej znajduje si przykadowy kod, ktry umoliwia skierowanie do klienta obrazka, wywietlajc przekazany w polu tekstowym tekst:
Default.aspx
<asp:Label ID="Label1" runat="server" Text="Podaj tekst do wyswietlenia:"
></asp:Label><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="OK" />

56

ASP.NET 3.5 dla programistw PHP

Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
System.Drawing.Image img = System.Drawing.Image.
FromFile(Server.MapPath("Puch.jpg"));
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img);
g.DrawString(TextBox1.Text, new System.Drawing.Font("Arial",20.0F),
System.Drawing.Brushes.White, new System.Drawing.PointF(10, 10));
Response.ContentType = "image/bmp";
Response.Clear();
img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
g.Dispose();
img.Dispose();
}
}

Po klikniciu przycisku (moe by ono zastpione utrat fokusa w poczeniu z waciwoci AutoPostBack) dochodzi do otwarcia i edycji obrazka. Wywietlamy na nim
tekst wysany przez uytkownika. Nastpnie wykorzystujemy poznane wczeniej waciwoci i metody, aby przygotowa strumie i zapisa do niego zawarto obrazka.
Oczywicie powysze rozwizanie mogoby zosta pominite, gdyby chodzio jedynie
o wywietlenie obrazka wystarczyoby uy poznanej metody TransmitFile(). Takie
rozwizanie jest jednak bardziej uniwersalne, pozwala na modyfikacj danych, a nawet
pobieranie ich z innych rde wszystko, co mona przekaza przez strumie, moe
by wykorzystane.

Nie tylko dla studentw


potyczki z sesjami
Sesja jest jednym z podstawowych poj, ktre spdza sen z powiek nie tylko studentom, ale i programistom aplikacji sieciowych. Uwzgldniajc to, e protok HTTP
nie umoliwia zachowania stanu (tak jak np. FTP), technologie server-side musz umoliwia przechowywanie danych pomidzy poszczeglnymi daniami. Jedn z metod
s ciasteczka, ale uytkownik moe wyczy ich obsug w przegldarce. Z tego wzgldu
powszechnie wykorzystywanym mechanizmem s sesje.
Sesja, w technologiach server-side najczciej reprezentowana jako kolekcja-sownik,
umoliwia zapis i odczyt wartoci niczym zwyka kolekcja. Dziki specjalnym mechanizmom sownik w ma taki sam stan; przechowuje te same wartoci pomidzy rnymi daniami. Typowymi zastosowaniami sesji s przechowywanie obiektw kluczowych dla obsugi uytkownika, takich jak koszyk z zakupami w sklepie internetowym,
dane logowania lub ostatnie operacje wykonane przez uytkownika. Niektre z informacji, ktre w innych technologiach programista musi zapisywa w sesji sam, s automatycznie przechowywane przez ASP.NET.

Rozdzia 5. Obsuga strony

57

Klasa HttpSessionState, udostpniajca funkcjonalno sesji, jest najzwyklejsz kolekcj.


Z tego wzgldu zapis i odczyt danych w kolekcji przebiega znacznie prociej ni w PHP.
Wystarczy po prostu zapisa dane w kolekcji. Prosty i krtki przykad prezentuje dwie
puapki, na jakie musz uwaa programici korzystajcy z mechanizmu sesji:
Default.aspx
<asp:Label ID="Label1" runat="server" Text="Podaj login:"></asp:Label><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Rejestruj" />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Default.aspx">
Przeaduj stron od nowa</asp:HyperLink>

Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack && Session["login"] != null)
TextBox1.Text = Session["login"].ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
Session["login"] = TextBox1.Text;
}

Zadanie strony jest proste jest to zwyka symulacja zapamitania wartoci pola
tekstowego w sesji i odtwarzania go w razie potrzeby. Zapis do waciwoci (przypominam Session jest waciwoci klasy Page, wic moemy si do niej odwoywa bez dodatkowych zapisw). Interesujcy jest rwnie odczyt. Na pewno musimy
sprawdzi, czy warto loginu istnieje w sesji. Ciekawsze jest jednak sprawdzanie postbacku to warunek konieczny wynikajcy z kolejnoci wywoywania zdarze. Gdybymy pominli t cz warunku, przypisanie wartoci z sesji do pola tekstowego
odbywaoby si za kadym razem po pierwszym okreleniu loginu. Ze wzgldu na
kolejno wywoywania zdarze (Page.Load zachodzi przed innymi zdarzeniami kontrolek
potomnych) kada kolejna prba zmiany wartoci w sesji (metoda Button1_Click) nie
mogaby si powie. Nowa warto pola tekstowego byaby zastpowana star wartoci z sesji. Dziki dodatkowemu warunkowi warto z sesji pobieramy tylko wtedy,
gdy nie podjto prby przypisania nowej wartoci. Oczywicie przy wikszej liczbie
kontrolek, ktre rwnie mogyby wygenerowa postback, naleaoby po prostu dokona przypisania po ewentualnym wywoaniu metody Button1_Click.
Drugi haczyk tkwi w kontrolce, ktra pojawia si po raz pierwszy HyperLink. Zostaa ona przedstawiona w prostym celu aby zademonstrowa, e sesja dziaa rzeczywicie. Mona powiedzie, e przycisk rwnie powoduje przeadowanie strony.
Problem w tym, e dziaaj wtedy rwnie mechanizmy widoku stanu i warto pola
tekstowego zostaaby zapamitana bez wzgldu na wykorzystanie sesji. Jeli jednak przeadujemy stron cakowicie, przy zakomentowanej treci metody Page_Load, warto
pola tekstowego nie zostanie zapamitana.
Pozostae istotne klasy, ktre znalazy swoje odzwierciedlenie w klasie Page, zostan
omwione w praktyce, w drugiej czci ksiki. Teraz moemy zaj si tym, co tygrysy webowe lubi najbardziej obsug danych.

Anda mungkin juga menyukai