1 / 22

Internetapplicaties

Internetapplicaties. Deel 7: Error Handling. Doelstelling. Leren wanneer error handling nodig is en wanneer niet. Herhaling van eenvoudige exception handling in Java. Eigen JSP error pagina’s leren gebruiken. Enkele opmerkingen vooraf: Error handling…. …gaat over het behandelen van fouten.

Download Presentation

Internetapplicaties

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Enkele opmerkingen vooraf:Error handling… • …gaat over het behandelen van fouten. • …lost de bugs NIET op. 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. Internetapplicaties - VII Error Handling

  4. 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 Internetapplicaties - VII Error Handling

  5. 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. Internetapplicaties - VII Error Handling

  6. 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 . Internetapplicaties - VII Error Handling

  7. 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. Internetapplicaties - VII Error Handling

  8. Java Exceptions: oneigenlijk gebruik try{ if ( verkoper.getResultaat() != GOED ) throw new SlechtResultaatException(); verkoper.verhoogSalaris(BONUS); … … } catch(SlechtResultaatException s){ 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 Internetapplicaties - VII Error Handling

  9. 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: • Doorloop alle elementen en vergelijk telkens met de gegeven sleutel. -> Zoektijd evenredig met het aantal elementen (=te lang). • 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. Internetapplicaties - VII Error Handling

  10. 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. Internetapplicaties - VII Error Handling

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

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

  13. 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. Internetapplicaties - VII Error Handling

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

  15. geenexcep.jsp: Resultaat Internetapplicaties - VII Error Handling

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

  17. welexcep.jsp: Resultaat Internetapplicaties - VII Error Handling

  18. JSP error pagina’s:Voorbeeld: foutje.jsp <%@ page errorPage="foutPagina.jsp" %> <html> <head> <title>error pagina: tellertest</title> </head> <body> <% int teller = 10 ; int noemer = 0 ; teller = teller/noemer ; %> </body> </html> Internetapplicaties - VII Error Handling

  19. JSP error pagina’s:Voorbeeld: foutpagina.jsp <%@ page isErrorPage="true“%> <html> <head> <title>Er is een fout opgetreden.</title> </head> <body> <h3>Tot onze grote spijt moeten wij u melden</h3> <h3>dat er een fout is gebeurd. Bel 0900 123 456 </h3> </body> </html> Internetapplicaties - VII Error Handling

  20. 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) … Internetapplicaties - VII Error Handling

  21. JSP Stack Trace en gegenereerde klassen • Maar waar staat die java-klasse ?? Aangenomen dat geenexcep.jsp in deze folder zit: 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 c:\jakarta-tomcat-4.1.27\ work\Standalone\localhost\hfdst7\geenexcep_jsp.java Internetapplicaties - VII Error Handling

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

More Related