推奨:ASP開発における機能の有用なコレクション(1) ASP開発における有用な機能のコレクションは非常に便利です!みんながそれを維持してくれることを願っています! % '************************************************************************************************************************************************************************************************
vbscriptには、スクリプトインタープリターがランタイムエラーを無視し、スクリプトコードの実行を継続するために、on error resumeの次のステートメントがあります。次に、スクリプトはERR.Numberプロパティの値を確認して、エラーが発生したかどうかを判断できます。エラーが発生した場合、ゼロ以外の値が返されます。 ASP 3.0では、エラーGOTO 0で使用してデフォルトのエラー処理に戻ることもできます。この種の処理は実際にASP 2.0で実行されますが、対応するドキュメントの説明はありません。これは、多くのASPデータ関連の処理ファイルで一般的です。次にエラー履歴書を追加して、デフォルトのエラー処理をオフにし、ERRを使用してキャッチします。エラーの場合
err.clear
respons.writeでエラーが発生しました!
Response.End
ifを終了します
より詳細なエラーの説明を取得するには、Asperrorオブジェクトを試してみましょう。 Asp3.0の新しいオブジェクトです。サーバーオブジェクトのgetLasterRorメソッドを介して取得できます。 Asperrorは、ASPの最後のエラーに関する詳細情報を提供します。 VBScriptのERRオブジェクトとは異なり、エラーが発生するかどうかを確認するために、この方法をいつでも呼び出すことはできません。 ASPカスタマイズされたエラーWebページでのみ使用できます。 ERRオブジェクトを使用するなど、デフォルトのエラー処理(ON ERROR Resume Nextステートメントを使用)をオフにして使用する場合、getLasterRorメソッドはエラーの詳細なデータにアクセスできません。
Asperrorオブジェクトのプロパティ:
Asperrorオブジェクトは、発生したエラーの性質とソースを示す9つの属性を提供し、エラーを引き起こした実際のコードを返します。プロパティと説明は次のとおりです。
ASPCODE:整数。 0x800A009など、ASP/IISによって生成されたエラー番号
AspDescription:文字列タイプ。このエラーがASP関連のエラーである場合、このプロパティはエラーの詳細な説明です。例:すべてのhttp:http_accept:*/* http_accept_language:zh-cn http_connection:keep-alive http_host:s http_user_agent:mozilla/4.0(互換;互換; msie 6.0; windows nt 5.0;(r1 1.5)...
カテゴリ:文字列タイプ。エラーのソースは、ASP内部スクリプト言語、またはオブジェクトのソースです。
列:整数。エラーを生成したファイル内の文字位置
説明:文字列タイプ。エラーの簡単な説明
ファイル:文字列タイプ。エラーが発生したときに処理されるファイルの名前
ライン:整数。エラーを生成したファイル内の行番号
番号:整数。標準のCOMエラーコード
出典:文字列タイプ。エラーを上げた行の実際のコード
OK、これらは9つのプロパティです。 Asperrorオブジェクトを使用する構文は次のとおりです。
asperror.property
それだけです:asperror.aspcode()
asperror.aspdescription()
asperror.category()
asperror.column()
asperror.description()
asperror.file()
asperror.line()
asperror.number()
asperror.source()
IISでサポートされているすべてのディレクトリ(またはエラーマッピングプロパティが編集されているディレクトリ)でASP関連のエラーが発生すると、カスタムエラーページがロードされます。実際、このディレクトリの任意のWebページのASPランタイムエラーがカスタムエラーページをトリガーするため、通常のスクリプトエラートラップが設定されています。エラーWebページはIISのデフォルトインストール部分であり、個人的な状況に応じてカスタマイズできます。たとえば、ディレクトリに存在しないWebページを入力すると、404エラーが発生します。 404エラーが発生すると、使用されるページは404b.htmです。このファイルには、現在のドキュメントのURL(ドキュメントオブジェクトのURL属性から取得)を取得し、ページに表示するクライアントスクリプトコードパーツが含まれています。
<html dir = ltr>
<head>
<style> a:link {font:9pt/11pt环;色:ff0000} a:訪問{font:9pt/11pt环;色:#4e4e4e}
</style>
<Meta name = robots content = noindex>
<Title> Webページを見つけることができません</title>
<メタhttp-equiv = content-type content = text-html; charset = gb2312>
<メタ名= 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の場所です。
protocolindex = docurl.indexof(://、4);
//これにより、ドメインサーバーの終了スラッシュが見つかります
serverIndex = docurl.indexof(/、protocolindex + 3);
// HREFの場合、ドメインに有効なURLが必要です。 #シンボルを検索して始まりを見つけます
// true urlの// 1を追加してスキップします - これはbeginurl値です。 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(テキスト)
{
text.replace(/&/g、 '&amp')。置き換え(/'/g、'&quot; ')。
}
関数タガトリブ(名前、値)
{
return ''+name+'='+htmlencode(value)+'';
}
function printtag(tagname、needclosetag、attrib、inner){
document.write( '<' + tagname + attrib + '>' + htmlencode(inner));
if(needclosetag)document.write( '</' + tagname + '>');
}
functionuri(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))、text);
}
//->
</script>
<body bgcolor = ffffff>
<テーブル幅= 410セルパディング= 3セルペーシング= 5>
<tr>
<td align = left valign =中間幅= 360>
<h1 style = color:000000;フォント:12pt/15pt songti> <! - 問題 - > Webページは見つかりません</h1>
</td>
</tr>
<tr>
<td width = 400 colspan = 2> <font style = color:000000;フォント:9pt/11pt>検索しているWebページは、削除、名前が変更された、または一時的に利用できない可能性があります。 </font> </td>
</tr>
<tr>
<td width = 400 colspan = 2> <font style = color:000000;フォント:9pt/11pt曲フォント>
<hr color =#c0c0c0 noshade>
<p>以下を試してください:</p>
<ul>
<li>アドレスバーでWebアドレスを入力した場合は、正しく綴られていることを確認してください。 <br>
</li>
<li> open <script>
<! -
if(!((window.navigator.useragent.indexof(msie)> 0)&&(window.navigator.appversion.charat(0)== 2)))))
{
HomePage();
}
//->
</script>ホームページ、必要な情報へのリンクを見つけます。 </li>
<li> <a href = javascript:history.back(1)> back </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 =&os =&hrd =&opt1 =&opt2 =&opt3 = opt3 = opt = _ blank> microsoft </a>
</li>
</ul>
</font> </td>
</tr>
</table>
</body>
</html>
[/html]
エラーが発生すると、エラーとエラーWebページファイルのマッピング関係は、各ディレクトリの[プロパティ]ダイアログボックスの[カスタムエラー]タブで決定されます。これは、インターネットサービスマネージャーのプロパティ設定にあります。興味がある場合は、行って見てください。
カスタムエラーWebページには、Asperrorオブジェクト属性のすべての値が表示され、Response.Statusメソッドを使用してHTTPヘッダーステータスメッセージをクライアントに返し、エラーが発生したことを示します。次に、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>
<入力型=送信name = cmdok value =前のページに返す>
<p>
</form>カスタムエラーページでスクリプトまたはASPエラーが発生した場合、IISはエラーコード500:100に対応する一般的なメッセージのみを返します。これは、スクリプトエンジン自体からのエラーメッセージであるか、かなり単純なメッセージ:内部サーバーエラーです。カスタマイズされたエラーページは再びリロードされません。
間違ったWebページを含むすべての環境は、カスタマイズされた間違ったWebページに配信されます。つまり、ASP内部オブジェクトコレクションまたは属性に保存されている値を使用できます。たとえば、request.servervariablesコレクションからhttp_referer値を取得すると、元のページ(つまり、エラーが発生する前のページ)と呼ばれるページのURLが反映されます。この値は、サーバーが実行の実行を間違ったWebページに転送した場合に変更されず、エラーが発生したときに実行されていたWebページのURLは含まれません。
同様に、Script_Name値は、ページのURLではなく、エラーを含むページの名前になります。エラーページが読み込まれたら、ブラウザのアドレスバーでURLをチェックすることでこれを確認できます。ただし、元のWebページのスクリプト変数に保存されている値は、カスタマイズされた間違ったWebページでは使用できません。
元のASP Webページがトランザクション内で実行されている場合、つまり、Webページの前面に<% @transaction =…%>ディレクティブがある場合は、トランザクションを終了するにはWebページでいくつかの方法を実行する必要があるかどうかも判断する必要があります。たとえば、組み込みのObjectContextオブジェクトを使用して、SetAbortメソッドを呼び出すことができます。
objectContext.setAbort
さて、フロントエンドの時間は何千ものスパムメールを送信しましたが、そのすべてがエラー処理されています
オプションは明示的です
Response.Adddheaderステータスコード、200
Response.Adddeder理由、OK
エラーの再開時に次に再開します
Response.Clear
Dim Objerror
objerror = server.getLasterRor()を設定します
Dim Objerr、Objmail、HTML
objerr = server.getLasterRor()を設定します
set 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>エラーは:&nowで発生しました
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> filename:</b> </p>&objerr.file
html = html&<p> <b> aspコード:</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>列:</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で書いたものを見てください:
<%
respons.write objasperror.category
objaspeerror.aspcode> then respons.write、&objaspeerror.aspcodeの場合
Response.write(0x&hex(objasperror.number)&<br>
respons.write <b>&objasperror.description&</b> <br>
objaspeerror.aspds>の場合、respons.write objaspeerror.aspds&<br>
blnerrorwritten = 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の場合、respons.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の場合、respons.write string((objaspeerror.column -1)、 - )& ^<br>
Response.Write </b> </font>
blnerrorwritten = true
ifを終了します
ifを終了します
そうでない場合は、blnerrorthittedとobjasperror.file <>?それから
respons.write <b>&objasperror.file
objasperror.line> 0の場合、respons.write、line&objasperror.lineの場合
objaspeerror.column> 0の場合、response.write、column&objaspeerror.columnの場合
Response.Write </b> <br>
ifを終了します
%>
参照は次のとおりです。ASP3.0ASPERRORオブジェクトを使用するプロパティに関する高度なプログラミング、注目に値するポイントがあります。
・エラーが発生していなくても、数値プロパティには常に値が必要です。 ASP WebページがGetLasterRorメソッドを呼び出すときにエラーが発生しない場合、このプロパティの値は0です。通常、ASPスクリプトの実行時エラーの場合、番号プロパティは16進価値0x800A0000、さらに標準のスクリプトエンジンエラーコードを返します。たとえば、前の例では、このタイプエラーのVBScriptのエラーコードが9であるため、範囲外エラーの場合は0x800A0009の値を返します。
・エラーが渡された場合、カテゴリと説明の属性には常に値があります。
・APSCODEプロパティの値はIISによって生成され、ほとんどのスクリプトエラーに対して空になります。より多くの場合、外部コンポーネントが使用される場合、対応する値があります。
AspDescriptionプロパティの値は、現在使用されているスクリプトエンジンではなく、ASPプリプロセッサによって生成され、ほとんどのスクリプトエラーでは空になります。より多くの場合、ASPビルトインオブジェクトで無効なメソッドを呼び出すなど、エラーには対応する値があります。
・ファイル、ソース、行、および列のプロパティは、エラーが発生したときとエラーの詳細データが利用可能な場合にのみ設定できます。ランタイムエラーの場合、ファイルとラインのプロパティは通常有効ですが、列プロパティはしばしば-1を返します。ソースプロパティは、エラーがASPによってページが処理されるのを防ぐ構文エラーである場合に返されます。一般に、これらの場合、ラインと列のプロパティが有効です。ソースプロパティの値をページに記述する場合、違法なHTML文字が含まれている場合に、最初に値をHTMLENCODEに渡すことが賢明です。 HTMLENCODEメソッドについては、この章の後半で詳しく説明します。
errオブジェクト
ヒント:これは私がこれを書いたのは2度目です。当初の焦点は、アスペラーオブジェクトの導入にありました。 ERRオブジェクトを紹介します。これは非常にシンプルで操作しやすいオブジェクトです。行こう。ASPページで。
ERRオブジェクトを使用する場合、インスタンスを作成する必要はありません。つまり、使用するときにさりげなく使用できます。セッションと同じように、ADODBオブジェクトを使用するときにインスタンスを作成する必要はありません。 set conn = server.createObject(adodb.Connection)を使用してインスタンスを作成します。エラーコードを返しますが、次の使用を容易にするために、err!= err.numberを明確な方法でクリアできます。その主な方法は説明方法で、簡単なエラー説明を返します。これが非常に古典的な例です:
<%@言語= vbscript%>
<%response.buffer = true
エラーの再開時に次に再開します
%>
<%
S = SA
respons.write(int(s))
err.number <> 0の場合
Response.Clear
Respons.write:%>でエラーが発生しました
<html>
<head>
<title> </title>
</head>
<body>
エラー番号:<%= err.Number%> <br/>
エラーメッセージ:<%= err.description%> <br/>
エラーファイル:<%= err.source%> <br/>
エラーライン:<%= err.line%> <br/>
<%= err%>
</body>
</html>
<%end if>
それを実行して、err.lineは空です、なぜですか? ASPのVBに記載されているラインメソッドはサポートされていないため、これはVB.jscriptのサポートにおける廃棄物であり、キャッチするために勉強する必要があります。
ERRオブジェクトを使用する場合、次にエラー履歴書を追加する必要があり、Asperrorオブジェクトに合格した例外がスローされることに注意してください。
データベースをリンクする場合、エラーオブジェクトを使用できます:カウントプロパティ:エラーコレクションの数をカウントするために使用されます。アイテム方法:特定のエラーを指定するために使用されます。構文はerror.item(number)です。アイテムはデフォルトの方法であるため、ライティングのエラー(数)は前の方法と同等です。以下はプログラムです。エラーオブジェクトを列挙するために使用されます。
<%
エラーの再開時に次に再開します
conn = server.createObject(adodb.connection)を設定します
dim i、your_databasepath:your_databasepath = no.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の場合
respons.write conn.errors.item(i)&<hr>
respons.write err.description
次
それ以外
response.writeリンクデータベースを正常に
ifを終了します
conn.close
%>
ERRオブジェクトに違いはありませんが、比較結果を見ましたか?とても寒いので、ERRオブジェクトを直接使いやすいです。
一般に、デバッグ中にアスペラーオブジェクトを使用することをお勧めします。つまり、オンエラーの再開次の行がREMである場合、デフォルトでアスペラーでスローされます。公式操作中に、特別な要件がない限り、ERRオブジェクトを使用して何かを行うことができます。
共有:ASP開発における機能の有用なコレクション(2) ASP開発における有用な機能のコレクションは非常に便利です。それを維持してください! '*************************************************'フィルタリングハイパーリンク '***********************************関数CECKURL(byVal Chkstr)dim str:str = chkstr str = trim(str)isnull(str)isnull(str)じゃあチェックからチェック