De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Internetapplicaties - VII Error Handling 1 Internetapplicaties Deel 7: Error Handling.

Verwante presentaties


Presentatie over: "Internetapplicaties - VII Error Handling 1 Internetapplicaties Deel 7: Error Handling."— Transcript van de presentatie:

1 Internetapplicaties - VII Error Handling 1 Internetapplicaties Deel 7: Error Handling

2 Internetapplicaties - VII Error Handling2 Doelstelling  Leren wanneer error handling nodig is en wanneer niet.  Herhaling van eenvoudige exception handling in Java.  Eigen JSP error pagina’s leren gebruiken

3 Internetapplicaties - VII Error Handling3 Enkele opmerkingen vooraf: Error handling…  …gaat over het behandelen van fouten.  …lost de bugs NIET op. Verdeel uw energie dus als volgt: Verdeel uw energie dus als volgt:  1. Zorg dat je bij het schrijven van de code al quasi 100% zeker bent dat de code gaat werken.  2. Test uw code constant en automatisch.  3. Doe aan error handling. (1% van je tijd)  …probeert de bugs NIET te verhullen.  …dient NIET om normale conditionele code te vervangen.

4 Internetapplicaties - VII Error Handling4 Inhoud  7.1 Soorten Fouten  Systeemfouten  Progammafouten  Logische Fouten  Syntaxfouten  7.2 Java Exceptions  Java Exceptions : Oneigenlijk gebruik  Intermezzo: VB 6 error handling: oneigenlijk gebruik  Herhaling  Voorbeelden met JSP  7.3 JSP error pagina’s  7.4 JSP Stack Trace

5 Internetapplicaties - VII Error Handling5 Systeemfouten  =fouten die de programmeur niet kan vermijden. Hij kan er wel rekening mee houden, en de fout proberen op te vangen.  Voorbeelden: te weinig geheugen, netwerk down, stuk software niet of slecht geïnstalleerd,…  =GEEN bug van de programmeur.  Enige mogelijkheid om probleem op te sporen at runtime: de code die kan falen uitvoeren en eventuele fouten opvangen.  uitgebreide foutafhandeling is dan meestal onvermijdelijk.

6 Internetapplicaties - VII Error Handling6 Programmafouten  Logische Fouten  De code is syntactisch juist, maar ondoordacht geschreven. Voorbeeld: lus die juist 1 keer te weinig herhaalt. Geneste if-test die een mogelijkheid over het hoofd ziet.  Syntaxfouten  Het gaat hier om syntax-fouten die de compiler niet opmerkt. Downcasts die niet mogelijk zijn, = ipv ==, vergeten van { } na een if-test, waardoor alleen de eerste opdracht wordt uitgevoerd. Programmafouten zijn echte bugs. Ze hadden vermeden kunnen worden. Een programma die at runtime een programmafout tegenkomt, mag hier maar op één manier op reageren: Het programma/de sessie moet stoppen zodat zo weinig mogelijk schade wordt aangericht. Je weet immers nooit wat er is misgegaan. Gebruik hier geen ‘slimme’ error handling die de fout verhult:  NIET proberen om de code met een lusje een aantal keren te laten lopen tot hij werkt.  NIET domweg de methode afbreken en verder gaan vanuit de oproepende code alsof er niks gebeurd is.

7 Internetapplicaties - VII Error Handling7 Java Exceptions  Syntactisch gezien, gaan Java Exceptions niet alleen over ‘fouten’.  Java exceptions zijn bedoeld voor de afhandeling van speciale situaties, waaronder allerlei soorten fouten, maar niet alleen dat. Maar syntactisch, kun je Java Exceptions zelfs misbruiken voor de afhandeling van doodgewone situaties. Maar syntactisch, kun je Java Exceptions zelfs misbruiken voor de afhandeling van doodgewone situaties.

