Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Obiekt Response

Poloneza


Obiekt Response

Wysyłanie informacji do gości

W ostatnim rozdziale przyjrzeliśmy procesowi pozwalającemu na bezpośrednie i pośrednie dostarczanie nam informacji o żądaniu i środowisku gości. W tym rozdziale zwrócimy uwagę na drugą tego procesu - wysyłanie informacji gościom i ich systemom operacyjnym.



Spójrz na rysunek 6.1. Owalna otoczka wskazuje na rolę obiektu Response, który pozwala na przekazywanie dynamicznej zawartości do przeglądarki. Korzystasz z informacji zebranych przez system gości oraz przez składniki twojego systemu w celu przygotowania tekstu, grafik i wielu innych rzeczy, które mają być wysłane do odwiedzającego. Realizuje się to poprzez obiekt Response

Rysunek 6.1. Rola obiektu Response w procesie ASP

W tym rozdziale omawiamy zbiór, właściwości i metody obiektu Response. Poznasz sposoby wpisywania cookie do przeglądarki gościa. Nauczysz się sprawować kontrolę podczas wysyłania wyników kodu do gościa. Będziesz wiedział jak wpisywać nagłówki do przeglądarki. Przyjrzymy się również wysyłaniu danych innych niż tekst, takich jak grafiki.

Na końcu rozdziału przyjrzymy się kilku praktycznym przykładom użycia obiektu Response

Zbiór obiektu Response

Obiekt Response posiada jeden tylko zbiór, który omówiono poniżej i podsumowano w tabeli 6.1.

Tabela 6.1. Zbiór obiektu Response

Zbiór

Przeznaczenie

Cookies

Wpisywanie znaczników cookie do przeglądarek gości.

Zbiór cookie

Jak wspomniano w poprzednim rozdziale, cookies są sposobem na zapisanie informacji na komputerze gościa. Później możesz wykorzystać twój kod w celu wyszukania wartości zapisanych w systemie gościa.

Na przykład mógłbyś zapamiętać w cookie najczęstsze kryteria wyszukiwania użyte przez gościa na twojej witrynie WWW. Następnie kiedy odwiedzający zacząłby ponownie wyszukiwać, mógłbyś przedstawić mu ostatnie pięć kryteriów; mógłbyś również zapamiętać w cookie położenie gościa i wyświetlić taką lokalną informację, kiedy ponownie będzie odwiedzał twoją witrynę.

Ponieważ jednak dane przechowywane są w systemie gościa, cookie nie może być jedynym sposobem identyfikacji gości. Zawsze powinieneś dysponować jakąś alternatywą dla cookies. Pamiętaj, że użytkownicy mogą w każdym czasie skasować kod, mogą mieć na komputerze program blokujący cookies lub mogą odwiedzać twoją witryną z innego systemu.

Umieszczania cookie na komputerze gościa dokonuje się przy użyciu zbioru Cookies obiektu Response. Aby wpisać pojedynczy, prosty znacznik cookie do systemu gościa, należy stworzyć następujący kod:

Response.Cookies("NameOfCookie") = "Wartość"

NameOfCookie jest nazwą cookie zapamiętanego na systemie gościa. Wartość reprezentuje tekst zapamiętywany w cookie. Tak więc ten kod:

Response.Cookies("SearchCriteria1") = "ASP"

wpisze do systemu gościa cookie o nazwie SearchCriteria1. Znacznik będzie zawierał wartość ASP. Jeśli cookie już istnieje, stara wartość będzie zastąpiona nową.

Poprzedni kod tworzy prosty cookie zawierający pojedynczą wartość. Jednak znacznik może być również złożony i może zawierać klucze podrzędne. Odniesienia to danego klucza dokonuje się poprzez określenie nazwy cookie wraz z nazwą klucza podrzędnego w następującej formie:

Response.Cookies("NameOfCookie")("NameOfKey") = "Wartość"

W tym przykładzie NameOfCookie jest nazwą cookie głównego, a NameOfKey reprezentuje nazwę klucza podrzędnego, do którego się odnosimy. Wartość to tekst wpisywany do cookie.

W naszym przykładzie związanym z kryteriami przeszukiwania, moglibyśmy zapamiętywać najczęściej wykorzystywane kryteria wyszukiwania w złożonym cookie. Spójrz na rysunek 6.2. To uproszczony widok naszej strony wyszukiwania, kiedy gość korzysta z niej po raz pierwszy. Pole najczęściej wykorzystywanych kryteriów jest puste. Jednak po kilku przeszukiwaniach pole zostanie zapełnione elementami do wyboru, jak to pokazano na rysunku 6.3.

Rysunek 6.2. Pierwotny widok strony wyszukującej

Rysunek 6.3. Widok strona po zakończeniu wyszukiwania

Kod realizujący to zadanie używa cookies. Blok kodowy na początku s 626g615g trony wpisuje znaczniki cookies:

<%

If Len(Request.Form("Search")) > 0 Then

Response.Cookies("SearchCriteria")("5")Request.Cookies

("SearchCriteria")("4")

Response.Cookies("SearchCriteria")("4")Request.Cookies

("SearchCriteria")("3")

Response.Cookies("SearchCriteria")("3")Request.Cookies

("SearchCriteria")("2")

Response.Cookies("SearchCriteria")("2")Request.Cookies

("SearchCriteria")("1")

Response.Cookies("SearchCriteria")("1") = Request.Form("Search")

End If

%>

Po pierwsze kod upewnia się, czy gość wprowadził nowe kryterium wyszukiwania:

If Len(Request.Form("Search")) > 0 Then

Jeśli tak się stało, każdy cookie przeskakuje o jeden poziom w górę. Czwarte kryterium z listy najczęściej używanych staje się piątym, trzecie czwartym i tak dalej:

Response.Cookies("SearchCriteria")("5")Request.Cookies

("SearchCriteria")("4")

Response.Cookies("SearchCriteria")("4")Request.Cookies

("SearchCriteria")("3")

Response.Cookies("SearchCriteria")("3")Request.Cookies

("SearchCriteria")("2")

Response.Cookies("SearchCriteria")("2")Request.Cookies

("SearchCriteria")("1")   

Następnie nowo wprowadzone kryterium jest dokładane do listy najczęściej używanych:

Response.Cookies("SearchCriteria")("1") = Request.Form("Search")

W formularzu HTML obiekt wyboru Select jest wypełniany tymi znacznikami cookie za każdym razem, kiedy strona jest ładowana:

<SELECT NAME="OldSearch" SIZE=1>

<OPTION VALUE="<% Response.Write

Request.Cookies("SearchCriteria")("1") %>"><% Response.Write

Request.Cookies("SearchCriteria")("1") %>

<OPTION VALUE="<% Response.Write

Request.Cookies("SearchCriteria")("2") %>"><% Response.Write

Request.Cookies("SearchCriteria")("2") %>

<OPTION VALUE="<% Response.Write

Request.Cookies("SearchCriteria")("3") %>"><% Response.Write

Request.Cookies("SearchCriteria")("3") %>

<OPTION VALUE="<% Response.Write

Request.Cookies("SearchCriteria")("4") %>"><% Response.Write

Request.Cookies("SearchCriteria")("4") %>

<OPTION VALUE="<% Response.Write

Request.Cookies("SearchCriteria")("5") %>"><% Response.Write

Request.Cookies("SearchCriteria")("5") %>

</SELECT>

Znacznik cookie będzie jednak obecny tylko przez czas, w którym odwiedzający jest połączony z twoją witryną. Aby znacznik pozostał dłużej na systemie gościa, musisz określić poprzez właściwość Expires odpowiednią datę i czas (lub jedną z tych wartości) ważności cookie. Składnia jest właściwość Expires następująca:

Response.Cookies("NameOfCookie").Expires = Data

Data określa moment upłynięcia ważności cookie. NameOfCookie jest nazwą tego znacznika, dla którego chcesz ustalić datę ważności. W naszym przykładzie kod wyglądałby tak:

Response.Cookies("SearchCriteria").Expires = "5/1/2005"

Istnieją trzy inne właściwości cookie, które możesz określić: Domain Path i Secure. Możesz ograniczyć wysyłanie cookie do jednej tylko nazwy domeny przy użyciu właściwości Domain. Jeśli więc napisałbyś taki kod:

Response.Cookies("SearchCriteria").Domain = "whatever.com"

to przekazywanie cookies zostałoby ograniczone jedynie do domeny whatever.com. Możemy pójść dalej i ograniczyć cookie do wyszczególnionej ścieżki katalogu wykorzystując właściwość Path. Jeśli chcielibyśmy ograniczyć przesyłanie cookie do katalogu o nazwie Docs, kod byłby taki:

Response.Cookies("SearchCriteria").Path = "/docs/"

Ostatnią właściwością zbioru Cookies, którą należy omówić jest Secure. Ta boole'owska właściwość zapamiętuje, czy cookie został bezpiecznie przesłany bądź otrzymany. Kod jest następujący:

Response.Cookies("SearchCriteria").Secure = FALSE

Właściwości obiektu Response

Właściwości obiektu pozwalają na kontrolę sposobów wysyłania danych do przeglądarki odwiedzającego. Właściwości zostały omówione poniżej, a podsumowano je w tabeli 6.2.

Tabela 6.2. Właściwości obiektu Response

Właściwość

Przeznaczenie

Buffer

Właściwość boole'owska określająca czy wyjście ASP jest wysłane zaraz po pojawieniu się, czy jako blok.

CacheControl

Używana do wskazania informacji dotyczących buforowania dla serwerów proxy.

Charset

Używana do ustalenia typu znaków, który jest dołączany do nagłówka typu zawartości.

ContentType

Określa nagłówek typu zawartości, który ustala typ danych zwracanych, na przykład HTML, obraz.

Expires

Okres ważności buforowanej strony w minutach.

ExpiresAbsolute

Określona data i czas (lub jedno z nich) upłynięcia okresu ważności buforowanej strony.

IsClientConnected

Właściwość boole'owska sprawdzająca, czy klient w dalszym ciągu jest połączony z witryną.

PICS

Dołącza pola etykiety PICS do zwracanych nagłówków.

Status

Nagłówek wiersza stanu zwracany do przeglądarki.

Właściwość Buffer

Właściwość Buffer jest boole'owską właściwością, określającą czy wyjście strony ASP jest wysyłane na bieżąco podczas uruchamiania, czy jest zapamiętywane dopóki cały kod nie będzie kompletny lub nie zostanie wywołana metoda Flush. Używając właściwości Buffer, musisz to zrobić przed wpisaniem jakiejkolwiek informacji do przeglądarki.

Jak stwierdzono wcześniej, jest to właściwość boole'owska, co oznacza, że może przyjmować dwie wartości: prawdę (True) i fałsz (False). Spójrzmy na dwa przykładowe bloki kodów różniących się między sobą ustawieniem właściwości Buffer. Pierwszy kod jest buforowany.

<%

Option Explicit

Response.Buffer = True

Response.Write "Zapytanie uruchomione."

Dim conn

Dim RSTotalSales

set conn = server.createobject ("adodb.connection")

conn.open "Sales", "sa", "YourPassword"

set RSTotalSales = conn.Execute("select Sum(TotalAmount) as

TotalSales " _

& "from Sales")

Response.Write RSTotalSales("TotalAmount")

%>

Scenariuszem tego bloku kodu jest prezentowanie strony ukazującej całkowitą kwotę sprzedaży dla wszystkich rekordów w tabeli bazy danych. Szacowany czas zapytania będzie wynosił 20 sekund. Bufor jest włączony. Kiedy więc kod dojdzie do tego wiersza:

Response.Write "Zapytanie uruchomione..."

tekst jest umieszczany w buforze i nie jest wysyłany do przeglądarki. Kod jest kontynuowany i 20 sekund później jego działanie jest zakończone. Tekst Zapytanie uruchomione., jak również wynik zapytania są w tym momencie wysyłane do przeglądarki.

Teraz zwróć uwagę na działanie tego bloku kodowego:

<%

Option Explicit

Response.Buffer = False

Response.Write "Zapytanie uruchomione."

Dim conn

Dim RSTotalSales

set conn = server.createobject ("adodb.connection")

conn.open "Sales", "sa", "YourPassword"

set RSTotalSales = conn.Execute("select Sum(TotalAmount) as

TotalSales " _

& "from Sales")

Response.Write RSTotalSales("TotalAmount")

%>

Kiedy kod dojdzie do wiersza:

Response.Write "Zapytanie uruchomione..."

tekst natychmiastowo wysłany jest do przeglądarki. teraz więc goście otrzymują informację o tym, że coś się dzieje w czasie ich oczekiwania na zakończenie działania zapytania. Ta technika udzielania gościom stopniowego sprzężenia zwrotnego jest bardzo ważna przy procedurach, których czas działania zajmuje więcej niż kilka sekund. Bez takiego sprzężenia, szczególnie w Internecie, goście mogliby stwierdzić, że coś poszło nie tak i opuszczą twoją witrynę.

Właściwość CacheControl

Wielu użytkowników uzyskuje dostęp do Internetu poprzez serwer proxy. Przekazują oni swe żądanie przez przeglądarkę, która następnie wysyła je do serwera proxy, pełniącego rolę 'lejka' dla wielu komputerów wysyłających żądania do Internetu. Jedną z rzeczy przechowywanych przez proxy jest podręczna pamięć stron, do których dostępu żądali jego użytkownicy. Zamiast więc wyszukiwać wielokrotnie tą samą stronę w Internecie, proxy jedynie zwraca buforowaną stronę tej osobie, która wystosowała żądanie.

Działa to zazwyczaj dobrze, gdy masz do czynienia ze statycznymi stronami HTML, chociaż przy dynamicznych stronach ASP często nie będziesz chciał ich buforować. Właściwość CacheControl jest sposobem na poinstruowanie serwera proxy o tym, czy zastosować buforowanie. Kod musi występować przed HTML-em, a jego forma jest następująca:

Response.CacheControl = "Public"

lub

Response.CacheControl = "Private"

Domyślnym ustawieniem właściwości jest Private, co oznacza, że zawartość nie powinna być buforowana. Jeśli chcesz buforować tekst twojej strony ASP, po prostu ustal dla właściwości wartość Public

Właściwość Charset

Właściwość Charset pozwala na modyfikację parametru o tej samej nazwie w nagłówku typu zawartości. Kod ma następującą składnię:

Response.Charset = "CharSetValue"

CharSetValue reprezentuje nazwę zestawu znaków, którego chcesz użyć. Jeśli użyjesz więcej niż jednego wiersza kodu modyfikującego właściwość Charset, tylko ostatnia wartość będzie zastosowana. Ponieważ wiersz kodu modyfikuje nagłówek, musi on poprzedzać HTML wysyłany do przeglądarki.

Właściwość ContentType

Kiedy odsyłasz zawartość do przeglądarki, bez względu na to czy jest to HTML czy twój kod, określasz typ zawartości, który informuje przeglądarkę i rodzaju zwracanych danych. Wysyłasz HTML, obrazek, wideo, audio? O tym poinformuje przeglądarkę właśnie typ zawartości.

Możesz ustawić tą wartość w kodzie używając właściwości ContentType. Jeśli na przykład chciałbyś zaznaczyć, że wysyłałeś HTML, kod wyglądałby tak:

Response.ContentType = "text/HTML"

Jeśli chciałbyś zasygnalizować wysłanie obrazu gif, kod byłby taki:

Response.ContentType = "image/GIF"

Domyślną wartością dla tej właściwości jest text/HTML. Pierwsza część wartości określa typ, a druga podtyp zawartości. Tabela 6.3. wyszczególnia główne typy.

Tabela 6.3. Typy zawartości

Typ

Definicja

Application

Nieokreślona informacja binarna.

Audio

Przesyłane dane obejmują format audio.

Image

Transmitowana jest grafika, zazwyczaj plik gif lub jpeg.

Message

Treść wiadomości.

Multipart

Dane przesyłane łączą w sobie różne typy.

Text

Wysyłany jest sam tekst, zwykły lub HTML.

Video

Przesyłane dane mają format video, taki jak avi lub mpeg.

Właściwość Expires

Przeglądarka odwiedzającego zawiera pamięć podręczną, która jest obszarem pamięci systemu gościa przechowującym poprzednio przeglądane strony. Pozwala to gościom na przegląd danej strony WWW bez konieczności ponownego jej ładowania pod warunkiem, że się nie zmieniła.

Przy stronach HTML zazwyczaj działa to świetnie - strona znajduje się w buforze dopóki nie musi być uaktualniona, a wtedy ładowana jest ponownie. Jednak przy stronach ASP będziesz potrzebował lepszej kontroli nad czasem pozostawania strony w podręcznej pamięci gościa przed jej bezpośrednim uaktualnieniem na twoim serwerze. Jednym ze sposobów na zrealizowanie tego zadania jest właściwość Expires ustalająca czas w minutach, podczas którego strona będzie dostępna w podręcznej pamięci odwiedzającego.

Właściwość ma następującą składnię:

Response.Expires = NumMinutes

gdzie NumMinutes określa ilość minut buforowania strony.

Za przykład weźmy prosty przykład kodu:

<%

Response.Expires = 2

Response.Write Now

%>

Wynik wykonania kodu prezentuje rysunek 6.4.

Rysunek 6.4. Wyjście kodu używającego właściwości Expires

Kod wpisuje do przeglądarki aktualne wartości daty i godziny systemu operacyjnego serwera. Zauważ jednak, że wartość właściwości Expires wynosi 2. Jeśli gość zamknie przeglądarkę i powróci do strony wciągu dwóch minut, zobaczy dokładnie tą samą datę i godzinę. Jeśli powróci do strony po czasie większym niż dwie minuty, strona będzie uaktualniona.

W ten sposób właściwość ustala zakres czasu, który musi upłynąć zanim strona będzie uaktualniona, chyba że gość naciśnie przycisk Odśwież (Refresh) swojej przeglądarki. Ten typ kodu jest użyteczny w sytuacjach, kiedy masz stronę, która jest częściej wywoływana niż zmieniana. Twoja strona może być buforowana przez czas tylu minut, w którym jej zawartość będzie poprawna.

Właściwość ExpiresAbsolute

Kolejną metodą definiowania czasu buforowania strony jest właściwość ExpiresAbsolute, która umożliwia ustalenie granicznej daty lub godziny (lub obu tych wartości) poprawności strony, w następującej formie:

Response.ExpiresAbsolute = "5/14/2004 14:13"

Poprawne użycie tej właściwości może zaoszczędzić serwerowi niepotrzebnego zajmowania pasma oraz zbędnego przetwarzania wysyłanej strony w sytuacjach, kiedy strona jest zmieniana raz na jakiś czas. Na przykład twoja witryna może mieć stronę z prognozą pogody. Tak strona może się zmieniać tylko jeden raz dziennie. Jeśli odwiedzający powróci na stronę w ciągu tego samego dnia, nie zajdzie potrzeba ponownego wysyłania strony. Może ona znajdować się po prostu w pamięci podręcznej.

Albo powiedzmy, że dysponujesz stroną zawierającą listę zajęć, która jest uaktualniana co piątek. Jeśli ktoś przeglądał stronę w poniedziałek, nie będziesz chciał aby serwer wysyłał mu tą stronę ponownie w przeciągu całego tygodnia aż do piątku. Aby rozwiązać ten problem, mógłbyś stworzyć następujący kod:

<%

Option Explicit

Dim TheExpireDate

If WeekDay(Date) = 1 then

TheExpireDate = DateAdd("d", 5, Date)

ElseIf WeekDay(Date) = 2 then

TheExpireDate = DateAdd("d", 4, Date)

ElseIf WeekDay(Date) = 3 then

TheExpireDate = DateAdd("d", 3, Date)

ElseIf WeekDay(Date) = 4 then

TheExpireDate = DateAdd("d", 2, Date)

ElseIf WeekDay(Date) = 5 then

TheExpireDate = DateAdd("d", 1, Date)

ElseIf WeekDay(Date) = 6 then

TheExpireDate = DateAdd("d", 7, Date)

Else

TheExpireDate = DateAdd("d", 6, Date)

End If

Response.ExpiresAbsolute = TheExpireDate

%>

Na wstępie korzystamy z dyrektywy Option Explicit, która informuje kompilator o tym, że zamierzamy deklarować wszystkie nasze zmienne:

Option Explicit

Następnie deklarujemy zmienną TheExpireDate, która zapamiętuje datę upłynięcia ważności strony:

Dim TheExpireDate

Pamiętaj, że strona z listą zajęć jest uaktualniana w każdy piątek, skoro więc aktualną datą jest niedziela, strona utraci ważność za pięć dni:

If WeekDay(Date) = 1 then

TheExpireDate = DateAdd("d", 5, Date)

Jeśli poniedziałek, strona straci ważność za cztery dni:

ElseIf WeekDay(Date) = 2 then

TheExpireDate = DateAdd("d", 4, Date)

Jeśli aktualnym dniem jest wtorek, brakuje trzech dni do piątku:

ElseIf WeekDay(Date) = 3 then

TheExpireDate = DateAdd("d", 3, Date)

W środę należy dodać dwa dni do aktualnego dnia:

ElseIf WeekDay(Date) = 4 then

TheExpireDate = DateAdd("d", 2, Date)

Dodajemy jeden dzień, jeśli aktualnym dniem w systemie jest czwartek:

ElseIf WeekDay(Date) = 5 then

TheExpireDate = DateAdd("d", 1, Date)

W piątek strona pozostanie aktualna przez cały tydzień:

ElseIf WeekDay(Date) = 6 then

TheExpireDate = DateAdd("d", 7, Date)

Aby została wykonany warunek instrukcji Else, musi być sobota. Dodajemy więc sześć dni:

Else

TheExpireDate = DateAdd("d", 6, Date)

Następnie kod używa zmiennej TheExpireDate w celu ustawienia właściwości ExpiresAbsolute

Response.ExpiresAbsolute = TheExpireDate

Właściwość IsClientConnected

Właściwość IsClientConnected informuje o tym, czy gość w dalszym ciągu jest połączony z twoją witryną. Ta właściwość boole'owska, przeznaczona jedynie do odczytu, zwraca prawdę lub fałsz. Jeśli wartością zwracaną jest prawda, gość cały czas jest połączony. Jeśli wartością jest fałsz, gość opuścił twoją stronę.

