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 ErrorResume 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 ErrorResume Next 'codice... 'la riga che genera l'errore Response.Write(10/0)
'Gestisco l'errore If Err.Number <> 0 then
NumeroErrore = Err.Number
DescrizioneErrore = Err.Description
Pagina = Request.ServerVariables("url") Call GestisciErrore(NumeroErrore, DescrizioneErrore, Pagina) End If
'La procedura per la gestione dell'errore Sub GestisciErrore(NumeroErrore, DescrizioneErrore, Pagina) 'compongo il messaggio
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 'invio la mail
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
'ripulisco Err Err.Clear
'redirigo l'utente 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.