Procedurebeschrijving: Een aangepaste ASP-foutafhandelingspagina maken
De informatie in dit artikel is van toepassing op:
- Microsoft Active Server Pages 4.0
Dit artikel is eerder gepubliceerd onder NL300043
Samenvatting
Wanneer er een fout optreedt in script aan de serverzijde, wordt door de ASP-pagina het uitvoeren van de code gestopt en wordt het foutbericht weergegeven dat bij het gevonden probleem hoort. U kunt de code echter ook door laten lopen ondanks de fout en het probleem oplossen met aangepaste code.
In dit artikel wordt beschreven hoe u door middel van foutafhandeling specifiek kunt controleren op een deling door nul en een generiek foutbericht kunt laten weergeven voor elke andere fout die wordt gevonden. Op de voorbeeldpagina worden twee HTML-tekstvakken weergegeven. De invoer in deze vakken wordt teruggepost naar dezelfde pagina en wordt vermenigvuldigd of gedeeld afhankelijk van de knop waarop de gebruiker klikt. Als de gebruiker bijvoorbeeld
3en
0typt en op
Delen klikt, gebruikt u een aangepaste foutafhandelingspagina om hiervoor een foutbericht weer te geven. Als er zich andere problemen voordoen (als de gebruiker bijvoorbeeld letters typt), kunt u eenvoudigweg het foutnummer en de beschrijving weergeven. In dat geval kan de gebruiker het gewoon opnieuw proberen, omdat de pagina niet is mislukt (gecrasht).
De voorbeeldpagina maken
- Klik op Start, wijs achtereenvolgens Programma's en Bureau-accessoires aan en klik op Kladblok.
- In Kladblok maakt u een nieuwe ASP-pagina met de naam ErrorHandle.asp.
- Kopieer en plak de volgende code naar het Kladblok:
<%@ Language=VBScript %><HTML><HEAD></HEAD><BODY>
<%
'On Error Resume Next
If Request.Form("sbmtMultiply")<>"" then 'Als er op Vermenigvuldigen wordt geklikt, Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))End IfIf Request.Form("sbmtDivide")<>"" then 'If divide is clicked Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))End IfIf Err.number<>0 then If Err.number=11 then '11 is het getal dat wordt weergegeven bij deling door nul. Response.Write "Dit is een aangepast bericht. U kunt niet door nul delen." Response.Write "Typ een andere waarde in het tweede tekstvak.<p>" else Response.Write "Er is een fout opgetreden op deze pagina.<BR>" Response.Write "Het foutnummer is: " & Err.number & "<BR>" Response.Write "De beschrijving is: " & Err.Description & "<BR>" End If End If%>
<FORM action="" method=POST name=f1>A:<INPUT type="text" name=txtA size=5> <BR>B:<INPUT type="text" name=txtB size=5><BR><INPUT type="submit" value="Vermenigvuldigen: A x B" name=sbmtMultiply><INPUT type="submit" value="Delen: A/B" name=sbmtDivide><BR>Result: <INPUT type="text" name=txtResult value="<%=Value%>"></FORM>
</BODY></HTML>
- Sla ErrorHandle.asp op in de basismap van uw webserver (bijvoorbeeld C:\Inetpub\Wwwroot).
- Start uw webbrowser (bijvoorbeeld: klik op Start, wijs Programma's aan en klik op Internet Explorer).
- Typ in de webbrowser het volgende adres op de adresbalk en druk vervolgens op ENTER:
http://servernaam/ErrorHandle.asp
waarbij "servernaam" de naam is van de server waarop Microsoft Internet Information Server (IIS) wordt uitgevoerd. Als dit de computer is waaraan u momenteel werkt, gebruikt u het woord "localhost" in plaats van de computernaam.
Testen zonder foutafhandeling
- Typ geldige waarden (bijvoorbeeld 2,2of 5,5) en klik op de knoppen. De juiste uitkomst wordt nu weergegeven.
- Typ 0en 0. Dit zou moeten mislukken met een ASP-bericht. Merk op dat u het niet opnieuw kunt proberen. In plaats daarvan moet u de pagina vernieuwen of opnieuw naar de pagina bladeren.
- Vernieuw de pagina. Typ eof een ander teken in het vak. De pagina mislukt (crasht) en er wordt een ASP-fout weergegeven. Als u het opnieuw wilt proberen, moet u de pagina vernieuwen.
Testen met foutafhandeling
- Open ErrorHandle.asp in Kladblok.
- Ga naar de volgende commentaarregel:
'On Error Resume Next
- U verwijdert het aanhalingsteken als volgt:
On Error Resume Next
- Sla ErrorHandle.asp op.
- U moet mogelijk het browservenster sluiten en de webbrowser opnieuw starten om eventuele cachegegevens te wissen. U kunt ook op F5 drukken om de pagina te vernieuwen.
- Typ geldige waarden (bijvoorbeeld 2,2of 5,5) en klik op de knoppen. De juiste uitkomst wordt nu weergegeven.
- Typ 0en 0. Dit zou moeten mislukken met een aangepast bericht.
- Typ eof een ander teken in het vak. In dit geval wordt het foutnummer en de beschrijving van het probleem weergegeven, maar de pagina mislukt (crasht) niet. U kunt het opnieuw proberen.
De code begrijpen
- Met de regel "On Error Resume Next" krijgt de pagina de instructie om door te gaan met de verwerking, zelfs als er een fout wordt gevonden. Door deze regel wordt het probleem vastgelegd in het Err-object en wordt de rest van de code verder uitgevoerd. Als deze regel niet aanwezig is (zoals in de eerste test), stopt de pagina onmiddellijk met de verwerking van de pagina en wordt een foutpagina weergegeven met het probleem dat werd aangetroffen.
- Met de volgende sectie code wordt nagegaan op welke knop wordt geklikt en geeft de variabele "Value" (Waarde) het juiste product (uitkomst van een vermenigvuldiging) of quotiënt (uitkomst van een deling):
If Request.Form("sbmtMultiply")<>"" then 'Als er op Vermenigvuldigen wordt geklikt, Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))End IfIf Request.Form("sbmtDivide")<>"" then 'Als er op Delen wordt geklikt, Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))End If
- In de laatste sectie van de code worden de waarden in het Err-object gecontroleerd om te bepalen hoe op de gevonden fout moet worden gereageerd. Dit is het belangrijkste gedeelte. Als de waarde Err.number nul is, is er geen fout gevonden en wordt de betreffende code niet verwerkt. Als Err.number niet gelijk is aan nul ("If Err.Number<>0"), wordt door de code nagegaan welke fout is opgetreden en wordt hierop gereageerd. In dit geval wordt door de voorbeeldcode nagegaan of het een deling door nul betreft. De Err.number-waarde voor deling door nul is 11, dus de code controleert als volgt of het om deze waarde gaat:
If Err.number=11
In dit geval wordt door de code alleen een bericht weergegeven. U kunt hier ook een functie of omleiding aanroepen.
Aangezien u zich middenin de lus bevindt, wordt door het "else"-gedeelte gereageerd op eventuele andere fouten dan de deling door nul. In dit geval gebruikt de code de eigenschappen "Beschrijving" en "nummer" van het Err-object in het bericht.
If Err.number<>0 then If Err.number=11 then '11 is het getal dat wordt weergegeven bij deling door nul. 'Hier kunt u elke willekeurige code uitvoeren. In dit geval wordt een aangepast bericht weergegeven. 'U kunt ook een omleiding naar een andere pagina opnemen, zoals: 'Response.Redirect("divbyzero.asp") Response.Write "Dit is een aangepast bericht. U kunt niet door nul delen." Response.Write "Typ een andere waarde in het tweede tekstvak.<p>" else Response.Write "Er is een fout opgetreden op deze pagina.<BR>" Response.Write "Het foutnummer is: " & Err.number & "<BR>" Response.Write "De beschrijving is: " & Err.Description & "<BR>" End If End If
TIPS EN EVENTUELE PROBLEMEN
- Als u naar het nummer en de beschrijving wilt zoeken voor een specifiek probleem dat u wilt afhandelen, veroorzaakt u het probleem op een pagina waarop "On Error Resume Next" en de volgende code wordt gebruikt:
Response.Write "Het foutnummer is: " & Err.number & "<BR>" Response.Write "De beschrijving is: " & Err.Description & "<BR>"
- Deze code kan geen prestatiefouten of "hangende" systemen vinden.
- In de Err-collectie wordt alleen de meest recente fout bijgehouden. Bijvoorbeeld:
X=Cint("x")Y=(3/0)Response.Write Err.Description
Hierdoor wordt het bericht over de deling door nul weergegeven en niet het probleem van de niet overeenkomende typen.
Reacties
Nog geen reacties geplaatst.