Właściwość zazwyczaj używana jest w instrukcji If w ten sposób:

If Response.IsClientConnected = True then

Pamiętaj jednak, że instrukcja If oblicza wyrażenie, tak więc wystarczy napisać:

If Response.IsClientConnected then

Możesz użyć tej właściwości w stronach o kodzie, którego uruchomienie może zająć więcej niż kilka sekund. Jeśli gość opuści stronę podczas działania kodu, jego działanie powinno być wstrzymane w celu oszczędzenia zasobów serwera. Spójrz na ten blok kodowy:

<%

Option Explicit

Dim conn

Dim RSTotals

Response.Buffer = False

set conn = server.createobject ("adodb.connection")

conn.open "Sales", "sa", "yourpassword"

set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales99")

response.write RSTotals("TotalSales") & "<P>"

If Response.IsClientConnected Then

set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales98")

response.write RSTotals("TotalSales") & "<P>"

If Response.IsClientConnected Then

set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales97")

response.write RSTotals("TotalSales") & "<P>"

End If

End If

%>

Na początku deklaracja pary zmiennych przy użyciu dyrektywy Option Explicit

Option Explicit

Dim conn

Dim RSTotals

Scenariusz strony jest następujący: chcemy uruchomić kilka zapytań, a każde z nich zajmie trochę czasu, tak więc nie chcemy, aby strona była buforowana. Chcielibyśmy, aby goście widzieli wynik każdego zapytania w chwili ich pojawiania się, buforowanie jest więc wyłączone:

Response.Buffer = False

Następnie łączymy się z bazą danych i uruchamiamy zapytanie:

set conn = server.createobject ("adodb.connection")

conn.open "Sales", "sa", "yourpassword"

set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales99")

Wtedy kod wysyła wynik zapytania do przeglądarki:

response.write RSTotals("TotalSales") & "<P>"

Dalej musimy się upewnić, czy gość w dalszym ciągu jest połączony, ponieważ nie chcemy uruchamiać następnego zapytania, jeśli opuścił on stronę:

If Response.IsClientConnected Then

Jeśli gość jest połączony, uruchamiane jest kolejne zapytanie, a jego wynik wpisywany jest do przeglądarki:

set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales98")

response.write RSTotals("TotalSales") & "<P>"

W końcu kod sprawdza, czy gość jest połączony ze stroną przed uruchomieniem ostatniego zapytania:

If Response.IsClientConnected Then

set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales97")

response.write RSTotals("TotalSales") & "<P>"

Właściwość PICS

Właściwość PICS umożliwia dodanie etykiety PICS do nagłówka odpowiedzi. Właściwość ma następującą składnię:

Response.PICS = Wartość

gdzie Wartość reprezentuje tekst etykiety PICS, którą chcesz dodać.

Ogólnie rzecz biorąc etykiety PICS używane są do określenia wartości znamionowej pod kątem zawartości. Niektóre przeglądarki i niezależne narzędzia dodatkowe wyszukują taki znacznik w celu określenia, czy wyświetlić stronę filtrując ją na podstawie informacji pochodzących od gościa, jak to jest w wypadku rodzicielskiej kontroli zawartości stron.

