In ASP non abbiamo dei meccanismi nativi per la gestione degli errori come in altri linguaggi, ad esempio i blocchi try catch di C# o Java.
Esiste però un'istruzione che, se usata nel modo corretto ci consente di gestire gli errori a runtime evitando i classici messaggi di errore di IIS
L'istruzione in questione è
<%
On Error Resume Next
%>
La quale dice all'interprete ASP di continuare l'esecuzione ignorando l'errore, invece di fermare l'esecuzione e mostrare il messaggio di errore
Una volta detto all'interprete di ignorare l'errore, dobbiamo fare in modo di gestirlo e mostrare all'utente un messaggio. Una volta "trappato" l'errore occorre "gestirlo"
Esiste un oggetto
"Err" che può essere utilizzato a tale scopo.
Questo oggetto ha diversi metodi e proprietà che possono essere usati per i nostri scopi.
Metodi
| Metodo |
Descrizione |
| Clear |
Ripulisce l'oggetto Err, e deve essere usato una volta che abbiamo gestito l'eccezione |
| Raise |
Solleva in modo esplicito un'eccezione |
Proprietà
| Proprietà |
Descrizione |
| Description |
Mostra la descrizione dell'errore |
| HelpContext |
Permette di impostare o recuperare un id di contesto per l'errore |
| HelpFile |
Permette di impostare o recuperare un file di hepl per l'errore |
| Number |
Rappresenta il numero di errore vbscript |
| Source |
Il codice sorgente che ha generato l'errore |
Una volta visti metodi e proprietà, vediamo un esempio di gestione di errori in cui in caso di eccezione, inviamo una mail all'amministratore con la descrizione dell'errore e reindirizziamo l'utente in una pagina di spiegazione.
<%
On Error Resume Next
Response.Write(10/0)
If Err.Number <> 0 then
NumeroErrore = Err.Number
DescrizioneErrore = Err.Description
Pagina = Request.ServerVariables("url")
Call GestisciErrore(NumeroErrore, DescrizioneErrore, Pagina)
End If
Sub GestisciErrore(NumeroErrore, DescrizioneErrore, Pagina)
Messaggio = "Errore nell'appicazione" & vbCrLf
Messaggio = Messaggio & "Numero errore: " & NumeroErrore & vbCrLf
Messaggio = Messaggio & "Descrizione Errore: " & vbCrLf
Messaggio = Messaggio & DescrizioneErrore & vbCrLf
Messaggio = Messaggio & "Pagina: " & Pagina & vbCrLf
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = "Erors@myweb.it"
objMail.To = "webmaster@myweb.it"
objMail.Subject = "Errore nell'applicazione"
objMail.Body = Messaggio
objMail.importance= 0
objMail.Send
Set objMail = Nothing
Err.Clear
Response.Redirect("PaginaMessaggio.asp")
End Sub
%>
Vediamo come funziona.
Viene effettuato un test su Err.Number, se questo è diverso da 0, vuol dire che si sono verificati errori a runtime.
In quel caso lancio una proceura che invia la mail all'amministratore con i dettagli dell'errore.
In GestisciErrore, potrei anche inserire funzioni di log che memorizzano le informazioni su database o file di testo.