Asp объект asperror


Функцию узнающая текущий номер строки скрипта.

01.08.2009, 13:58

Узнать номер строки основного скрипта
У меня есть скрипт index.php Есть скрипт mysql.php, в котором описан класс для работы с MySQL. В.

Рассчитать текущий номер недели этого месяца
Здравствуйте! В мануале нашел номер недели от начала года, и то, если первый день недели -.

Написать функцию, возвращающую номер строки, содержащей минимальное значение числа в массиве
Всем привет! Есть такая вот задачка, которую нужно сделать до завтра -.- : Написать функцию.

Определить номер строки, содержащей положительные числа, и вывести номер строки
В двумерном массиве определить номер строки, содержащих положительные числа и вывести номер строки.

01.08.2009, 18:33 2

можно попробовать так:

Но в VBScript по моему объект Error не поддерживает свойство Erl — номер строки ошибки.

Microsoft Script Debugger(Отладчик сценариев) попробуй.

03.08.2009, 09:00 3

Объект ASPError можно использовать для получения информации об ошибке, которая произошла в сценарии на ASP-странице. Объект ASPError возвращается методом Server.GetLastError. Объект ASPError предоставляет свойства, доступные только для чтения.

Свойства
ASPCode Возвращает код ошибки, сгенерированный IIS
Number Возвращает стандартный код ошибки COM
Source Возвращает исходный текст (если имеется) строки, в которой произошла ошибка
Category Показывает источник ошибки: внутренняя ошибка ASP, язык написания сценариев или объект
File Показывает имя файла .asp, который обрабатывался в момент возникновения ошибки
Line Показывает номер строки в файле .asp, которая вызвала ошибку
Column Показывает номер столбца в файле .asp, который вызвал ошибку
Description Возвращает краткое описание ошибки
ASPDescription Возвращает более подробное описание ошибки, если эта ошибка относится к ASP

Замечания
Когда IIS при компиляции или выполнении файла .asp обнаруживает ошибку, генерируется специальная ошибка 500;100. По умолчанию все веб-узлы и приложения передают обработку специальной ошибки 500;100 стандартному файлу .asp. После генерирования специальной ошибки 500;100 IIS также создаст экземпляр объекта ASPError, который описывает состояние ошибки. Сведения об использовании оснастки IIS для изменения файла .asp для обработки специальной ошибки 500;100 см. в разделе Включение обработки ошибок ASP.

Пример
Приведенный ниже пример, извлеченный из файла 500-100.asp, демонстрирует запись сведений, предоставляемых объектом ASPError.

ASP ASPError Object Properties

ASPCode

The ASPCode property returns an error code generated by IIS.

ASPDescription

The ASPDescription property returns a detailed description of the error.

Category

The Category property returns the source of the error (Was the error generated by IIS? A scripting language? Or a component?).


Column

The Column property returns the column position within the ASP file that generated the error.

Description

The Description property returns a short description of the error.

The File property returns the name of the ASP file that generated the error.

The Line property returns the number of the line within the ASP file that generated the error.

Number

The Number property returns the standard COM error code for the error.

Source

The Source property returns the actual source code of the line where the error occurred.

Syntax

Example

W3SCHOOLS EXAMS

COLOR PICKER

LEARN MORE:

SHARE THIS PAGE

Your Suggestion:

Thank You For Helping Us!

Your message has been sent to W3Schools.

Top 10 Tutorials

Top 10 References

Top 10 Examples


Web Certificates

W3Schools is optimized for learning, testing, and training. Examples might be simplified to improve reading and basic understanding. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using this site, you agree to have read and accepted our terms of use, cookie and privacy policy. Copyright 1999-2020 by Refsnes Data. All Rights Reserved.
Powered by W3.CSS.

Создание ASP-компонентов в Delphi 6

Что такое ASP

SP (Active Server Pages) — технология, которая позволяет создавать Web-страницы, содержащие код, выполняемый Web-сервером, и динамически формировать Web-страницы. Вместе с Microsoft Internet Information Services поставляется несколько COM-объектов, выполняющих серверный код. Современная версия этой технологии позволяет использовать в ASP-страницах произвольные серверные компоненты. Клиентское приложение, использующее ASP-объекты, представляет собой HTML-документ (куда могут также входить клиентский и серверный коды на скриптовых языках), который можно прочесть практически с помощью любого Web-браузера. Обычно эти HTML-документы размещаются на каком-либо Web-сервере (как правило, это Microsoft Internet Information Server версии 3.0 и выше). Web-сервер, получив требование о предоставлении документа, считывает его из локального хранилища и передает клиенту, при этом часть информации вносится в документ Web-сервером динамически; сам же Web-сервер в этом случае может обращаться к ASP-объектам (входящим в комплект поставки Internet Information Server или созданным сторонними разработчиками). Как правило, Web-документы, содержащие обращения к ASP-объектам, имеют расширение *.asp. Примеры подобных документов можно найти в каталогах, создаваемых при установке Internet Information Server.

Ранее (см. Компьютер Пресс, №2’2001, c. 169) мы рассказывали о создании простейших ASP-приложений, в том числе для работы с базами данных. Настоящую публикацию следует рассматривать как продолжение той статьи.

Объекты, используемые в ASP

ерархию объектов, используемых в технологии ASP, можно увидеть на рис. 1.

Объект Request

Объект Request используется для доступа к данным, которые формируются клиентом при обращении к ASP-серверу. Доступ к объекту Request получают с помощью интерфейса IRequest, которому присущи следующие основные свойства и методы:

  • свойство ClientSertificate — содержит значения всех полей клиентного сертификата, которые пересылаются в http-сообщении;
  • свойство Cookies — содержит значения всех заголовков Cookie в HTTP-запросе. Cookie — небольшие текстовые файлы, которые запоминаются на компьютере конечного пользователя и передаются на сервер в каждом запросе. С их помощью можно создать «сессию» для клиента: когда клиент обращается первоначально к одной, затем к другой странице и т.д. (при этом клиент не имеет права перейти к следующей странице, не обратившись к предыдущей);
  • свойство Form — если клиент осуществляет обращение к ASP-серверу с помощью формы, то можно получить значения заполненных полей в форме при обращении к свойству Form с добавлением имени поля;
  • свойство ServerVariables — содержат большинство переменных, необходимых для формирования HTTP-заголовков;
  • свойство TotalBytes — суммарное число байт, которые передаются клиентом на сервер. Реальное число байт может быть меньше, так как протокол HTTP не позволяет пересылать пакеты, размер которых превышает 8 Kбайт;
  • свойство QueryString — содержит имена и значения полей запроса при использовании метода GET;
  • свойство Body — содержит имена и значения полей запроса при использовании метода POST;
  • метод BinaryRead — используется для получения содержимого всего запроса, посылаемого клиентом, если размер запроса превышает 8 Kбайт. Вызов этого метода позволяет получить следующие 8 Kбайт данных HTTP-запроса. Вызов следует повторять до тех пор, пока не будет прочитан весь запрос; при этом размер последнего пакета может быть менее 8 Kбайт. Результаты вызова метода запоминаются в двоичном массиве. Следует обратить внимание на то, что после вызова этого метода нельзя обращаться к свойству Form.

Объект Response

В этом классе формируется отклик ASP-сервера, который передается клиенту. Доступ к этому объекту осуществляется через интерфейс IResponse. Основные свойства и методы данного интерфейса таковы:

  • свойство Cookies — позволяет создать коллекцию параметров вместе с их значениями. К этой коллекции также добавляется время, в течение которого данную коллекцию следует сохранять в клиентском приложении. При успешном получении отклика клиент запоминает эти параметры на диске в виде файла. При следующем обращении к серверу эти данные будут переданы в запросе и их можно будет получить при использовании свойства Request.Cookie. Анализ этих данных позволяет определить, обращался ли клиент к серверу ранее и если обращался, то с какими запросами. Cookie используются для создания «сессии» с клиентом в CGI-приложениях, поскольку IP-адреса клиента могут изменяться Proxy-серверами во время сессии. В ASP-приложениях возможно также создание сессии для клиента (это мы обсудим ниже);
  • свойство Buffer — если значение этого свойства равно True, то осуществляется буферизация отклика. При этом значении параметра отклик клиенту не отправляется до тех пор, пока не будет вызван метод Request.End (этот метод автоматически вызывается после обработки всего ASP-документа, то есть когда сформированы отклики от всех ASP-серверов) или Flush;
  • свойство CacheControl — определяет, может ли клиент кэшировать отклик;
  • свойство Charset — определяет имя шрифта для содержимого отклика ContentType=”text/html”;
  • свойство ContentType — указывает содержимое отклика. По умолчанию это свойство имеет значение text/html. Это значение необходимо изменять, например, при передаче картинок (image/jpeg или image/gif и т.д);
  • свойство Expires — при значении CacheControl=True определяет, сколько времени хранится отклик на клиентском месте;
  • свойство ExpiresAbsolute — то же самое, что Expires, только определяет абсолютную дату и время хранения отклика;
  • свойство IsClientConnected — указывает, был ли клиент отсоединен от сервера;
  • свойство Status — нормальное значение статуса «200 OK» означает успешную генерацию отклика. При невозможности создать отклик следует изменять значение статуса. Так, «401 Unauthorized» означает, что пользователю запрещено обращаться к данной странице по соображениям безопасности, например в случае неправильно введенного пароля;
  • метод AddHeader — добавляет заголовок в отклик. Заголовки добавляются в виде =” ”;
  • метод AppendToLog — добавляет строку в Log-файл Web-сервера. Эта строка не передается клиенту;
  • метод BinaryWrite — формирует двоичный отклик. Чаще всего используется для передачи клиенту картинок;
  • метод Clear — полностью очищает отклик. После этого его требуется формировать заново с самого начала;
  • метод End — прекращает обработку ASP-документа и немедленно возвращает результат клиенту. Вызывается автоматически после завершения обработки ASP-документа, но может быть вызван явно из кода ASP-сервера. После его вызова вызовы методов Write или BinaryWrite запрещены;
  • метод Flush — отправляет текущее содержимое буфера клиенту. Формирование отклика может продолжаться дальше;
  • метод Write — используется для записи текстовой информации в отклик;
  • метод Redirect — позволяет переадресовать запрос на другой URL. При этом можно поменять параметры запроса в объекте Request.
Илон Маск рекомендует:  Что такое код bcsub

Объект Server

Этот объект позволяет обращаться к Internet Information Services и экспонирует ряд его методов и свойств:

  • свойство ScriptTimeout — время в минутах, в течение которого сессия существует без генерации нового запроса или без вызова команды Refresh со стороны клиента;
  • метод CreateObject — вызов этого метода используется для запуска COM-сервера, который будет принимать скрипты с ASP-документа и генерировать отклик, который вставляется вместо скрипта;
  • метод Execute — выполняет скрипт в указанном ASP-файле;
  • метод GetLastError — возвращает объект ASPError, в котором можно получить полную информацию о последней ошибке;
  • метод HTMLEncode — заменяет зарезервированные символы в HTML-документе подходящим набором символов, которые интерпретируются браузером и позволяют клиенту увидеть на экране зарезервированные символы. Например, дизайнер Web-сайта хочет, чтобы клиент увидел на экране следующее сочетание символов:
    . Если эту последовательность вставить в HTML-документ, то она будет интерпретирована как разрыв строки. Для этой последовательности символов метод HTMLEncode вернет: %3CBR%3E. При помещении этой последовательности символов в HTML-документ клиент увидит на экране
    ;
  • метод MapPath — конвертирует путь, выраженный в терминах виртуальных каталогов (абсолютный или относительный), в путь к физическому каталогу на данном компьютере;
  • метод Transfer — пересылает весь текущий отклик к другому ASP-серверу для продолжения формирования отклика;
  • метод URLEncode — перекодирует URL, включая специальные символы, в строку.

Объект Session


Этот объект создается во время первого обращения клиента к ASP-серверу. Замечательная особенность этого объекта — его способность сохраняется в течение некоторого времени после генерации отклика клиенту. Если в течение этого времени клиент вновь обратится к серверу, то сможет работать внутри ранее созданной сессии. Если внутри этого объекта объявить переменные, то в них можно запоминать состояние клиента. Этот факт значительно облегчает проведение сессий с клиентом по сравнению с CGI-приложениями, где постоянно приходится анализировать Cookie. Основные свойства и методы объекта Session:

  • свойство StaticObjects — коллекция всех объектов, добавленных к сессии при помощи тэга . Можно прочитать или изменить все значения свойств этих объектов. Вызов метода Remove удаляет данный объект. Вызов метода RemoveAll удаляет все объекты;
  • свойство Contents — коллекция всех динамически создаваемых объектов. Эти объекты можно создавать во время выполнения и использовать их при последующих обращениях клиентов к Web-серверу;
  • свойство CodePage — указывает страницу кодировки символов, которая может изменяться в зависимости от локальных настроек;
  • свойство LCID — языковой идентификатор, используемый для интерпретации текстовых строк;
  • свойство SessionID — идентификатор сессии для данного клиента. Генерируется автоматически и является постоянным для всех запросов данного клиента;
  • свойство Timeout — время в минутах, в течение которого существует сессия без генерации нового запроса или без вызова команды Refresh со стороны клиента;
  • метод Abandon — разрушает сессию и возвращает все ресурсы;
  • событие Session_OnStart — генерируется в момент создания сессии. Оно генерируется после события Application_OnStart, но до начала выполнения кода. Все переменные в сессии уже являются доступными, и к ним можно обращаться. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
  • событие Session_OnEnd — наступает перед разрушением сессии по истечении времени TimeOut или после вызова метода Abandon. В обработчике событий можно работать с объектами Application, Server и Session, но не с Request и Response. Обработчик этого события должен быть написан на языке VBScript или JavaScript.

Для сохранения состояния клиента (это главная особенность) используется следующий синтаксис:

Рассмотрим в качестве примера Интернет-магазин. Предположим, пользователь на первой Web-странице выбирает наименование товара (например, Intel Processor), на второй странице — количество этого товара (например, 5), на третьей странице отображается цена, после чего ожидается подтверждение заказа. Ясно, что для генерации третьей страницы необходимо знать значения параметров с первых двух страниц. Поэтому после возвращения отклика с первой страницы используется команда:

Session.Value[‘GoodName’]:=’ Intel Processor ‘;

Имя выбранного товара можно получить после анализа свойств объекта Request. После второй страницы используем команду:

Перед генерацией третьей страницы можно узнать имя товара и, следовательно, цену за единицу продукции, а также количество единиц товара. Далее посредством простых арифметических операций вычисляется общая стоимость, и клиенту предлагается сделать заказ.

В объекте Session можно также запоминать динамически создаваемые объекты (об этом будет рассказано ниже).

Объект Application

Этот объект используется для хранения и обработки данных, которые являются общими для всех сессий. При помощи объекта Application можно передавать данные от одного клиента к другому. Основные свойства и методы объекта Application:

  • свойство Contents – содержит список всех объектов, которые были добавлены при выполнении скриптов из ASP-документов. Объект Contents имеет два метода: Remove удаляет данный объект, а RemoveAll удаляет все объекты. Сюда же можно помещать ссылки на динамически создаваемые объекты при выполнении кода ASP-сервера;
  • свойство StaticObjects — список всех объектов, которые были добавлены при помощи тэга ;
  • метод Lock. Клиенты работают в многопоточном режиме, а переменные в объекте Application являются общими для всех клиентов. Поэтому если надо обратиться к свойствам объекта Application или к методам, которые работают с переменными данного объекта, то обязательно требуется вызов метода Lock. Это дает возможность безопасно работать с переменными Application, в то время как остальные клиенты будут ожидать окончания работы с этим объектом. После чтения или записи свойства (либо окончания работы метода) требуется вызов метода Unlock, и только после этого переменные (методы) будут доступны для других клиентов;
  • метод Unlock — делает доступными переменные или методы объекта Application другим клиентам;
  • событие Appliation_OnStart — наступает в момент первого старта приложения и продолжается до создания сессии. Из обработчика этого события можно обращаться только к объектам Server и Application. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
  • событие Application_OnEnd — вызывается в момент завершения ASP-приложения, после разрушения всех сессий. Доступные объекты и языки для описания обработчика те же, что и у обработчика Application_OnStart.

Использование объекта Session для хранения состояния

втоматическая обработка полей Cookie в ASP-технологии позволяет определить, обращался ли ранее клиент к данному Web-серверу. При первом обращении клиента для него создается объект Session. При последующих обращениях этого же клиента для него назначается ранее созданный объект Session. Объект Session разрушается либо при отсутствии в течение интервала времени Session.TimeOut новых запросов от клиентов, либо при вызове метода Session.Abandon из кода. В объекте Session можно хранить переменные и объекты, которые динамически создаются или изменяются. Эти изменения видны при каждом последующем обращении клиента. Таким образом, объект Session может хранить состояние клиента. Данная возможность, реализованная на уровне технологии, обеспечивает ASP-приложениям существенные преимущества по сравнению с CGI- и ISAPI-приложениями, где для хранения состояния необходимо писать трудоемкий код для работы с Cookie.

Для тестирования прежде всего требуется настроить Microsoft Internet Information Services (IIS). Для этого создадим виртуальную директорию IIS, которая обязательно должна иметь разрешение как на чтение (из нее будут читаться данные), так и на выполнениe скриптов (из нее будет загружен *.asp-документ). Директория должна быть доступна с помощью протокола HTTP. Поэтому в первую очередь нужно обратиться к Web-сервису Internet Information Server, просмотреть список доступных директорий и при необходимости создать новые с соответствующими правами доступа.

В нашем примере на компьютере, который имеет IP-адрес 192.168.0.2, была создана виртуальная директория /Test, соответствующая физическому адресу на компьютере C:\ASPTest. В директорию, имеющую права доступа Read и Script, был скопирован файл Test.asp. Сам файл ASP01.dll (COM-сервер) можно поместить в произвольную директорию. Главное — чтобы он был зарегистрирован в системном реестре. Для этого после выполнения команды Save As в Delphi 6 выберем команду меню Run/Register ActiveX server и выполним ее.

Продолжим работу с сессией. Воспользуемся проектом, создание которого было описано ранее (см. КомпьютерПресс, № 2’2001, c. 196). Исходный код проекта можно найти на нашем CD-ROM. Сначала разберемся, каким образом можно сохранять и изменять переменные. Для этого в секции private класса TTest модуля ASP01_U1 обьявим метод:

В каждом методе модуля ASP01_U1 вызовем метод IncrementCallCount с параметром Name= . Например, в ранее объявленном методе GetPicture (см. КомпьютерПресс, № 2’2001, с.196) обратимся к IncrementCallCount следующим образом:

Далее добавим в библиотеку типов новый метод GetCallCount, как было описано выше. Реализуем этот метод следующим образом:

И наконец, создадим ASP-документ с вызовом метода GetCallCount:

Сохраним этот документ в файле Test3.asp в директории C:\ASPTest (напомним, что она зарегистрирована в Internet Information Server и имеет разрешения на чтение и выполнение кода). Далее, обращаясь к ранее созданным ASP-документам, будем обращаться к объявленным ранее методам ASP-сервера в произвольной последовательности и произвольное число раз, пока, наконец, не дойдем до страницы Test3.asp. В результате получим примерно следующий отклик, какой представлен на рис. 2.

Илон Маск рекомендует:  Cnsearch стандарт исключений для роботов


Напротив названия каждого метода стоит число обращений к нему клиента в текущей сессии. Если вызвать команду Refresh в браузере, то можно заметить, что число напротив надписи GetCallCount увеличится на 1.

Данные в коллекции Session.Value хранятся в виде вариантных переменных; иными словами, они могут принадлежать любому типу, конвертируемому в OleVariant: integer, single, double, WideString и т.д. Можно хранить и массивы — для этого вызывается функция VarArrayCreate. Доступ к переменным осуществляется по имени. Коллекция Session.Value возвращает пустое значение (null), если ранее переменная с данным именем не была добавлена к коллекции. Добавление новой переменной осуществляется в случае присвоения значения элемента коллекции с уникальным именем.

Однако ссылки на экземпляры классов (объекты) в этой коллекции хранить нельзя. Точнее говоря, хранить их можно: например привести указатель к типу integer и сохранить в коллекции Session.Value. Далее можно получать доступ к объекту приведением типа и таким образом при каждом следующем обращении клиента получать ссылку на объект и работать с ним. Казалось бы, все хорошо, однако при разрушении сессии по истечении TimeOut деструкторы объектов вызваны не будут. Это означает, что при работе такого сервера постепенно будут исчерпываться доступные системные ресурсы и в конце концов Web-сервер просто «рухнет». Если бы существовала возможность создать обработчик события Session_OnEnd в коде Delphi, то деструкторы можно было бы вызвать явно. Однако этот обработчик может быть создан только в ASP-документе на языках VBScript или JavaScript.

Выход из создавшейся ситуации заключается в использовании коллекции Session.Contents, которая предназначена для хранения объектов. В принципе, коллекция Session.StaticObjects также используется для хранения объектов, но ее нельзя модифицировать во время выполнения приложения. Идея хранения объектов в коллекции Session.Contents заключается в следующем: объекты, которые необходимо хранить, поддерживают интерфейс IUnknown (или его потомок). Именно ссылка на этот интерфейс и помещается в коллекцию Session.Contents. При закрытии сессии для всех интерфейсов, хранящихся в этой коллекции, вызывается метод Release. Соответственно из этого обработчика событий можно вызвать деструктор класса при равенстве нулю числа ссылок на интерфейс.

Для проверки вышесказанного попробуем решить следующую задачу: мы хотим помещать содержимое одной записи в базе данных на отдельную Web-страницу, давая пользователю возможность передвигаться по записям вперед и назад. В этом случае требуется запоминать положение указателя текущей записи в наборе данных, что будет выполняться в компоненте Session. Наиболее простой способ запомнить положение указателя текущей записи — не закрывать набор данных после формирования отклика пользователю.

Первоначально создадим ASP-документ, содержащий форму с двумя кнопками: Back и Next. В данном документе вызовем новый метод ASP-сервера, который назовем, например, TestSession. В этом методе будем анализировать запрос и смещать текущую запись вперед или назад. Сохраним документ в файле Test4.asp. Окончательный вид документа следующий:

Далее создадим новый модуль данных и поместим на него компоненты TADOConnection и TADOTable. В ADOConnection1 сошлемся на базу данных Northwind. В компоненте ADOTable1 сошлемся на ADOConnection1, свойству TableName присвоим значение Alphabetical list of products, а его свойство Active установим равным True. Это означает, что немедленно после отработки конструктора будет установлена связь с сервером баз данных. Объявим новый интерфейс ISessionObject — потомок IUnknown. Полезно к этому интерфейсу добавить метод, который будет возвращать указатель на модуль данных. Несмотря на то что использовать указатели в интерфейсах запрещено вследствие необходимости осуществлять маршалинг для разных модулей, в нашем случае это оправданно, поскольку данный метод будет использоваться только внутри модуля ASP01. Все внешние приложения (в том числе Internet Information Services) будут работать с этим интерфейсом как с Iunknown, не «зная» о существовании метода, возвращающего указатель.

Окончательный код выглядит следующим образом:

Данный код прост и не требует комментариев. Ключевой метод — ObjRelease — уменьшает число ссылок и при их равенстве нулю вызывает деструктор класса. Некоторые изменения потребуются и в классе TTest модуля ASP01_U1. Прежде всего необходимо вызвать конструктор класса TDataModule2. Наиболее подходящее место для вызова конструктора — событие Session_OnStart — недоступно из кода Delphi. Метод AfterConstruction также подходит мало — при обращении к нему не определены ссылки на объекты Session, Application, Server. Необходимо, чтобы эти объекты были инициализированы из интерфейса IScriptingContext — именно это и делает метод OnStartPage. Поэтому будем вызывать конструктор из метода TTest.OnStartPage. При этом следует учитывать, что конструктор мог быть вызван раньше — во время предыдущего запроса клиента. Следовательно, необходима предварительная проверка существования экземпляра класса TTest. Окончательно код будет выглядеть следующим образом:

Первоначально в переменную V пытаемся копировать переменную с именем DataModule, которая хранится в объекте Session. Если это не удается (что происходит, когда пользователь обращается к ASP-серверу в первый раз), то создаем экземпляр класса TDataModule2, получаем от него ссылку на интерфейс ISessionObject и запоминаем ее в объекте Session под именем DataModule. Теперь поведение экземпляра класса TDataModule2 будет корректным: он будет существовать, пока существует объект Session для данного клиента, и разрушаться с окончанием сессии. Чтобы убедиться в этом, достаточно переписать деструктор TDataModule2 и поместить туда оператор Beep (визуальные элементы управления в ASP-приложениях показывать запрещено). Если после этого вновь обратиться к ASP01 и затем выгрузить ASP-сервер, как было описано выше, то можно услышать звук динамика.

Осталось реализовать метод TestSession в классе TTest — он формирует отклик для клиента. В этом методе необходимо получить доступ к хранящемуся в объекте Session экземпляру класса TDataModule2, проанализировать запрос и при нажатии кнопки Next переместить курсор на следующую запись, а при нажатии кнопки Prior — на предыдущую. Окончательный код выглядит следующим образом:

В нем используется определенный ранее метод ISessionObject.getDataModule для получения ссылки на экземпляр класса TDataModule2. Скомпилировав этот проект и обратившись к созданной ранее странице Test4.asp, можно получить отклик, который представлен на рис. 3.

При нажатии клавиши Next получаем страницу со следующей записью; Prior — с предыдущей.

В заключение следует отметить, что объект Application также имеет аналогичные свойства для хранения переменных и объектов. Эти свойства имеют те же самые названия, что и в объекте Session. Существует два отличия использования аналогичных свойств объекта Application:

ASPError object doesn’t contain any data on my custom error page

I have the following in my web.config

The error handling is working in that, when a 500 error occurs, I am sent to my error.asp instead of the default 500 error page.

The issue is that none of the properties of the ASPError object returned by Server.GetLastError are set.

For example, in the code below, the error description is

Update

Based on the thread Joel linked to in the comments, I’ve updated my web.config to the following:


This does give me data in the ASPError object returned by GetLastError .

ASP » Objects » ASPError

Version: Implemented in version 3.0

The ASPError object is used to obtain detailed information on an error condition. This information, provided by the nine read-only properties of ASPError, can only be accessed by using the Server.GetLastError method.

Properties

The ASPCode property returns the error code generated by IIS.

The ASPDescription property returns a string that provides more detailed description of the error as compared to the short description returned by the Description property. (Not available for all errors.)

The Category property returns a string indicating if the error was generated by IIS, an object, or a scripting language.

The Column property returns a long integer defining the column position inside the ASP file where the error occurred.

The Description property returns a string that is a short description of the error. If you desire a longer description, use the ASPDescription property.

The File property returns the name of the ASP (Active Server Page) file in which the error occurred.

The Line property returns an long integer defining the line number inside the ASP file where the error occurred.

The Number property returns a long integer defining the standard COM error code returned by a COM component.

The Source property returns a string with the actual line from the source code where the error occurred (if available).

Когда я могу получить доступ к объекту ASPError?

Я начал использовать ASPUnit для тестирования моего классического кода ASP. Это все хорошо, и я счастлив. Единственная проблема связана с сообщениями об ошибках, которые он отображает, когда тест генерирует ошибку времени выполнения. Например, если я не определил переменную где-то в моей функции я получаю ошибку:

Что было бы более полезным, если он мог бы сказать мне, какой файл/линия произошла ошибка. Я знаю, что я могу получить эту информацию из объекта ASPError, возвращаемого сервером Server.GetLastError() и в другом месте моего проекта. У меня есть страница с 500 ошибками, которая использует этот метод для автоматического сообщения о сбоях в Fogbugz. Однако, когда я пытаюсь получить доступ к Server.GetLastError где-либо еще, возвращаемая информация пуста. Например, следующий код вывода нулевой воли, а не ожидаемый 4.

Это правильный способ доступа ASPError или это возможно только на страницах персонализированных сообщений об ошибках? Есть ли лучший способ получить сообщения об ошибках в ASPUnit?

Создан 17 авг. 09 2009-08-17 10:32:50 jammus

1 ответ

Насколько я знаю, объект ASPError не заполняется до тех пор, пока ваша текущая страница не завершит обработку. Его предназначение должно использоваться только на странице с ошибкой 500. Поэтому теория — это когда вы получаете сообщение об ошибке, если вы настроили свою 500-страничную страницу, тогда IIS сделает внутреннюю переадресацию на эту страницу, чтобы вы могли хотя бы записать ошибку. Тогда и только тогда доступен объект ASPError. У меня были сумасшедшие идеи использования xmlhttprequest, чтобы попытаться захватить страницу, но это не так, как она работает.

Илон Маск рекомендует:  Атрибут nowrap в HTML

Короче говоря, вы не можете сделать это, чтобы получить подробные данные об ошибках, которые вы хотите.


Используя сервер JScript, вы можете использовать try catch, который дает вам доступ к объекту исключения, но даже это вам не очень хорошо, номера строк или что-то еще. Мусор.

Создан 17 авг. 09 2009-08-17 18:10:43 Pete Duncanson

Boo. Вот чего я боялся. Спасибо что нашли время ответить. – jammus 18 авг. 09 2009-08-18 02:51:15

Образовательный блог — всё для учебы

1) Общие сведения об ASP
ASP (Active Server Pages) – это технология программирования, позволяющая создавать на Web-сервере (с IIS, 1997 г.) динамические интерактивные Web-страницы. ASP представляет собой файлы с расширением *.Asp, содержащие смесь кода HTML, кода сценариев на языке VBScript или JavaScript, средств доступа к БД (ADO), управления внешними COM-объектами и внутренних объектов ASP. Эта технология впервые была реализована в Web-сервере IIS фирмы Microsoft и фактически является интерпретируемым вариантом ISAPI-расширения сервера.

2) Встроенные объекты
ASP включает семь встроенных (не требующих создания и инициализации) объектов, используемых для пересылки HTML-страниц и данных браузеру, извлечения данных, обмена данными с сервером и т.д. среди них:
Response – пересылает данные клиенту
Request – обрабатывает данные, поступающие с запросом от клиента.
Server – обеспечивает взаимодействие с сервером.
Application – кэширует данные о приложении.
Session – кэширует данные о браузере.
ObjectContext – запускает транзакции и управляет их выполнением.
ASPError – поддерживает работу с ошибками.

3) Особенности ASP
Помимо встроенных, в комплект ASP входит ряд устанавливаемых объектов, часть из которых бывает полезна, а часть незаменима. Так COM объект Dictionary незаменимый.

В отличие от CGI, ASP-сценарий выполняется как внутренний процесс сервера, кроме того, он многопоточен и оптимизирован для работы с большим количеством пользователей. ASP-сценарий начинает выполняться после того, как браузер запросит файл с расширением *.Asp с Web-сервера. Web-сервер посылает вызов встроенному в IIS ASP-механизму обработки (..\System\InetSrv\Asp.Dll), который считывает сценарий и выполняет все встретившиеся команды. В результате генерируется HTML-страница, которая посылается браузеру.

Для того, чтобы с помощью ASP сделать что-либо серьезное на Web-сервере, необходимо создать COM-объекты и использовать их службы (методы). Компоненты ASP Должны использовать модель потоков STA – каждый объект выполняется в контексте собственного потока и защищен от конкурирующих потоков.

4) Доступ к встроенным объектам
Для доступа от создаваемых COM-объектов ко встроенным необходимо использовать интерфейсы:
a) С помощью функции GetObjectContext получить указатель на интерфейс IObjectContext;
b) С помощью указателя следует получить указатель на интерфейс IGetContextProperties;
c) Вызвав метод GetProperties() и передав ему имя встроенного объекта, например, Request или Response, и вариантную переменную, можно получить через нее указатель на IDispatch интерфейс запрашиваемого объекта;
d) Далее можно вызывать методы встроенного объекта.

5) Недостатки ASP
• Программы ASP не компилируются, а интерпретируются. Следовательно, они исполняются медленнее компилируемых.
• ASP не имеет развитых средств определения типов. Все переменные имеют тип Variant (16 байт). Это удобно, но не способствует повышению скорости работы.
• Внешние файлы приходится включать (include) при каждом обращении.
• ASP трактует все объектные (object) переменные как объекты с поздним связыванием. При каждом обращении к свойству или методу запрашиваются все данные об объекте, что увеличивает время отклика.

6) Пример реализации ASP
— Необходимые настройки и установки
На сервере необходимо установить IIS (каталог WEB5), ADO, ODBC (System DSN – SLS), InterBase (FireBird). В качестве источника данных воспользуемся БД Sales.Gdb.

— Структура программы доступа к БД

HTML-заголовок:

Демонстрация ASP

Подключение к БД



Подключение к БД:

HTML-подвал:

Цикл считывания данных:


Fields.Count-1 %>


Fields.Count-1 %>

— Работа с программой
Для запуска программы следует в браузере набрать: http://localhost/web5/sales/php

7) ASP клоны и аналоги
Chili!Soft
Chili!Soft, продукт одноименной компании, — достаточно гибкий клон ASP, способный работать на разнообразном оборудовании, операционных системах и Web-серверах. Считается, что Chili!Soft и ASP совместимы на 90%.

Java Server Pages
Java Server Pages (JSP) – технология, напоминающая ASP, но в которой используется только язык Java в сочетании с HTML, для поддержки динамического формирования страниц на любой платформе с поддержкой Java. Аналогом COM-объектов являются объекты JavaBeans.


Apache::ASP
Apache::ASP на основе PerlScript от Apache Perl International Project работает на множестве операционных систем, но только с Web-сервером Apache.

PHP
Похожими возможностями обладает язык с открытой лицензией PHP. Правда технология PHP базируется на классических библиотеках объектных модулей, а не на использовании модели компонентного объекта COM и элементов управления ActiveX.

Объект ASPError не содержит никаких данных на моей странице ошибок

I have the following in my web.config

Обработка ошибок работает в том, что при возникновении ошибки 500 меня отправляет на мой error.asp вместо страницы ошибок 500 по умолчанию.

Проблема в том, что ни один из свойств объекта ASPError , возвращаемого Server.GetLastError , не установлен.

Например, в приведенном ниже коде описание ошибки

Обновить

Based on the thread Joel linked to in the comments, I’ve Обновитьd my web.config to the following:

Этот делает данные в объекте ASPError, возвращаемом GetLastError .

ASPError Object

You can use the ASPError object to obtain information about an error condition that has occurred in script in an ASP page. The ASPError object is returned by the Server.GetLastError method. The ASPError object exposes read-only properties.

You can use the ASPError object in an ASP page that is configured to respond to an HTTP error. For more information about configuring custom errors, see Creating Custom Error Messages.

Methods

The ASPError object has no methods.

Properties

The ASPError object defines the following properties.

Returns an error code generated by IIS.

Returns a more detailed description of the error, if it is an ASP-related error

Indicates if the source of the error was internal to ASP, the scripting language, or an object.

Indicates the column position within the .asp file that generated the error.

Returns a short description of the error.


Indicates the name of the .asp file that was being processed when the error occurred.

Indicates the line within the .asp file that generated the error.

Returns the standard COM error code.

Returns the actual source code, when available, of the line that caused the error.

Remarks

When IIS encounters an error either with compiling or running an .asp file, it will generate a 500;100 custom error. By default, all Web sites and applications will transfer processing of a 500;100 custom error to the default .asp file. After a 500;100 custom error is generated, IIS will also create an instance of the ASPError object that describes the error condition.

Example Code

The following example demonstrates writing the information exposed by the ASPError object.

Requirements

Client: Requires Windows XP Professional, Windows 2000 Professional, or Windows NT Workstation 4.0.

Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.

Когда я могу получить доступ к объекту ASPError?

Я начал использовать ASPUnit для тестирования моего классического кода ASP. Это все хорошо, и я счастлив. Единственная проблема связана с сообщениями об ошибках, которые он отображает, когда тест генерирует ошибку времени выполнения. Например, если я не определил переменную где-то в моей функции я получаю ошибку:

Что было бы более полезным, если он мог бы сказать мне, какой файл/линия произошла ошибка. Я знаю, что я могу получить эту информацию из объекта ASPError, возвращаемого сервером Server.GetLastError() и в другом месте моего проекта. У меня есть страница с 500 ошибками, которая использует этот метод для автоматического сообщения о сбоях в Fogbugz. Однако, когда я пытаюсь получить доступ к Server.GetLastError где-либо еще, возвращаемая информация пуста. Например, следующий код вывода нулевой воли, а не ожидаемый 4.

Это правильный способ доступа ASPError или это возможно только на страницах персонализированных сообщений об ошибках? Есть ли лучший способ получить сообщения об ошибках в ASPUnit?

Создан 17 авг. 09 2009-08-17 10:32:50 jammus

1 ответ

Насколько я знаю, объект ASPError не заполняется до тех пор, пока ваша текущая страница не завершит обработку. Его предназначение должно использоваться только на странице с ошибкой 500. Поэтому теория — это когда вы получаете сообщение об ошибке, если вы настроили свою 500-страничную страницу, тогда IIS сделает внутреннюю переадресацию на эту страницу, чтобы вы могли хотя бы записать ошибку. Тогда и только тогда доступен объект ASPError. У меня были сумасшедшие идеи использования xmlhttprequest, чтобы попытаться захватить страницу, но это не так, как она работает.

Короче говоря, вы не можете сделать это, чтобы получить подробные данные об ошибках, которые вы хотите.

Используя сервер JScript, вы можете использовать try catch, который дает вам доступ к объекту исключения, но даже это вам не очень хорошо, номера строк или что-то еще. Мусор.

Создан 17 авг. 09 2009-08-17 18:10:43 Pete Duncanson

Boo. Вот чего я боялся. Спасибо что нашли время ответить. – jammus 18 авг. 09 2009-08-18 02:51:15

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL