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
Spis treci
Podzikowania ................................................................................. 5
Wstp .............................................................................................. 7
Rozdzia 1. Aplikacje webowe przegld technologii ......................................... 9
Perl ................................................................................................................................. 11
Python ............................................................................................................................. 12
Ruby ............................................................................................................................... 13
J2EE/JSP ........................................................................................................................ 13
Rozdzia 12. Historia o starych znajomych, czyli AJAX w .NET ........................... 111
A(SP.NET) + A(JAX) brzydkie kacztko i pikny abd ...................................... 112
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.
50
na danie.
HttpServerUtility Server okrela obiekt pomocny przy obsugiwaniu da,
51
52
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"];
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
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
kolekcj.
NameValueCollection Values okrela kolekcj wartoci w przypadku,
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
55
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
56
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.
57
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.