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

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 1.
Gegevensstructuren: list boxen en lijsten
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
VBA en VBS Een introductie.
Klassen en objecten.
Instructie Programmeren Debuggen 5JJ70. Debuggen: Wat is het probleem Je programma compileert, maar werkt niet zoals verwacht, wat nu? Vraag je af: wat.
Hoofdstuk 6: Controle structuren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
PLDA – Connectiviteit Rudolf de Schipper Geoffroy Fauveaux 09/11/2004.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
De koektrommel of de grabbelton
Verdieping Programmeren in Java - deel 1 college 6 mei 2001.
Inleidend probleem Data structuur (hiërarchie van classes)
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
Exceptions Hoofdstuk 17 Hoofdstuk 17.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Visual Basic.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Nationale Officedag6 maart 2008 VBA voor Excel door Lenny Hoeks.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Object georiënteerd programmeren in Alice
Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Deel XXI 1 Internetapplicaties Internetprogrammeren Capita Selecta.
Internetapplicaties - VI Herhaling 1 Internetapplicaties Deel 6: Herhaling.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Deel X: JSP + Java + database 1 Internetapplicaties Deel 10: JSP + Java + database: Client Server via http.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Programmeerstijl Hoofdstuk 21. Visual Basic.NET voor studenten2 Inleiding Belang van een goede programmeerstijl:  Programma’s worden door meerdere mensen.
Les 2: Interactie in je space door middel van klikbare objecten en actionscript. Wat is actionscript en programmeren?
Les 7 Multiple Document Interface Programmeren met Visual Basic Karl Moens.
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Visual Basic.NETPag.1 Hoofdstuk 8 – Fout afhandeling Inleiding Structured Exception Handling Hoe fouten opvangen Geen foutafhandeling Alle fouten opvangen.
Les 3 Basisbouwstenen (deel 2) Programmeren met Visual Basic Karl Moens.
Hoofdstuk 3 - Conditionele logica
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Encapsulatie: Every man is an island upon himself.
Polymorphisme en Interfaces: inleiding
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Java & het Web Programma: JSP. JSP....herhaling Welke van de volgende expressions is geldig/ongeldig? %>
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Loops en errors Array's Random try catch for loop while loop do while loop.
GEGEVENSSTRUCTUREN IN.NET. Inleiding  Enumerated type  Structure  Collecties  Typed collections  Untyped collections.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
GUI & classes Een Gui in een class steken en het object gebruiken.
Programmeren. Wat is programmeren? Het schrijven van opdrachten voor de processor De processor “spreekt” machinetaal:
Objectgeoriënteerd Programmeren
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Expressies
vandaag èn vrijdag deadline maandag 12 dec.
Gameprogrammeren: Afsluiting
Gameprogrammeren: Herhalingen
Gameprogrammeren: Exceptions
Gameprogrammeren: Interfaces
Implementatie Zoekboom
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Python – For loop + strings
Python – For loop + strings
Transcript van de presentatie:

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

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

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.

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

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.

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.

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.

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

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.

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.

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

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

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.

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>

Internetapplicaties - VII Error Handling15 geenexcep.jsp: Resultaat

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>

Internetapplicaties - VII Error Handling17 welexcep.jsp: Resultaat

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>

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 dat er een fout is gebeurd. Bel </html>

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 \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 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 \webapps\hfdst7\geenexcep.jsp c:\jakarta-tomcat \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 \ work\Standalone\localhost\hfdst7\geenexcep_jsp.java c:\jakarta-tomcat \ work\Standalone\localhost\hfdst7\geenexcep_jsp.java

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 ");