Użyłbyś ten znacznik na stronie ASP, która miałaby zmienną zawartość w zależności od twojego kodu. Aby dowiedzieć się nieco więcej o systemach wskaźników, możesz odwiedzić stronę Recreational Software Advisory Council (https://www.rsac.org).

Właściwość Status

Ostatnią właściwością obiektu Response jest Status, która pozwala na ustalenie wartości zwracanego nagłówka stanu. Mógłbyś na przykład użyć takiego kodu, aby przeglądarka myślała, że strona nie została znaleziona:

Response.Status = 404

Ten kod wytworzy wyjście pokazane na rysunku 6.5. Może to być użyteczne w okolicznościach dynamicznego tworzenia warunku, który w rzeczywistości nie jest prawdziwy. Ustawienie stanu może być również użyteczne podczas debuggingu w celu stwierdzenia co się stanie, jeśli wystąpi określony stan.

Rysunek 6.5. Wynik ustawienia wartości statusu 404 widziany w przeglądarce Internet Explorer 5

Metody obiektu Response

Metody obiektu Response zostały omówione poniżej, a podsumowano je w tabeli 6.4.

Tabela 6.4. Metody obiektu Response

Metoda

Definicja

AddHeader

Pozwala na dodanie własnego, dostosowanego nagłówka do odpowiedzi.

AppendToLog

Ta metoda zapewnia możliwość wpisania informacji do dziennika zdarzeń systemu NT.

BinaryWrite

Metoda używana do wysyłania informacji nietekstowych do przeglądarki.

Clear

Usuwa dowolne buforowane wyjście.

End

Zatrzymuje dowolne przetwarzanie kodu strony ASP.

Flush

Wysyła zawartość bufora do przeglądarki.

Redirect

Odsyła przeglądarkę do innej strony.

Write

Wysyła tekst do przeglądarki.

Metoda AddHeader

Możesz użyć metody AddHeader aby dodać do wyjścia strony HTML swój własny, dostosowany do własnych potrzeb nagłówek. Metoda przyjmuje następującą formę:

Response.AddHeader NameOfHeader, ValueOfHeader

NameOfHeader jest nazwą, którą chcesz użyć dla nagłówka, a ValueOfHeader jest wartością wysyłaną do nagłówka. Ponieważ metoda ta wpisuje treść do nagłówka HTTP, musi występować przed każdym wyjściem HTML. Na przykład kod:

Response.AddHeader "StorageValue", "Red63"

stworzy pozycję nagłówka o nazwie StorageValue i wartości Red63

Metoda AppendToLog

Bardzo poręczna metoda AppendToLog pozwala na dodanie tekstu do dziennika zdarzeń serwera WWW dla określonego żądania. Tekst może mieć do 80 znaków i nie mogą znaleźć się w nim przecinki. Metoda ma następującą formę:

Response.AppendToLog Text2Add

Text2Add jest zmienną zawierającą tekst, który chcesz dodać do dziennika zdarzeń. Aby skorzystać z tej funkcji, musisz włączyć rejestrację dla tej witryny, w której strona jest ulokowana. Możesz to zrobić poprzez Konsolę zarządzania Microsoftu wybierając Witrynę WWW (Web Site), a następnie klikając ją prawym przyciskiem i zaznaczając Właściwości (Properties). Przejdź do zakładki Witryna WWW (Web Site), a wtedy ukaże się dialog pokazany na rysunku 6.6. Upewnij się czy zaznaczyłeś kratkę Włącz rejestrację (Enable Logging).

Rysunek 6.6. Właściwości witryny WWW

Gdybyś napisał taki kod:

Response.AppendToLog "mymessage"

to w dzienniku zdarzeń formatu W3C znalazłaby się następująca pozycja:

1999-08-14 16:27:40 207.66.52.164 - W3SVC3 NETSTATS2000

204.238.18.144 GET

/aspbook/c6/logtry.asp mymessage 200 0 429 382 47088 80 HTTP/1.1

Mozilla/4.0+(compatible;+MSIE+5.0;+Windows+98;+DigExt)

Login=FAVCAT=Music&USERNAME=Dave+Smith;

+NSCookie=207%2E66%2E52%2E130%3A8%2F14%2F99+9%3A45%3A50+AM;

+ASPSESSIONIDQGQQQQPF=GACBAFHAFIIOKEDDDBPAMJHJ -

Zauważ, że dodany do dziennika tekst znajduje się w środku tej pozycji i jest pogrubiony. Poza tym zwróć uwagę na to, że tekst pojawi się tylko w pozycji dziennika odnoszącej się do tej określonej strony.

Metoda BinaryWrite

Metoda BinaryWrite umożliwia wysyłanie nietekstowych, binarnych informacji do przeglądarki. Metoda ma następującą formę:

Response.BinaryWrite DateToWrite

Zmienna DataToWrite zawiera informację binarną, którą chcesz wysłać do przeglądarki. Zazwyczaj wysyła się przeglądarce zamiast tekstu dane - obrazki lub dźwięk.

Bardzo ciekawym sposobem wykorzystania tej funkcji jest możliwość umieszczenia znacznika ASP jako źródła obrazka w standardowej stronie HTML.

Za przykład weźmy witrynę WWW posiadającą stronę pogodową podobną do tej pokazanej na rysunku 6.7. Ta prosta strona stworzona została na bazie HTML-a:

<HMTL>

<HEAD>

<TITLE>Pogoda</TITLE>

</HEAD>

<BODY>

<P>Dzisiejsza pogoda:<P>

<IMG SRC="./mount71.gif">

</BODY>

</HTML>

Rysunek 6.7. Strona z pogodą

Znacznik obrazka zawiera zdjęcie reprezentujące aktualną pogodę. Znacznik ten mógłby być wyjściem strony ASP, jeśli zmieniłbyś źródło obrazka w następujący sposób:

<IMG SRC="./weatherpict.asp">

Wtedy w stronie weatherpict.asp użyłbyś metody BinaryWrite, aby zwrócić binarną reprezentację wyświetlanego obrazka w stronie HTML. Kod takiej strony ASP mógłby wyglądać w ten sposób:

<%

Option Explicit

Dim conn

Dim RSWeather

Dim ThePicture

set conn = server.createobject ("adodb.connection")

conn.open "Pogoda", "sa", "yourpassword"

set RSWeather = conn.Execute("select PathToCurrentWeather from

WeatherCond" _

& "where WheatherDate = '" & Date & "'")

response.contenttype = "image/gif"

set ObjBin = server.createobject("bin.binary")

ThePicture = ObjBinReadFile(RSWeather("PathToCurrentWeather"))

response.binarywrite(ThePicture)

set ObjBin = Nothing

%>

Po pierwsze informujemy przeglądarkę o zamiarze deklarowania wszystkich naszych zmiennych:

Option Explicit

Następnie deklarowana jest para zmiennych bazy danych:

Dim conn

Dim RSWeather

Potem deklarowana jest zmienna, która będzie zapamiętywała binarne dane obrazka:

Dim ThePicture

Kod bazy danych wyszukuje obrazek reprezentujący aktualny stan pogodowy:

set conn = server.createobject ("adodb.connection")

conn.open "Pogoda", "sa", "yourpassword"

set RSWeather = conn.Execute("select PathToCurrentWeather from

WeatherCond" _

& "where WheatherDate = '" & Date & "'")

Domyślnie zwracana jest strona HTML. Strona ta wyświetli obrazek pokazujący warunki pogodowe, tak więc typ zawartości musi być ustawiony w taki sposób, aby odzwierciedlał wartość zwracaną:

response.contenttype = "image/gif"

Następnie używamy jednego z wielu dostępnych na rynku niezależnych obiektów sterujących, pozwalającego otworzyć plik binarny:

set ObjBin = server.createobject("bin.binary")

ThePicture = ObjBinReadFile(RSWeather("PathToCurrentWeather"))

W końcu plik binarny jest wpisywany do przeglądarki przy użyciu metody BinaryWrite obiektu Response

response.binarywrite(ThePicture)

Metoda Clear

Metoda Clear opróżnia bufor. Ponieważ metoda ta obsługuje bufor, musisz mieć włączoną właściwość Buffer, w przeciwnym razie wystąpi błąd. Metoda ma następującą składnię:

Response.Clear

Spójrz na ten kod:

<%

Response.Buffer = True

Response.Write "Hello"

Response.Write " World!"

%>

Ten kod wysyła tekst "Hello World!" do przeglądarki. Ten kod:

<%

Response.Buffer = True

Response.Write "Hello"

Response.Clear

Response.Write " World!"

%>

wpisze do przeglądarki jedynie "World!". Tekst "Hello" był w buforze, kiedy ten został opróżniony.

Teraz zwróć uwagę na ten kod:

<%

Response.Write "Hello"

Response.Clear

Response.Write " World!"

%>

Ten kod wywoła stan błędu, ponieważ bufor nie był włączony.

Metoda End

Metoda End obiektu Response nakazuje kompilatorowi zatrzymanie przetwarzania kodu. Przybiera ona następującą formę:

Response.End

Wiemy, że kod użyty w poprzednim podrozdziale:

<%

Response.Write "Hello"

Response.Write " World!"

%>

wpisze do przeglądarki tekst "Hello World!". Ale taki kod:

<%

Response.Write "Hello"

Response.End

Response.Write " World!"

%>

wyświetli w przeglądarce jedynie tekst "Hello"

Jeśli korzystasz z buforowania wyjścia, zawartość bufora wysyłana jest do przeglądarki w chwili wywołania metody End. Metody tej używa się zazwyczaj w instrukcji If. Sprawdzasz jakiś warunek, a jeśli zostanie on spełniony - kończysz przetwarzanie. Na przykład podczas dodawania rekordu pracownika do tabeli możesz sprawdzać czy pewne pola są obecne lub czy mają określony typ. Jeśli nie, generujesz wiadomość o błędzie, która jest wyświetlana odwiedzającemu i zatrzymujesz przetwarzanie.

Metoda Flush

W tym rozdziale przyjrzeliśmy się właściwościom kontrolującym czas wysyłania i jakość danych wysyłanych do przeglądarki. Zwróciliśmy uwagę na właściwość Buffer, która pozwala przetrzymywać dane przed wysłaniem ich do przeglądarki; metodę Clear opróżniającą bufor; ponadto metodę End wstrzymującą dalsze przetwarzanie kodu.

Jeszcze jedna metoda pozwala na kontrolę zachowania wyjścia: metoda Flush, która natychmiastowo wysyła dowolne buforowane wyjście do przeglądarki. Ponieważ metoda ta opróżnia bufor, wywoła ona stan błędu, jeśli bufor będzie wyłączony. Metoda ma następującą składnię:

Response.Flush

Dzięki połączeniu właściwości Buffer i metody Flush możesz sprawować kompletną kontrolę nad tym, w którym momencie różne wyniki kodów są wysyłane do przeglądarki.

Powiedzmy, że masz stronę wytwarzającą serie raportów w postaci tabel HTML, których treść oparta jest na wynikach zapytań działających w bazie z danymi o sprzedaży. Taka strona mogłaby mieć wygląd podobny do tego pokazanego na rysunku 6.8. Strona ładuje się 30 sekund. Każdy kolejny rok sprzedaży zajmuje 15 sekund, a każdy miesiąc kolejnych kilka sekund. Zdecydowałeś, aby pokazywać gościowi dane każdego roku po przetworzeniu ich jako pojedynczej jednostki. Możesz zrealizować to zadanie ustawiając dla właściwości Buffer wartość True. Następnie po kodzie każdego roku możesz zastosować metodę Flush w celu natychmiastowego wysłania tych danych do przeglądarki.

Rysunek 6.8. Raport sprzedaży

Metoda Redirect

Metoda Redirect wysyła przeglądarkę do innej strony w celu otrzymania odpowiedzi. Metoda ma następującą formę:

Response.Redirect URL

W tym przypadku URL oznacza adres strony, do której przeglądarka jest odsyłana.

Metoda ta jest użyteczna w wielu rozmaitych przypadkach. Głównym przeznaczeniem metody jest przetworzenie żądania w jakiś sposób, a następnie wysłanie osoby do innej strony, czasami nie będącej stroną ASP.

Przykładowo możesz dysponować katalogiem wyświetlającym informacje o twoich produktach, ich cenę, opis itd. Możesz mieć przycisk, przez który goście wysyłaliby zamówienie na dany produkt do strony ASP. Strona zawierałaby również ikonę ze zdjęciem produktu. Taka strona pokazana jest na rysunku 6.9. Kiedy goście kliknęliby ikonę produktu, zobaczyliby większy jego obraz. Zazwyczaj taka ikona jest łączem do obrazka. Jednak dla informacji marketingowych być może będziesz chciał obserwować, jaka liczba gości żąda dostępu do większego obrazka produktu.

Rysunek 6.9. Przykład katalogu produktów

Możesz to zrobić łącząc się ze stroną ASP, która zapamiętywałaby żądania w bazie danych, a następnie readresowałaby gości do większego obrazka produktu.

Kolejnym częstym przykładem zastosowania metody Redirectpaski reklamowe (banery), które są obrazami umieszczanymi w witrynie w celu reklamowania jakiejś innej witryny. Kiedy goście klikną baner, zostaną przeniesieni na witrynę reklamowaną na pasku. Liczba gości, którzy kliknęli baner jest bardzo ważna, ponieważ często używana jest ona do określenia opłaty za reklamę.

Prawdopodobnie chciałbyś mieć stronę ASP pomiędzy banerem a witryną reklamującego się. Kiedy goście klikną baner, żądanie zostanie wysłane do strony ASP, która zapamięta to działanie. Następnie kod strony ASP readresuje gościa do strony reklamodawcy.

Metoda Write

Metoda Write (często używaną w ostatnich kilku rozdziałach) jest metodą, z której najprawdopodobniej będziesz korzystał najczęściej. Umożliwia ona zwracanie do przeglądarki danych niebinarnych.

Metoda przyjmuje następującą formę:

Response.Write Text2Write

gdzie Text2Write jest tekstem, który chcesz wysłać do przeglądarki. Na przykład ten wiersz kodu:

Response.Write "Hello World!"

wyśle do przeglądarki tekst "Hello World!" w tym miejscu, gdzie kod został napisany. Możesz wypisywać teksty, daty, liczby itd.

Możesz również wbudować HTML w tekst wysyłany przy użyciu metody Write

Response.Write "<B>Hello World!</B>"

Ten wiersz kodu wypisze tekst "Hello World!" wraz ze znacznikami pogrubienia HTML.

Czasami musisz wstawić cudzysłów do ciągu znaków, który wysyłasz do przeglądarki. Możesz to zrobić w taki sposób:

Response.Write "Bob mówi, ""Hello World!"""

Podwójny cudzysłów oznacza, że chcesz umieścić cudzysłów w cudzysłowie.

Obiekt Response w działaniu

W tym podrozdziale zwrócimy uwagę na kilka przykładów użycia metod, właściwości i zbioru obiektu Response, dzięki którym możesz stworzyć programy usługowe, gotowe do zastosowania od razu. Pierwszym przykładem będzie dodanie obiektu wyboru do strony głównej, którego goście mogliby używać w celu szybkiego odnajdywania ścieżki do najbardziej popularnych stron witryny.

Następnie rzucimy okiem na narzędzie implementujące pasek zaawansowania, który jest podobny do paska w diagramie, ale wskazuje postęp w wykonywaniu zadania. Narzędzie to będzie wykorzystywało buforowanie.

Ponadto zwrócimy uwagę na stronę pozwalającą gościom zapamiętywać ich osobiste preferencje przeszukiwania witryny. Zbiór Cookies używany jest do zapamiętywania ulubionych kolorów i czcionek, a metoda Write - do dostosowania widoku strony.

Przypis

Ten podrozdział zawiera w swojej treści pewne obiekty i metody, które nie były jeszcze omówione. Użyto ich jednak tutaj, aby przykłady były kompletne.

Readresowanie i obiekt wyboru

W tej przykładowej witrynie, strona główna zawiera standardowe łącza nawigacyjne z głównymi obszarami witryny. Oprócz tego zawiera też obiekt sterujący Select, który goście wykorzystać mogą do przeglądu najpopularniejszych stron witryny. Witryna wykorzystuje metodę Redirect podczas odsyłania gości do strony wybranej w obiekcie sterującym. Używa ona również metody Write w celu wypełnienia obiektu. Strona główna pokazana jest na rysunku 6.10.

Rysunek 6.10. Strona główna wykorzystująca readresowanie przy użyciu obiektu wyboru

Obiekt sterujący Select, który wyświetla listę najpopularniejszych stron witryny WWW, zawiera informacje o stronach i ich lokalizacji wzięte z tabeli bazy danych. Goście wybierają stronę z listy, a następnie, kiedy nacisną przycisk Go, są do niej przenoszeni. Jedna z pozycji na liście to strona transakcji miesiąca. Kiedy zostanie ona wybrana z listy, a gość naciśnie przycisk Go, zostanie przeniesiony do strony, która została pokazana na rysunku 6.11.

Rysunek 6.11. Strona transakcji miesiąca ukazująca się po wybraniu jej w obiekcie wyboru

Obiekt Select jest wypełniany z tabeli bazy danych SQL Servera. Tabela zawiera nazwy stron wyświetlanych w obiekcie oraz adresy URL w postaci wartości przekazywanych obiektowi.

Wyszczególnienie pól tabeli bazy danych prezentuje tabela 6.5.

Tabela 6.5. Pola tabeli C6Redirect

Nazwa pola

Typ pola

Długość

PageName

varchar

PageUrl

varchar

Pole PageName zapamiętuje nazwę strony wyświetlany w obiekcie wyboru. Pole PageUrl przechowuje położenie tej strony.

Kod strony głównej wyszukuje dane z tabeli C6Redirect

<%

Option Explicit

Dim conn

Dim RSMostPopular

set conn = server.createobject ("adodb.connection")

conn.open "ASPBook", "sa", "yourpassword"

set RSMostPopular = conn.Execute("select * from C6Redirect")

%>

Na początku kod informuje kompilator o zamiarze deklarowania wszystkich naszych zmiennych:

Option Explicit

Następnie deklarowane są dwie zmienne, które wykorzystamy do łączenia się z bazą oraz wyszukiwania potrzebnych danych:

Dim conn

Dim RSMostPopular

Teraz kod łączy się z bazą danych i wyszukuje informacje o najpopularniejszych stronach:

set conn = server.createobject ("adodb.connection")

conn.open "ASPBook", "sa", "yourpassword"

set RSMostPopular = conn.Execute("select * from C6Redirect")

Wyszukane w bazie dane są wykorzystywane w drugim bloku kodu tworzącym obiekt sterujący Select.

<SELECT NAME="RedirectTo">

<%

Do Until RSMostPopular.EOF

%>

<OPTION VALUE="<% response.write RSMostPopular("PageURL") %>">

<% response.write RSMostPopular("PageName") %></OPTION>

<%

RSMostPopular.MoveNext

Loop

%>

</SELECT>

Obiekt Select wywołuje pole RedirectTo

<SELECT NAME="RedirectTo">

Następnie kod uruchamia pętlę przechodzącą przez wszystkie rekordy tabeli najpopularniejszych stron:

<%

Do Until RSMostPopular.EOF

%>

Metoda Write obiektu Response używana jest przy dodawaniu opcji do obiektu wyboru. Zauważ, że metoda Write występuje w jednym wierszu z HTML-em. Poza tym zwróć uwagę na to, że dokonujemy dwóch wpisów dla jednego rekordu: pierwszy zapamiętuje wewnętrzną wartość opcji - stronę, do której odsyłany jest gość po dokonaniu wyboru; drugi wpis zawiera prezentowaną nazwę strony:

<OPTION VALUE="<% response.write RSMostPopular("PageURL") %>">

<% response.write RSMostPopular("PageName") %></OPTION>

Następnie kod przechodzi do kolejnego rekordu:

<%

RSMostPopular.MoveNext

Loop

%>

Tabela 6.6. ukazuje przykładowe rekordy, które mogą zostać umieszczone w tabeli bazy. Rekordy z tabeli 6.6. wytworzą następujący HTML:

<SELECT NAME="RedirectTo">

<OPTION VALUE="./clearance.asp ">Sprzedaż</OPTION>

<OPTION VALUE="./deal_of_the_month.html">Transakcja miesiąca</OPTION>

<OPTION VALUE="../index.html">Numery telefonów</OPTION>

<OPTION VALUE="mailto:jsmith@whatever.com">E-mail</OPTION>

</SELECT>

Tabela 6.6. Przykładowe rekordy tabeli C6Redirect

Strona

Definicja

Sprzedaż

./clearance.asp

Transakcja miesiąca

./deal_of_the_month.html

Numery telefonu

../index.html

E-mail

mailto:jsmith@whatever.com

Zwróć uwagę na pozycję E-mail, która funkcjonuje jak łącze pocztowe i otwiera nową wiadomość zaadresowaną według wartości pola.

Kiedy gość naciśnie przycisk Go, formularz jest przesyłany do strony redirectcombo.asp, jak to określono w znaczniku Form

<FORM NAME="LAYOUTFORM" ACTION="./redirectcombo.asp" METHOD=POST>

Kod tej strony readresuje gościa według wystosowanego żądania:

<%

If not isempty(Request.Form("RedirectTo")) Then

Response.Redirect Request.Form("RedirectTo")

else

Response.Redirect "../index.html"

End If

%>

Wstępnie powyższy kod upewnia się, czy pole RedirectTo było przesłane wraz z formularzem:

If not isempty(Request.Form("RedirectTo")) Then

Jeśli tak, goście są odsyłani do adresu URL określonego w polu RedirectTo

Response.Redirect Request.Form("RedirectTo")

W przeciwnym razie wprowadzili oni tą stronę w sposób nie pozwalający na dostęp do niej, są więc odsyłani do strony głównej:

Response.Redirect "../index.html"

Pasek zaawansowania

Ta przykładowa strona pokazuje jak stworzyć pasek zaawansowania, który stanowiłby wizualny sygnał postępu w wykonywaniu jakiegoś zadania. Narzędzie wykorzystuje metodę Write w celu sterowania wyjściem HTML. Włącza również funkcję buforowania i przy użyciu metody Flush dokładnie kontroluje czas ukazywania się wyjścia.

Kiedy goście wejdą na stronę, zobaczą widok pokazany na rysunku 6.12. Następnie strona rozpoczyna swój długi proces tworzenia raportu. Pasek zaawansowania wskazuje jak daleko posunął się proces, jak to pokazano na rysunku 6.13.

Rysunek 6.12. Pasek zaawansowania w początkowym stanie

Rysunek 6.13. Pasek zaawansowania w połowie procesu

Pasek zaawansowania pokazuje odwiedzającemu, że strona cały czas pracuje aż do chwili, gdy proces się nie zakończy, a wtedy ukaże się wynik prezentowany na rysunku 6.14.

Rysunek 6.14. Pasek zaawansowania w całości

Do stworzenia paska zaawansowania kod wykorzystuje opóźnienia czasowe symulujące działanie kodu podczas tworzenia raportu. Pierwszy blok kodu jest następujący:

<%

Option Explicit

Response.Buffer = True

Dim DelayTime

%>

Po pierwsze informujemy kompilator o deklarowaniu zmiennych:

Option Explicit

Następnie włączamy bufor, ponieważ będziemy używać metody Flush

Response.Buffer = True

Tworzona jest również zmienna przechowująca czas opóźnienia potrzebny do symulacji długości procesu:

Dim DelayTime

Kolejny blok kodowy kreśli pasek zaawansowania:

<%

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 10

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 5

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 16

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 1

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 1

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 1

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

DelayTime = Second(Time) + 1

If DelayTime > 59 Then

DelayTime = DelayTime - 60

End If

Do Until Second(Time) = DelayTime

Loop

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Flush

%>

Na wstępie używamy tutaj metody Write w celu umieszczenia paska zaawansowania o pierwotnej długości, aby nasz gość widział jakiś postęp w procesie już od samego początku.

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Zauważ, że metoda Write jest wpisana w znacznik obrazka HTML. Poza tym zastosowano tu podwójny cudzysłów, co oznacza, że jeden cudzysłów znajduje się w drugim.

Ten znacznik HTML jest następnie wyprowadzany z bufora:

Response.Flush

Dalej, w celu symulacji dziesięciosekundowego opóźnienia, wyszukiwana jest ilość sekund w aktualnym czasie, a do tej wartości dodawane jest 10:

DelayTime = Second(Time) + 10

Z powodu dodania wartości 10 do liczby sekund, ich ilość może przekroczyć 59, musimy to sprawdzić:

If DelayTime > 59 Then

Jeśli liczba przekroczy 59, odejmowana jest wartość 60 w celu przywrócenia odpowiedniego zakresu sekund:

DelayTime = DelayTime - 60

Kod opóźnia swe działanie, aby zademonstrować użycie paska zaawansowania:

Do Until Second(Time) = DelayTime

Loop

Następnie obrazki określające postęp procesu są wpisywane do bufora podczas wykonywania tej części kodu:

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Później bufor zostaje opróżniony i powyższe wiersze kodu są wysyłane do przeglądarki:

Response.Flush

Proces powtarza się podczas całego okresu wykonywania zadania, aż do jego ukończenia. Tak jak widać w bloku kodu, różnym jego fragmentom przekazywane są różne wielkości obrazka postępu. Powinieneś zastosować ten typ uzupełniania długości paska w twoim bloku kodowym. Pomyśl o tym, jaki czas zajmie wykonanie danego zadania i zastosuj odpowiednią szybkość postępowania paska, porównując ten całkowity okres z czasami wykonania poszczególnych bloków.

Strona preferencji

Strona preferencji pokazuje w jaki sposób możesz zapamiętać ulubiony wygląd twojej witryny wybrany przez gości, którym umożliwiono ustalenie czcionek i kolorów strony. Kiedy wracają na witrynę, jej widok oparty jest na ich własnych preferencjach.

Strona używa zbioru Cookies do zapamiętania i wyszukania preferencji gości. W celu wyświetlenia zawartości strony w formacie wymaganym przez odwiedzającego, wykorzystywana jest metoda Write

Podczas pierwszych odwiedzin strony, goście widzą domyślny schemat kolorów ukazany na rysunku 6.15.

Rysunek 6.15. Strona preferencji, widok początkowy

Goście mogą wybrać własny układ kolorów i czcionek. Kiedy nacisną przycisk Zapisz, ich preferencje są zapamiętywane, a strona przybiera wybrany przez nich wygląd, jak to pokazano na rysunku 6.16.

Rysunek 6.16. Strona preferencji po dokonaniu przez gościa pożądanych zmian w widoku

Ponieważ preferencje zapamiętywane są w cookie, podczas następnych odwiedzin goście ujrzą widok strony oparty na ich wyborze. Jeśli znacznik cookie zniknął lub goście odwiedzają stronę przy użyciu innego systemu, ujrzą jej pierwotny widok z początkowym schematem kolorów.

Kod strony zapamiętuje i wyszukuje wartości znacznika cookie. Określa, czy formularz został przesłany i podejmuje odpowiednie działanie w oparciu o warunek. Kod formatuje również samą stronę, bazując na wyborze dokonanym przez gościa. Główny blok kodowy przedstawia się następująco:

<%

Option Explicit

Dim BackgroundColor

Dim LargeFontColor

Dim SmallFontColor

Dim LargeFont

Dim SmallFont

If IsEmpty(Request.Form("Save")) Then

If not len(Request.Cookies("Prefs")("BackgroundColor")) > 0 Then

Response.Cookies("Prefs")("BackgroundColor") = "#FFFFFF"

BackgroundColor = "#FFFFFF"

Response.Cookies("Prefs")("LargeFontColor") = "#000000"

LargeFontColor = "#000000"

Response.Cookies("Prefs")("SmallFontColor") = "#000000"

SmallFontColor = "#000000"

Response.Cookies("Prefs")("LargeFont") = "Arial,Helvetica,Univers,Zurich BT"

LargeFont = "Arial,Helvetica,Univers,Zurich BT"

Response.Cookies("Prefs")("SmallFont") = "Times New Roman,Times,Times NewRoman"

SmallFont = "Times New Roman,Times,Times NewRoman"

Response.Cookies("Prefs").Expires = "2/2/2002"

Else

BackgroundColor =Request.Cookies("Prefs")("BackgroundColor")

LargeFontColor = Request.Cookies("Prefs")("LargeFontColor")

SmallFontColor = Request.Cookies("Prefs")("SmallFontColor")

LargeFont = Request.Cookies("Prefs")("LargeFont")

SmallFont = Request.Cookies("Prefs")("SmallFont")

End If

else

Response.Cookies("Prefs")("BackgroundColor") = Request.Form("BackgroundColor")

BackgroundColor = Request.Form("BackgroundColor")

Response.Cookies("Prefs")("LargeFontColor") = Request.Form("LargeFontColor")

LargeFontColor = Request.Form("LargeFontColor")

Response.Cookies("Prefs")("SmallFontColor") = Request.Form("SmallFontColor")

SmallFontColor = Request.Form("SmallFontColor")

Response.Cookies("Prefs")("LargeFont") = Request.Form("LargeFont")

LargeFont = Request.Form("LargeFont")

Response.Cookies("Prefs")("SmallFont") = Request.Form("SmallFont")

SmallFont = Request.Form("SmallFont")

Response.Cookies("Prefs").Expires = "2/2/2002"

end if   

%>

Kod informuje kompilator o zamiarze deklarowania zmiennych:

Option Explicit

Następnie deklarowane są zmienne zapamiętujące preferencje gościa lub preferencje domyślne:

Dim BackgroundColor

Dim LargeFontColor

Dim SmallFontColor

Dim LargeFont

Dim SmallFont

Później określany jest stan. Jeśli przycisk Zapisz (Save) nie został naciśnięty, formularz nie jest przesyłany:

If IsEmpty(Request.Form("Save")) Then

Oznacza to, że mamy w tym miejscu pierwotny widok strony. Następnie kod sprawdza, czy gość dysponuje znacznikiem cookie z zapisanymi w nim preferencjami, a robi to poprzez funkcję Len, testującą długość jednego z podkluczy znacznika:

If not len(Request.Cookies("Prefs")("BackgroundColor")) > 0 Then

Jeśli cookie nie zostaje znaleziony, tworzony jest nowy znacznik zapamiętujący domyślne ustawienia w systemie gościa:

Response.Cookies("Prefs")("BackgroundColor") = "#FFFFFF"

Następnie w zmiennej używanej do modyfikacji strony ustawiana jest domyślna preferencja:

BackgroundColor = "#FFFFFF"

Ta sama metoda jest używana do zapamiętania wszystkich innych preferencji:

Response.Cookies("Prefs")("LargeFontColor") = "#000000"

LargeFontColor = "#000000"

Response.Cookies("Prefs")("SmallFontColor") = "#000000"

SmallFontColor = "#000000"

Response.Cookies("Prefs")("LargeFont")

"Arial,Helvetica,Univers,Zurich BT"

LargeFont = "Arial,Helvetica,Univers,Zurich BT"

Response.Cookies("Prefs")("SmallFont") = "Times New Roman,Times,

Times NewRoman"

SmallFont = "Times New Roman,Times,Times NewRoman"

Następnie ustalana jest data ważności dla cookie:

Response.Cookies("Prefs").Expires = "2/2/2002"

Przejście kodu do części Else instrukcji If drugiego poziomu oznacza, że goście właśnie weszli na stronę, ale odwiedzali ją już wcześniej. Mają więc cookie z preferencjami i ten znacznik używany jest do ustawienia zmiennych wykorzystywanych podczas definiowania widoku strony:

BackgroundColor =Request.Cookies("Prefs")("BackgroundColor")

LargeFontColor = Request.Cookies("Prefs")("LargeFontColor")

SmallFontColor = Request.Cookies("Prefs")("SmallFontColor")

LargeFont = Request.Cookies("Prefs")("LargeFont")

SmallFont = Request.Cookies("Prefs")("SmallFont")   

Część Else głównej instrukcji If jest wykonywana, gdy spełniony będzie warunek przesłania formularza. W tym przypadku przesłane wartości są wykorzystane do ponownego wypełnienia cookie:

Response.Cookies("Prefs")("BackgroundColor") = Request.Form("BackgroundColor")

Ustawiany jest również bieżący widok strony na podstawie domyślnych preferencji:

BackgroundColor = Request.Form("BackgroundColor")

To samo z innymi preferencjami:

Response.Cookies("Prefs")("LargeFontColor") = Request.Form("LargeFontColor")

LargeFontColor = Request.Form("LargeFontColor")

Response.Cookies("Prefs")("SmallFontColor") = Request.Form("SmallFontColor")

SmallFontColor = Request.Form("SmallFontColor")

Response.Cookies("Prefs")("LargeFont") = Request.Form("LargeFont")

LargeFont = Request.Form("LargeFont")

Response.Cookies("Prefs")("SmallFont") = Request.Form("SmallFont")

SmallFont = Request.Form("SmallFont")

Ustalana jest też data ważności cookie:

Response.Cookies("Prefs").Expires = "2/2/2002"

W wierszu HTML strona może zostać sformatowana zgodnie z domyślnymi preferencjami lub preferencjami gościa. Na przykład poniższy wiersz kodu ustala kolor tła:

<BODY BGCOLOR="<% Response.Write BackgroundColor %>">

A ten wiersz kodu ustawia czcionkę i kolor dla jednego z wierszy tekstu:

<FONT FACE="<% Response.Write LargeFont %>" Color="

<% Response.Write LargeFontColor %>">


Document Info


Accesari: 1833
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )