Рекомендуется: полезная коллекция функций в разработке ASP (1) Коллекция полезных функций в разработке ASP довольно полезна! Я надеюсь, что все это сохранит! %'********************************************************
В VBScript существует оператор RESUME OR RESUME, который заставляет интерпретатора сценария игнорировать ошибки времени выполнения и продолжить выполнение кода скрипта. Затем скрипт может проверить значение свойства err.number, чтобы определить, произошла ли ошибка. Если возникает ошибка, возвращается ненулевое значение. В ASP 3.0 вы также можете использовать на ошибке GOTO 0, чтобы вернуться к обработке ошибок по умолчанию. Этот вид обработки фактически выполняется в ASP 2.0, но нет соответствующего описания документа, которое распространено во многих файлах обработки, связанных с данными ASP. Добавьте на ошибку резюме, чтобы отключить обработку ошибок по умолчанию, а затем используйте ERR, чтобы поймать ее.Если ошибка, тогда
err.clear
Произошла ошибка в ответ.
Response.end
Конец, если
Чтобы получить более подробное описание ошибки, давайте попробуем объект Asperror. Это новый объект ASP3.0. Его можно получить с помощью метода GetlasterRor объекта сервера . Asperror предоставляет подробную информацию о последней ошибке в ASP. В отличие от объекта ER в VBScript, этот метод не может быть вызван в любое время, чтобы увидеть, возникает ли ошибка. Его можно использовать только на веб -странице ошибок ASP. Если вы используете его, отключив обработку ошибок по умолчанию (используя оператор RESUME RESUME ERRE), как использование объекта ER, метод GetLasterRor не может получить доступ к подробным данным ошибки.
Свойства объекта Asperror:
Объект Asperror предоставляет девять атрибутов, чтобы указать природу и источник возникновенной ошибки, и возвращает фактический код, который вызвал ошибку. Свойства и описания следующие:
ASPCODE: Integer. Номер ошибки, сгенерированный ASP/IIS, например, 0x800A009
Aspdescription: тип строки. Если эта ошибка является ошибкой, связанной с ASP, это свойство является подробным описанием ошибки. Например: все http: http_accept:*/* http_accept_language: zh-cn http_connection: hop-alive http_host: s http_user_agent: mozilla/4.0 (совместимо; msie 6.0; Windows nt 5.0; (r1 1.5)) ... и отчеты.
Категория: тип строки. Источником ошибки является источник языка внутренних сценариев ASP или объекта.
Столбец: целое число. Расположение символов в файле, которое сгенерировало ошибку
Описание: тип строки. Краткое описание ошибки
Файл: тип строки. Имя обработанного файла, когда произошла ошибка
Линия: целое число. Номер строки в файле, который сгенерировал ошибку
Номер: целое число. Стандартный код ошибки COM
Источник: тип строки. Фактический код строки, которая вызвала ошибку
Хорошо, это 9 свойств. Синтаксис использования объекта Asperror:
Asperror.property
Вот и все: asperror.aspcode ()
Asperror.aspdescription ()
Asperror.category ()
Asperror.column ()
Asperror.description ()
Asperror.file ()
Asperror.line ()
Asperror.number ()
Asperror.source ()
Когда ошибка, связанная с ASP, возникает на любой странице под всеми каталогами, поддерживаемыми IIS (или в каталоге, где отредактированы свойства отображения ошибок), будет загружена пользовательская страница ошибки. Фактически, сейчас была установлена нормальная ловушка ошибки скрипта, потому что ошибка времени выполнения ASP на любой веб -странице в этом каталоге запустит пользовательскую страницу ошибки. Веб -страница ошибок - это установка по умолчанию части IIS и может быть настроена в соответствии с личными ситуациями. Например, когда мы вводим несуществующую веб-страницу в каталоге, возникает ошибка 404. Когда возникает ошибка 404, используемая страница составляет 404b.htm. Этот файл содержит часть кода клиентского сценария, которая получает URL -адрес текущего документа (извлечен из атрибута URL объекта документа) и отображает его на странице: [html] <! Doctype html public -// w3c // dtd html 3.2 final // en> en>
<html dir = ltr>
<голова>
<style> a: ссылка {font: 9pt/11pt 环; Цвет: FF0000} A: посещение {font: 9pt/11pt 环; Цвет:#4E4E4E}
</style>
<Meta name = Robots Content = noindex>
<Title> Невозможно найти веб -страницу </title>
<Meta http-equiv = content-type content = text-html; charset = gb2312>
<Meta name = ms.locale content = zh-cn>
</head>
<Скрипт>
function homepage () {
<!-
// в реальных битах URL -адреса возвращаются в наш сценарий, как это:
// res: //shdocvw.dll/http_404.htm#http: //www.docurl.com/bar.htm
// для тестирования Используйте docurl = res: //shdocvw.dll/http_404.htm#https: //www.microsoft.com/bar.htm
Docurl = document.url;
// Это где будут HTTP или HTTPS, как найдено путем поиска: //, но пропустить res: //
protocolindex = docurl.indexof (: //, 4);
// это находит конечную черту для доменного сервера
ServerIndex = docurl.indexof (/, Protocolindex + 3);
// Для HREF нам нужен действительный URL для домена. Мы ищем символ #, чтобы найти начало
// Истинный URL и добавить 1, чтобы пропустить его - это значение начинания. Мы используем ServerIndex в качестве конечного маркера.
//urlresult=docurl.substring(protocolindex - 4, ServerIndex);
Beginurl = docurl.indexof (#, 1) + 1;
urlresult = docurl.substring (beginurl, serverIndex);
// Для отображения нам нужно пропустить после http: // и перейти к следующей слэш.
DisplayResult = DOCURL.SubString (Protocolindex + 3, ServerIndex);
Insertelementanchor (urlresult, displayresult);
}
Функция htmlencode (текст)
{
return Text.Replace (/&/g, '& amp'). Заменить (/'/g,' & quot; '). Заменить (/</g,' & lt; '). Заменить (// g,' & gt; ');
}
Функция тагаттриб (имя, значение)
{
вернуть ''+name+'='+htmlencode (value)+'';
}
Функция printtag (tagname, edclosetag, attrib, inner) {
document.write ('<' + tagname + attrib + '>' + htmlencode (inner));
if (inedClosetag) document.write ('</' + Tagname + '>');
}
Функция uri (href)
{
Iever = window.navigator.appversion;
Iever = iever.substr (iever.indexof ('msie') + 5, 3);
return (iever.charat (1) == '.' && iever> = '5.5')?
Encodeuri (href):
Escape (href) .replace (/%3a/g, ':'). Заменить (/%3b/g, ';');
}
Функция insertelementanchor (href, текст)
{
Printtag ('a', true, tagattrib ('href', uri (href)), текст);
}
//->
</script>
<body bgcolor = ffffff>
<таблица ширины = 410 cellpadding = 3 cellpacing = 5>
<tr>
<td align = left valign = средняя ширина = 360>
<h1 style = color: 000000; Шрифт: 12pt/15pt songti> <!-Проблема-> Веб-страница не может быть найдена </h1>
</td>
</tr>
<tr>
<td ширина = 400 colspan = 2> <font style = color: 000000; Шрифт: 9pt/11pt> Веб -страница, которую вы ищете, могла быть удалена, переименована или временно недоступна. </font> </td>
</tr>
<tr>
<td ширина = 400 colspan = 2> <font style = color: 000000; Шрифт: 9pt/11pt Song Font>
<hr color =#c0c0c0 noshade>
<p> Попробуйте следующее: </p>
<ul>
<li> Если вы набрали веб -адрес в адресной строке, проверьте, что он правильно написан. <br>
</li>
<li> Открыть <скрипт>
<!-
if (! ((window.navigator.useragent.indexof (msie)> 0) && (window.navigator.appversion.charat (0) == 2)))))
{
Домашняя страница ();
}
//->
</script> домашняя страница, найдите ссылки на необходимую информацию. </li>
<li> Нажмите кнопку <a href = javascript: vistory.back (1)> назад </a>, чтобы попробовать другие ссылки. </li>
</ul>
<h2 style = font: 9pt/11pt songti; Цвет: 000000> http 404 - Файл не может быть найден <br> Информационная служба Интернета <br> </h2>
<hr color =#c0c0c0 noshade>
<p> Техническая информация (поддержка людей) </p>
<ul>
<li> Подробности: <br> <a href = http: //www.microsoft.com/contentredirect.asp? prd = iis & sbp = & pver = 5.0 & pid = & id = 404 & cat = web & os = & over = & hrd = & opt1 = & opt2 = & opt3 = garty = _blank> hrd = & opt1 = & opt2 = & opt3 = _blank> & hrd = & opt1 = & opt2 = & opt3 = xblank> & hrd = & opt1 = & opt2 = & opt3 = os = & over = & hrd = & opt1 = & opt2 = & opt3.
</li>
</ul>
</font> </td>
</tr>
</table>
</body>
</html>
[/html]
Когда возникает ошибка, отношение отображения между ошибкой и файлом веб -страницы ошибки определяется на вкладке «Пользовательские ошибки» диалогового окна «Свойства» каждого каталога. Это в настройках недвижимости в менеджере интернет -сервисов. Если вы заинтересованы, идите и посмотрите.
Пользовательская ошибка На веб -странице отображается все значения атрибута объекта Asperror и возвращает сообщение о состоянии заголовка HTTP в клиенту с помощью метода response.status, указывая, что произошла ошибка. Затем используйте метод GetlasterRor, чтобы получить ссылку на объект Asperror, чтобы вы могли получить доступ к подробным данным ошибки:
…
<%
Response.status = 500 Ошибка внутреннего сервера
Установить objaspeerror = server.getlasterror ()
%>
В настоящее время выполняет страницу: <b> show_error.asp </b> <p>
<b> Детали ошибки: </b> <br>
Asperror.aspcode = < % = objaspeerror.aspcode %> <br>
Asperror.number = < % = objaspeerror.number %> (0x < % = hex (objaspeerror.number) %>) <br>
Asperror.source = < % = server.htmlencode (objasperror.source) %> <br>
Asperror.category = < % = objaspeerror.category %> <br>
Asperror.file = < % = objaspeerror.file %> <br>
Asperror.line = < % = objaspeerror.line %> <br>
Asperror.column = < % = objaspeerror.column %> <br>
Asperror.description = < % = objaspeerror.description %> <br>
Asperror.aspds = < % = objaspeerror.aspds %>
<Form action = < % = request.servervariables (http_referer) %> method = post>
<Input type = отправить имя = cmdok value = вернуть на предыдущую страницу>
<p>
</Form> Если сценарий или ошибка ASP возникает на пользовательской странице ошибок, IIS вернет только общее сообщение, соответствующее коду ошибки 500: 100. Это может быть сообщение об ошибке из самого двигателя скрипта или просто просто простое сообщение: внутренняя ошибка сервера. Настраиваемая страница ошибки не будет перезагружена снова.
Все среды, содержащие неправильную веб -страницу, будут доставлены на настроенную неправильную веб -страницу. То есть значения, хранящиеся в любом сборе или атрибуте внутренних объектов ASP, могут быть использованы. Например, если вы получаете значение http_referer из коллекции request.servervariables, оно будет отражать URL -адрес страницы, которая называется исходной страницей (то есть страница, которая была до произошла ошибка). Это значение не изменяется, когда сервер передает выполнение на неправильную веб -страницу, и он не будет содержать URL -адрес веб -страницы, которая выполнялась, когда произошла ошибка.
Аналогичным образом, значение script_name будет именем страницы, содержащей ошибку, а не URL -адрес страницы. Когда страница ошибки была загружена, вы можете подтвердить это, проверив URL -адрес в адресной строке браузера. Тем не менее, значения, хранящиеся в переменных сценария исходной веб -страницы, недоступны на настроенной неправильной веб -странице.
Если оригинальная веб -страница ASP работает в рамках транзакции, то есть есть < % @Transaction =… %> в передней части веб -страницы, вы также должны определить, необходимо ли принимать некоторые методы на веб -странице для выхода из транзакции. Например, вы можете вызвать метод SetAbort со встроенным объектом ObjectContext:
ObjectContext.setAbort
Что ж, первое время отправило тысячи писем о спамке, все из которых находятся в обработке ошибок
Опция явная
Response.addheader Code, 200
Response.addheader разум, ОК
При ошибке резюме следующим
Response.clear
Dim objerror
Установить objerror = server.getlasterror ()
Dim objerr, objmail, html
Установить objerr = server.getlasterror ()
Установить objmail = createObject (cdonts.newmail)
objmail.from = [email protected]
objmail.to = [email protected]
objmail.bodyformat = 0
objmail.mailformat = 0
objmail.subject = QOP ошибка 500
html = <font face = 'verdana, arial, helvetica, sans-serif'> <br>
html = html & <p> ошибка произошла по адресу: и теперь
html = html & <p> упоминается из: & request.servervariables (http_referer)
html = html & <p> url: & request.servervariables (url)
html = html & <p> <b> Категория: </b> </p> & objerr.category
html = html & <p> <b> имя файла: </b> </p> & objerr.file
html = html & <p> <b> asp code: </b> </p> & objerr.aspcode
html = html & <p> <b> номер: </b> </p> & objerr.number
html = html & <p> <b> Источник: </b> </p> & objerr.source
html = html & <p> <b> LineNumber: </b> </p> & objerr.line
html = html & <p> <b> column: </b> </p> & objerr.column
html = html & <p> <b> Описание: </b> </p> & objerr.description
html = html & <p> <b> asp Описание: </b> </p> & objerr.aspdescription
html = html & <blockquote>
html = html & all http: & request.servervariables (all_http)
html = html & </blockquote> </font>
objmail.body = html
objmail.send
objerr.clear
Установить objmail = ничего
Установить objerr = ничего
response.write (html)
Это действительно раздражает работать. Посмотрите, что написал мистер Лао Гай в 500-100.ASP:
<%
Response.write objasperror.category
Если objaspeerror.aspcode> thene response.write, & objaspeerror.aspcode
Response.write (0x & hex (objasperror.number) &) и <br>
Response.write <b> & objasperror.description & </b> <br>
Если objaspeerror.aspds> Тогда ответ.write objaspeerror.aspds & <br>
blnerrorritten = false
'Покажите только источник, если он доступен, и запрос с той же машины, что и IIS
Если objaspeerror.source> Тогда
strservername = lcase (request.servervariables (server_name))
strserverip = request.servervariables (local_addr)
strremoteip = request.servervariables (remote_addr)
If (strservername = localhost или strserverip = strremoteip) и objasperror.file <>? Затем
Response.write objasperror.file
Если objasperror.line> 0, то response.write, line & objasperror.line
Если objaspeerror.column> 0, то response.write, column & objaspeerror.column
Response.write <br>
Response.write <font style = color: 000000; Шрифт: 8pt/11pt courier new> <b>
Response.write server.htmlencode (objasperror.source) и <br>
Если objaspeerror.column> 0, то ответ.
Response.write </b> </font>
blnerrorritten = true
Конец, если
Конец, если
Если не BlnerRorROWRITED и OBJASPERROR.FILE <>? Затем
Response.write <b> & objasperror.file
Если objasperror.line> 0, то response.write, line & objasperror.line
Если objaspeerror.column> 0, то response.write, column & objaspeerror.column
Response.write </b> <br>
Конец, если
%>
Вот ссылка: ASP 3.0 Усовершенствованное программирование относительно свойств использования объектов Asperror, есть следующие моменты, которые стоит отметить:
· Даже если ошибка не происходит, числовое свойство всегда должно иметь значение. Если ошибка не происходит, когда веб-страница ASP вызывает метод getLasterRor, значение этого свойства равно 0. Обычно, для ошибки времени выполнения сценариев ASP, свойство номер возвращает шестнадцатеричное значение 0x800A0000, плюс стандартный код ошибки сценария. Например, предыдущий пример возвращает значение 0x800A0009 для индекса из ошибки диапазона, поскольку код ошибки для VBScript для этого типа ошибки составляет 9.
· Когда ошибка прошла, атрибуты категории и описания всегда будут иметь значение.
· Значение свойства APSCODE генерируется IIS и будет пустым для большинства ошибок сценариев. В большем случае существуют соответствующие значения, когда внешний компонент используется ошибкой.
Значение свойства Aspdescription генерируется препроцессором ASP, а не используемым в настоящее время двигателем скрипта, и будет пустым для большинства ошибок сценариев. Чаще всего существует соответствующее значение для ошибок, таких как вызов неверного метода на встроенном объекте ASP.
· Свойства файла, источника, строки и столбца могут быть установлены только при возникновении ошибки и если доступны подробные данные об ошибке. Для ошибки времени выполнения свойства файла и строки обычно действительны, но свойство столбца часто возвращает -1. Свойство источника возвращается, когда ошибка представляет собой синтаксисную ошибку, которая предотвращает обработку страницы ASP. Как правило, в этих случаях свойства линии и столбца действительны. Если вы записываете значение свойства источника на страницу, сначала целесообразно передать значение HTMlencode, если оно содержит незаконные HTML -символы. Метод HTMLencode будет подробно обсуждаться позже в этой главе.
ERR объект
Советы: Это второй раз, когда я написал это, NND. Первоначальный фокус был на внедрении объекта Asperror. Теперь я представлю объект ER. Это очень простой и простой для работы объект. Пойдем., На странице ASP.
При использовании объекта ER вам не нужно создавать экземпляр, что означает, что вы можете использовать его случайно, когда хотите его использовать. Как и сеанс, вам не нужно создавать экземпляр, как при использовании объекта ADODB. Set conn = server.createObject (adodb.connection) используется для создания экземпляра. Он возвращает код ошибки, но err! = Err.number может быть очищен с помощью прозрачного метода для облегчения следующего использования. Его основным методом является метод описания, который возвращает краткое описание ошибки. Вот очень классический пример:
< %@ Language = vbscript %>
<%Response.buffer = true
При ошибке резюме следующим
%>
<%
S = SA
response.write (int (s))
Если err.number <> 0, тогда
Response.clear
Произошла ошибка в ответе.
<html>
<Голова>
<Title> </title>
</Head>
<Тело>
Номер ошибки: < %= err.number %> <br/>
Сообщение об ошибке: < %= err.description %> <br/>
Файл ошибок: < %= err.source %> <br/>
Строка ошибки: < %= err.line %> <br/>
< %= Err %>
</Body>
</Html>
<%Конец, если%>
Запустите и посмотрите, err.line пуст, почему? Поскольку метод линии, написанный в VB от ASP, не поддерживается, это свойство отходов в поддержку VB.JSCRICT, и вам нужно учиться, чтобы поймать.
Стоит отметить, что при использовании объекта ER, при ошибке резюме необходимо добавить следующее, и исключение, которое прошло, объект Asperror брошен.
При связывании базы данных вы можете использовать объект ошибки: Свойство счета: используется для подсчета количества коллекций ошибок, метод элемента: используется для указания конкретной ошибки, синтаксис - error.item (номер), где номер является номером. Поскольку элемент является методом по умолчанию, метод написания ошибки (номер) эквивалентен предыдущему. Ниже приведена программа. Используется для перечисления объектов ошибок:
<%
При ошибке резюме следующим
Установить conn = server.createObject (adodb.connection)
Dim i, your_databasepath: your_databasepath = № Mdb
connstr = provider = microsoft.jet.oledb.4.0; data source = & server.mappath (your_databasepath) и
Conn.Open Connstr
Если conn.errors.count <> 0 тогда
response.write не удалось связать базу данных <hr/>
для i = 0 to conn.errors.count-1
response.write conn.errors.item (i) и <hr>
response.write err.description
следующий
еще
база данных ссылок на response.write
конец, если
Conn.close
%>
Нет разницы между объектом ER, вы видели результат сравнения? Это так холодно, что легко использовать объект ERE напрямую.
Как правило, рекомендуется использовать объект Asperror во время отладки, что означает, что если rem Error Resume следующая строка будет REM, она будет брошена по умолчанию с ASPERROR. Во время официальной работы вы можете использовать объект ER, чтобы что -то сделать, если у вас нет особых требований.
Поделиться: полезный сбор функций в разработке ASP (2) Коллекция полезных функций в разработке ASP довольно полезна, пожалуйста, сохраните его! '*****************************************