8 Internetapplicaties - VII Error Handling8 Java Exceptions: oneigenlijk gebruik try{ if ( verkoper.getResultaat() != GOED ) if ( verkoper.getResultaat() != GOED ) throw new SlechtResultaatException(); throw new SlechtResultaatException(); verkoper.verhoogSalaris(BONUS); verkoper.verhoogSalaris(BONUS); … … } catch(SlechtResultaatException s){ verkoper.verlaagSalaris(BONUS); verkoper.verlaagSalaris(BONUS);} // Probleem: het niet behalen van een // goed resultaat is een situatie // waarvan we weten dat ze gaat voorkomen // en is dus geen speciale situatie

9 Internetapplicaties - VII Error Handling9 VB 6 error handling: overmijdelijk oneigenlijk gebruik In sommige talen wordt het oneigenlijk gebruik van error handling aangemoedigd. Collections in VB 6 zijn eigenlijk een soort hash-tables. De enige methodes zijn Add, Item, Count, Remove. Er is geen methode, voorzien om te bepalen of een element met een bepaalde sleutel in de collection zit. Wat je wel kunt doen is: 1) Doorloop alle elementen en vergelijk telkens met de gegeven sleutel. -> Zoektijd evenredig met het aantal elementen (=te lang). 2) OF: Probeer het element op te halen met de gegeven sleutel. Bevat de collection het element niet, dan geeft ze een error, die je uiteraard moet opvangen.

10 Internetapplicaties - VII Error Handling10 VB 6 error handling: onvermijdelijk oneigenlijk gebruik Je bent dus verplicht aan oneigenlijke error handing te doen, terwijl het niet bestaan van een sleutel in een collection een doodgewone situatie kan zijn. Het probleem zou zich niet voordoen, mocht de klasse Collection een methode hasKey(key As String) bevatten. Noot 1: Er zijn ook Sun Java klassen, die je verplichten exceptions op te vangen in situaties die niet uitzonderlijk zijn. Noot 2: In VB.net zijn er veel betere alternatieven voor de oude Collection klasse, en een beter error handling mechanisme.

11 Internetapplicaties - VII Error Handling11 VB 6 error handling: onvermijdelijk oneigenlijk gebruik Public Sub test() Dim myCol As Collection Dim myCol As Collection Set myCol = New Collection Set myCol = New Collection myCol.Add "hallo", "1000" myCol.Add "hallo", "1000" myCol.Add "iedereen", "2000" myCol.Add "iedereen", "2000" If hasItem(myCol, "3000") Then If hasItem(myCol, "3000") Then MsgBox "Sleutel 3000 zit er in" MsgBox "Sleutel 3000 zit er in" Else Else MsgBox "Sleutel 3000 zit er NIET in" MsgBox "Sleutel 3000 zit er NIET in" End If End If End Sub Public Function hasItem(col As Collection, key As String) As Boolean On Error Resume Next On Error Resume Next Dim s As String Dim s As String s = col.Item(key) s = col.Item(key) If Err.Number = 0 Then If Err.Number = 0 Then hasItem = True hasItem = True Else Else hasItem = False hasItem = False End If End If End Function

12 Internetapplicaties - VII Error Handling12 Java Exceptions: herhaling Throwable Exception Error  Technisch is Exception een subklasse van Throwable + getMessage(): String + toString(): String

13 Internetapplicaties - VII Error Handling13 Java Exceptions: herhaling  Exception:  Objecten van deze klasse bevatten informatie over de speciale situatie. Een object van deze klasse wordt gecreëerd bij het voorvallen van deze situatie.  throw  Als de speciale situatie gebeurt, dan ‘werpen’ we een exception, die dan elders ‘gecatched’ kan worden. throw new MijnException();  Sommige exceptions worden geworpen door de JVM.  try{}  Gaat een blok code vooraf waarbinnen een exception kan gethrowed worden.  catch(){}  Vangt een exception op. Het codeblok achter catch wordt uitgevoerd.  Het type van de exception moet matchen, anders wordt er niks uitgevoerd.  finally  Stuk code die sowieso uitgevoerd wordt bij het opvangen van een exception, onafhanelijk van wat de catch()-clauses doen en dus onafhankelijk het type van de exception.

14 Internetapplicaties - VII Error Handling14 Voorbeelden met JSP: geenexcep.jsp <html> Geen Exceptions: tellertest Geen Exceptions: tellertest <% <% int teller = 10 ; int teller = 10 ; int noemer = 0 ; int noemer = 0 ; teller = teller/noemer ; teller = teller/noemer ; %> %> De waarde van teller is De waarde van teller is </html>

15 Internetapplicaties - VII Error Handling15 geenexcep.jsp: Resultaat

16 Internetapplicaties - VII Error Handling16 Voorbeelden met JSP: welexcep.jsp <html> Wel Exceptions: tellertest Wel Exceptions: tellertest <% <% int teller = 10 ; int teller = 10 ; int noemer = 0 ; int noemer = 0 ; try{ try{ teller = teller/noemer ; teller = teller/noemer ; } catch(Exception exc){ } catch(Exception exc){ // e.toString() wordt opgeroepen: // e.toString() wordt opgeroepen: out.print("Fout : " + exc ); out.print("Fout : " + exc ); } %> %> De waarde van teller is De waarde van teller is </html>

17 Internetapplicaties - VII Error Handling17 welexcep.jsp: Resultaat

18 Internetapplicaties - VII Error Handling18 JSP error pagina’s: Voorbeeld: foutje.jsp <html> error pagina: tellertest error pagina: tellertest <% <% int teller = 10 ; int teller = 10 ; int noemer = 0 ; int noemer = 0 ; teller = teller/noemer ; teller = teller/noemer ; %> %> </html>

19 Internetapplicaties - VII Error Handling19 JSP error pagina’s: Voorbeeld: foutpagina.jsp <html> Er is een fout opgetreden. Er is een fout opgetreden. Tot onze grote spijt moeten wij u melden Tot onze grote spijt moeten wij u melden dat er een fout is gebeurd. Bel 0900 123 456 dat er een fout is gebeurd. Bel 0900 123 456 </html>

20 Internetapplicaties - VII Error Handling20 JSP Stack Trace  Bij geenexcep.jsp hadden we gezien wat er gebeurt als je fouten niet opvangt. Vooral het gedeelte onder root cause is interessant. Hier staat o.a. dat de fout zich in lijn 50 voordoet van geenexcep_jso.java.  N.B. logfiles staan in C:\jakarta-tomcat-4.1.24\logs root cause java.lang.ArithmeticException: / by zero at org.apache.jsp.geenexcep_jsp._jspService(geenexcep_jsp.java:50) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) …

21 Internetapplicaties - VII Error Handling21 JSP Stack Trace en gegenereerde klassen  Maar waar staat die java-klasse ?? Aangenomen dat geenexcep.jsp in deze folder zit: Aangenomen dat geenexcep.jsp in deze folder zit: c:\jakarta-tomcat-4.1.27\webapps\hfdst7\geenexcep.jsp c:\jakarta-tomcat-4.1.27\webapps\hfdst7\geenexcep.jsp dan vind je o.a. de gegenereerde java-klasse geenexcep_jsp.java in deze folder dan vind je o.a. de gegenereerde java-klasse geenexcep_jsp.java in deze folder c:\jakarta-tomcat-4.1.27\ work\Standalone\localhost\hfdst7\geenexcep_jsp.java c:\jakarta-tomcat-4.1.27\ work\Standalone\localhost\hfdst7\geenexcep_jsp.java

22 Internetapplicaties - VII Error Handling22 Fragment van geenexcep_jsp.java out.write(" Geen Exceptions: tellertest"); out.write(" Geen Exceptions: tellertest"); out.write(" \r\n "); out.write(" \r\n "); int teller = 10 ; int teller = 10 ; int noemer = 0 ; int noemer = 0 ; teller = teller/noemer ; // dit is lijn 50 teller = teller/noemer ; // dit is lijn 50 out.write("\r\n\r\n "); out.write("\r\n\r\n "); out.write(" \r\n De waarde van teller is "); out.write(" \r\n De waarde van teller is "); out.print( teller ); out.print( teller ); out.write("\r\n "); out.write("\r\n ");


Download ppt "Internetapplicaties - VII Error Handling 1 Internetapplicaties Deel 7: Error Handling."

Verwante presentaties


Ads door Google