550 likes | 827 Views
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета. Технологии разработки Internet -приложений. ASP приложения.
E N D
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Технологии разработки Internet-приложений ASP приложения ASP представляет собой среду написания сценариев на стороне сервера, которую можно использовать для динамического изменения Web-содержимого. ДонНУ, кафедра КТ, проф. В. К. Толстых
Модель Active Server Pages Когда клиент запрашивает ASP-файл, то сервер переправляет файл обработчику ASP(C:\WINDOWS\System32\inetsrv\asp.dll), где весь код сценария выполняется на стороне сервера и преобразуетсяв HTML-код. Затем полученный HTML-код отправляется Web-клиенту. Свойства IIS 5 Необходимо отключить блокировку скриптов антивирусными средствами
Создание ASP-страницыПример 1 • Языком сценариев по умолчанию для создания ASP-страниц является VBScript. Можно использовать JScript, JavaScript, PerlScript … • Указанием на необходимость обработки сервером ASP-сценариев является расширение файла *.asp • Знак процента с угловыми скобками используется в качестве ограничителя текста сценария. • Сценарии в требуемых местах вставляются в HTML-коды. <%@ Language=JavaScript %> <font face="MS Gothic"> <%//Созданиепеременной: var str; //Установка приветствия: str = "Привет всем!"; //Вывод приветствия через объект Response: Response.Write(str + "<BR>"); //или иначе — с использованием метода <%= :%><%=str%> </font>
Создание ASP-страницыПример 2 <%@ Language=JavaScript %> <html><body> <font face="MS Gothic"> <%var str; //Установка начальных значений переменных:str= "КУПИТЕ МОЙ ПРОДУКТ!"; // Вывод строки 4 раза с помощью цикла For:for (i = 2; i < 6; i++) { %> <center> <font size= <%= i %>> <%= str %> </font> </br><% } %> </font></body></html>
Пример 2 Располагаем сценарий (файл testfor.asp) в корне локального Web-сервера и открываем его браузером http://localhost/testfor.asp
Включение других файлов Можно выносить какой-либо код в отдельный файл, и подключать его к другим файлам по мере необходимости с помощью команды include. Это очень удобно, если вы хотите вынести повторяющийся код в отдельный файл и использовать снова и снова в разных страницах: <!-- #include file="headers\filename.inc" --> <!-- #includevirtual= " /global/filename.inc" --> Важно: все includes в тексте отрабатываются до исполнения файла. Относительный путь к файлу в подкаталоге headers Файл находится в виртуальном каталоге global Файл global.asa global.asa – необязательный файл, он если он есть, то является стартовой точкой ASP- приложения. Он может содержать следующие обработчики событий для всего приложения и сессий клиентов: Application_OnStart Application_OnEnd Session_OnStart Session_OnEnd
Встроенные объекты ASP Некоторые внешние объекты ASP Установка новых объектов: копирование dll-файла в каталог сервера, регистрация библиотеки с помощью программы regsvr32.exe.
ОбъектResponse используется для передачи выходной информации клиенту Response.семейство|свойство|метод Семейство: Свойства:
ПродолжениеОбъектResponse Свойства(продолжение):
ПродолжениеОбъектResponse Методы:
ОбъектRequest извлекает значения, которые обозреватель клиента передает серверу во время HTTP-запроса Request[.семейство|свойство|метод](переменная) Семейства: Свойство: TotalBytesТолько для чтения; указывает общее число байт, передаваемых клиентом в теле запроса. Метод: BinaryReadИзвлекает данные, передаваемые клиентом серверу, как часть запроса POST
ПродолжениеОбъектRequest • Можно обратиться непосредственно ко всем переменным вызовом • Request(переменная) • без указания имени семейства. В этом случае Web-сервер ищет в семействах в следующем порядке: • QueryString • Form • Cookies • ClientCertificate • ServerVariables • Если переменные с одинаковыми именами существуют в нескольких семействах, объект Request возвращает первый обнаруженный экземпляр.Рекомендуется использовать полные имена при обращении к членам семейств.
СемействоRequest.Form(name) Чтение параметровname, переданных методомPOST Пример, файл Button.asp: <%@ Language=JavaScript %> <html><body> <H3> Опыт в программировании </H3> <% var strChoice; strChoice=String(Request.Form("choice")); if (strChoice == "undefined") { %> <form name="F1" method="POST" action="button.asp"> <input type="radio" name="choice" value="менее 1 года">менее 1 года<br> <input type="radio" name="choice" value="от 1 года до 5лет">от 1 года до 5лет<br> <input type="radio" name="choice" value="более 5 лет">более 5 лет<br> <input type="submit" name="B1" value="Отправить"> </form> String – преобразование к строке, undefined – значение неопределенного параметра, String(undefined) = "undefined"
Продолжение файла Button.asp <% } else { Response.Write("<P>Был сделан выбор: <B>"+strChoice+"</B></P>") } %> </body></html>
СемействоRequest.QueryString(name) Чтение параметров name, переданных методомGET Пример, файл GetParams.html: <html> <body> <H3> Передача параметров методом GET </H3> <A href="http://localhost/Params.asp?one=GET%20parameter">Передать параметр</A> </body> </html>
ПродолжениеRequest.QueryString(name) Пример, файл Params.asp: <%@ Language=JavaScript %> <html><body> <H3> Передан параметр методом GET: </H3> <% Response.Write("one="+Request.QueryString("one"));%> </body></html>
Коллекция Response.Cookies Устанавливает значения для Сookie. Если указанный Сookie не существует, то создает его. Если Сookie существует, то перезаписывает. Response.Cookies(имя)(ключ).аттрибуты = значение ключ(необязательный параметр) создает в куки (контейнер Cookies) множество пар значений ключ_N= значение_N. аттрибуты– это информация о куки (необязательный параметр): DomainЕсли указан, то куки передаются только по запросу из этого домена. Path Если указан, то куки передаются только по запросу с этого пути, иначе – используется путь ко всему приложению. Expires Дата истечения срока действия куки. Дата должна быть установлена для записи куки на клиентский жесткий диск после окончания сессии (закрытия браузера). Если этот атрибут не установлен, то дата окончания срока действия куки принимается текущей датойи куки прекратят срок действия сразу же по окончании сессии. HasKeysУказывает, содержит ли данный куки ключи. Secure Указывает, защищены ли будут куки или нет. Значение – то, чтонеобходимо присвоить данному ключу или атрибуту, если нет ни того, ни другого, то значение получит имя куки.
Примеры Cookies • <% Response.Cookies("mycookie")("type1") = "сахар" Response.Cookies("mycookie")("type2") = "печенье"%> • – будет создан следующий заголовок куки: • => Set-Cookie:MYCOOKIE=TYPE1=сахар&TYPE2=печенье • Если далее присвоить mycookieзначение без ключей, то это разрушит type1 и type2 –ключи, например, • <% Response.Cookies("myCookie") = "шоколадный зефир" %> • =>Set-Cookie:MYCOOKIE= шоколадный зефир • Можно проверить существование ключей следующим способом: • <%= "Есть ли ключи? – " + Response.Cookies("myCookie").HasKeys %> • Если будет выведено true, значит ключи у myCookie существуют. • Пример установки даты истечения срока действия куки: • <% Response.Cookies("myCookie").Expires= "5,10,2008" %>
Коллекция Request.Cookies Используется для чтения данных Cookie • Например, чтение значения имени куки: • <% var name=Request.Cookies("mycookie"); • Response.Write(“Mycookie=" + name) %> Записываем клиенту коллекциюкуки по имени userс ключами, содержащими информацию о некоторомuser: <% Response.Cookies("user")("firstname")="John" Response.Cookies("user")("lastname")="Smith" Response.Cookies("user")("country")="Norway" Response.Cookies("user")("age")="25" Response.Cookies("firstname")="Alex" %> Далее, в последующем запросе, читаем всю информацию из куки, установленных у клиента:
Чтение установленных Cookies <%@ Language=VBScript %> <html><body> <% dim x,y for each x in Request.Cookies Response.Write("<p>") if Request.Cookies(x).HasKeys then for each y in Request.Cookies(x) Response.Write("<b>" & x & ":</b>" & y & "=" & Request.Cookies(x)(y)) Response.Write("<br />") next else Response.Write(x & "=" & Request.Cookies(x) & "<br />") end if Response.Write "</p>" next %> </body></html> Переменные: x – имя куки, y – имя ключа Вывод значений куки с ключами Вывод значений куки без ключей
Объект Server Обеспечивает доступ к методам и свойствам сервера Server.свойство|метод Свойство: ScriptTimeout время, в течении которого скрипт может выполняться. Методы: CreateObject(progID)создает экземпляр компонента сервера. Execute(Path)вызывает .asp файл и выполняет его как если бы файл был частью ASP скрипта. GetLastError() метод возвращает ASPError Object,описывающий, условия произошедшей ошибки.
ОбъектServer Методы: HTMLEncode(string) – выполняет HTML-кодирование указанной строки. URLEncode(string) – выполняет кодирование указанной строки по правилам URL. MapPath(Path) – возвращает физический путьв файловой системе сервера для указанного виртуального адреса. Например, Server.MapPath("test.asp") –получаем в виде c:\inetpub\wwwroot\script\test.asp Transfer(Path)– метод переадресации запросовIIS.методпосылает всю информацию, которая была собрана для обработки одним .asp файлом в другой .asp файл – Path, текущего приложения. Состояние всех встроенных объектов будет включено в передачу.Кроме того, все текущее содержание для коллекций запроса будет доступно .asp файлу, получающему передачу. Этот метод действует как эффективная замена функции Response.Redirect для запроса различных страниц. Функция Transfer(), позволяет избежать дополнительного обращения к Web-клиенту и обратно к Web-серверу,который в этом случае должен будет обработать дополнительный запрос.
ОбъектServerпример создания объекта AdRotator – автоматически меняющиеся баннеры Файл AdRotator.asp <%@ LANGUAGE = JScript %> <HTML> <HEAD><TITLE>AdRotator Sample</TITLE></HEAD> <BODY> … <% var objAd; objAd = Server.CreateObject("MSWC.AdRotator"); Response.Write(adrotator.GetAdvertisement("\\PR\\adrot.txt")); %> </BODY> </HTML> Взять баннеры из подкаталога PR в файле adrot.txt
ПродолжениеОбъектServerОбъект AdRotator Файл adrot.txt WIDTH 210 HEIGHT 140 BORDER 0 * /PR/favorites/0001.gif http://www.donnu.edu.ua Донецький національний університет, вибране 100 /PR/favorites/0002.gif http://www.donnu.edu.ua Донецький національний університет, вибране 100 /PR/favorites/0003.gif http://www.donnu.edu.ua Донецький національний університет, вибране 100
ОбъектServerпример использования метода Execute() для вызова исполнения .asp-файла 1asp.asp <HTML><BODY> <% Response.Write("Вызываю 2asp.asp <BR>") Server.Execute("2asp.asp")%> </BODY></HTML> 2asp.asp <HTML><BODY> <% Response.Write("Я файл 2asp.asp")%> </BODY></HTML>
ОбъектServerпример использования метода Transfer() Файл 1.asp <%@LANGUAGE = JScript%> <HTML><BODY> <% Response.Write("SessionIDиз файла 1.asp " + Session.SessionID); Response.Write("<BR>"); Response.Write(«Пересылка SessionID в 2.asp <BR>") Server.Transfer("2.asp") %> </BODY></HTML> Файл 2.asp <%@LANGUAGE = JScript%> <HTML><BODY> <% Response.Write("IDSession из 1.asp " + Session.SessionID); %> </BODY></HTML>
ПродолжениеОбъектServerметода Transfer
Работа с файлами Если на сервере установлены библиотеки дополнительных компонент, то их можно использовать в ASP. Стандартные объекты для работы с файловой системой, например FileSystemObject, TextStream из библиотеки Scripting, доступны всегда. Установкановых объектов: ▪ копирование dll-файла в каталог сервера – Windows/System32▪ регистрация библиотеки с помощью программы regsvr32.exe или др., например, COM+. • УстановкаNTFS-разрешений на запись в файлы (локальная машина): • через меню Windows Explorer включить доступ к управлению безопасностью: Сервис – Свойства папки… – Вид – Использовать простой общий доступ к файлам – снять флаг, • для необходимого файла в его свойствах выбрать появившуюся закладку Безопасность, далее выбрать имя пользователя от которого вы работаете, или – Гостевую учётную запись, и поставить флаги на Чтение и Запись. Полный доступ не рекомендуем, т.к. в корпоративных сетях могут появиться и выполняться вирусы.
Объект FileSystemObjectи его методы • CreateTextFile(FileName[,overwrite[,code]])– создает файл и возвращает объект TextStream, с помощью которого читают или пишут в файл • FileName– имя файла • Overwite– может ли файл быть перезаписан (true/false) • code– кодировка: true - Unicode • OpenTextFile(FileName[,Iomode[,Create[,Format]]])– открывает файл и возвращает объект TextStream • Iomode– открыть файл для чтения(1), записи(2), обновления(8) • Create– создавать ли новый файл, если файла с таким FileName нет • Format– формат файла (ASCII, UNICODE) • Close()– закрывает файл, связанный с объектом TextStream • DeleteFile(FileName)– удаляет файл • FileExists(FileName)– возвращает true, если файл существует • GetFileName(FilePath)– возвращает имя файла • FilePath– путь к файлу, относительный или полный • GetFileVersion(FilePath) – возвращает номер версии файла
Объект TextStreamи его свойства • AtEndOfLine– возвращает true, если файловый указатель находится перед маркером окончания файла для чтения. • AtEndOfStream – возвращает trueесли файловый указатель находится в конце файла для чтение. • Column– возвращает номер текущей позиции указателя в файле. • Line– возвращает номер текущей строки в файле. После того, как файл открыт и еще ничего не записано, Lineравно 1.
Объект TextStreamи его методы Read(i)– читает iколичество символов из файла ReadAll()– читает весь файл ReadLine()– читает строку из файла Skip(i)– пропускает iколичество символов при чтении файла SkipLine()– пропускает строку при чтении файла Write(“string”)– записывает символы string в файл WriteBlankLines(i)– записывает i пустых строк в файл WriteLine([“string”])– записывает строкуstringв файл (с концом строки)
Работа с файлом. Пример 1 <%@ Language=JavaScript %> <html> <body> <H2>Запись/чтение в файл RW/rw_test.txt</h2> <% // получение текущей даты var d, s = "Последняя дата обращения к файлу: "; d = new Date(); //создаем объект s += d.getDate() + "/"; //получаем день s += d.getMonth() + "/"; //получаем месяц s += d.getYear()+ " "; //получаем год // определяем абсолютныйпутьктекущемуфайлу*.asp var abs_path=String(Request.ServerVariables("PATH_TRANSLATED")); // удаляем из абсолютного пути ненужное имя.asp-файлаи// дописываемв него необходимое имяRW/write_text.txt varfile_to_write=abs_path.replace(/\\\w*\.asp/,"\\")+"RW/rw_test.txt";
// создаем объектfдля работы сфайлами f = new ActiveXObject("Scripting.FileSystemObject"); // следующие переменные отвечают, как именно будет открыт файл: // запись, обновление, чтение var ForWriting=2, ForAppending=8, ForReading=1; // еслифайлсуществует if(f.FileExists(file_to_write)) { // открываемфайлв TextStreamс идентификаторомfile дляперезаписи // (для записи в файл должно быть NTFS-разрешение) var file = f.OpenTextFile(file_to_write, ForWriting); // записываем строку текущей даты, комментарий и пустую строку with (file) { WriteLine(s); Write("Запись прошла успешно! "); WriteBlankLines(1); }// закрываем файл file.close(); } else // если файл отсутствует, то выводим сообщение Response.Write("Запись: Файл отсутствует!");
// задаем путьк файлу для чтения (пусть совпадает с прежним) var file_to_read = abs_path.replace(/\\\w*\.asp/,"\\")+"RW/rw_test.txt"; // еслифайлсуществует if(f.FileExists(file_to_write)) { // открываемфайл для чтения file=f.OpenTextFile(file_to_read,ForReading); //читаем и выводим весь файл Response.Write(file.ReadAll()+“<P> Чтение прошло успешно!"); //закрываем файл file.close(); } else // если файл отсутствует, то выдаем сообщение Response.Write("Чтение: Файл отсутствует!"); %> </body></html>
Работа с файлом. Пример 2 Функция чтения строки посимвольно function GetALine(file){ // создаем переменные var fso, a, s = "", ForReading=1; // создаем объект fso = new ActiveXObject("Scripting.FileSystemObject"); // открываем файл для чтения a = fso.OpenTextFile(file, ForReading, false); // читаем строку посимвольно, пока не достигнем конца строки while (!a.AtEndOfLine) s += a.Read(1); a.Close( ); return(s);// возвращаем строку }
Работа с файлом. Пример 3 Функция чтения файла построчно function GetALine(file){ // создаем переменные var fso, a, s = "", ForReading=1; // создаем объект fso = new ActiveXObject("Scripting.FileSystemObject"); // открываем файл для чтения a = fso.OpenTextFile(file, ForReading, false); //читаем файл построчно, пока не достигнем конца файла while (!a.AtEndOfStream); s += a.ReadLine( ); a.Close( ); return(s);// возвращаем строку-файл }
ОбъектApplication Хранит информацию о приложении и глобальных переменных для всех пользователей приложения. • Объект Application может быть использован для предоставления совместного доступа к информации всем пользователям данного приложения. Приложение, использующее ASP, определяется как все файлы .asp, расположенные вприложении IIS, в виртуальном каталоге и всех его подкаталогах. • Все события приложения обрабатываются в файле global.asa, находящимся в корне приложения. Возможные события приложения: • Application_OnStart • Application_OnEnd • Пример использования объекта Applicationв файле global.asa
Характеристики Application Коллекции: Методы:
ОбъектSession Хранит информацию о пользовательской сессии и переменных пользователя. Работа объекта построена на неявном использовании временных cookies • Переменные, хранящиеся в объекте Session не уничтожаются когда пользователь осуществляет переходы между страницами в приложении, а хранятся на протяжении существования сессии с браузером (по умолчанию – не более 20 мин. между запросами браузера). • Web сервер автоматически создает объект Session когда страница приложения востребуется пользователем, который до сих пор не имел сессию. Сервер разрушает объект Session когда время "существования" сессии истекает или же сессия разрушается принудительно. • Данный объект может быть создан только для браузеров, поддерживающих cookies. • ASP позволяет создавать документы, не формирующие объектSession. Для этого нужно использовать директиву: • <%@ EnableSessionState=False %>
Характеристики Session Коллекции: Методы:
Характеристики Session Свойства: События: Все событиясессий и приложения ASP обрабатываются в файле global.asa в корне приложения (см. пример далее).
Пример событий сессии и приложения в файле global.asa Пример учёта посетителей сайта: Файл выполняется на сервере <script language="JScript" runat="server"> function Application_OnStart() { Application("visitors")=0; } function Session_OnStart() { Application.Lock; Application("visitors")=Application("visitors")+1; Application.UnLock; } </script> Инициализация счётчика при старте приложения Временно запретить пользователям изменять переменные приложения Наращивать счётчик при старте каждой сессии Разрешить пользователям далее изменять переменные приложения Просмотр количества посетителей сайта: <p>Посетителей: <%= Application("visitors") %></p>
Электронная почтаВиртуальный SMTP-сервер IIS 5 Для отправки почтовых сообщений из ASP-приложений должен быть установлен (и запущен) виртуальный SMTP-сервер
Виртуальный SMTP-сервер IIS«Сообщения», «Доставка»
Виртуальный SMTP-сервер IIS«Направляющий узел» Для не серверной ОС (неполноценная обработка доменных имен в почтовом адресе отправителя)может понадобиться уточнение IP-адреса реального SMTP-сервера[в квадратных скобках] ,с которым будет связываться ваше ASP-приложение
Электронная почта • Функцииработыспочтовымисообщениямиобеспечиваютсязасчетразличных сторонних библиотек, например,CDONTS (Collaboration Data Objects for Windows NT Server-объекты данных для среды Windows NT Server), AspEmail…ипротокола SMPT. • Для работы с библиотекой необходимо выполнить следующее: • скопировать файл.dll в директорию WINDOWS/SYSTEM32 • Для регистрации библиотеки: Пуск->Выполнить->в поле «Открыть» прописать : “regsvr32.exe C:/WINDOWS/SYSTEM32/файл.dll”
Объекты библиотеки CDONTS для работы с почтой
ОбъектNewMail Объект NewMail обеспечивает наиболее простой способ автоматического формирования сообщения (включая прикрепление вложений, если это необходимо) и их отсылку. Создание экземпляра объекта NewMail (для каждого нового письма нужен новый экземпляр)выполняется с помощью методаServer.CreateObject: Server.CreateObject( идентификатор_программы ), где идентификатор_программы – указывает тип объекта, который будет создан. Формат идентификатора_программы следующий:[владелец] Компонент [.Версия]. Пример: var object = Server.CreateObject(“CDONTS.NewMail”);