Toon posts:

[Java] Exception handeling

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik doe een poging mijn Servlet wat exceptions te laten vangen. Bijv: het servlet maakt een cookie, en leest het later weer uit. Als dit echter niet lukt moet deze excetion (nullpointerexception) gevangen worden, en moet de gebruiker een overzichtje krijgen met de mogelijke oorzaken.

Ik heb nu iets van:
code:
1
2
3
4
5
6
try {
    <code die het cookie leest>
    }
catch (NullPointerException nu) {
    out.println("Error!: " + nu);
     }

Opzicht wordt de exception netjes gevangen, maar na deze fout wordt de rest van de code (die na dit tryblock staat) ook gewoon uitgevoerd. En dat moet dus niet!

Ik heb het geprobeert met thread.stop() maar das is depraced (weet ook niet of dat zou werken trouwes). Wat is wel een goeie/nette manier om de rest van het programma stop te zetten na een exception?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik ben verder niet thuis in servlets, dus ik weet niet of dat ding verder op een thread loopt. Maar wat je kan doen is een hidden exception (Runtime Exception) opwerpen (of gewoon de NullPointerException niet afvangen). Ps. je bent niet verplicht om alle runtime exceptions te propageren en of op te vangen, dus doe het dan ook niet. Pas helemaal bovenaan ga je vangen.

  • MNeMoNiCS
  • Registratie: Mei 2002
  • Laatst online: 16-10-2012
Stop alle code tussen de haken achter try:

try {
<code die het cookie leest>
<code die alleen moet worden uitgevoerd als lezen gelukt is>
}
except


Succes ermee

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

met een return in je catch blok wordt de methode van de servlet afgebroken.

Verwijderd

Topicstarter
Nou, de reden dat ik deze zeker wel wil vangen is, dat als hij voorkomt dat de gebruiker hem ook duidelijk krijgt te zien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Error: 500
Location: /SQLStatement
Internal Servlet Error:

java.lang.NullPointerException
    at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:986)
    at java.lang.Double.valueOf(Double.java:168)
    at SQLStatement.doGet(SQLStatement.java:90)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
    at org.apache.tomcat.core.Handler.service(Handler.java:286)
    at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
    at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
    at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
    at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
    at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
    at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
    at java.lang.Thread.run(Thread.java:484)

Een reden van het voorkomen van deze exception kan zijn dat de gebruiker cookies heeft uitstaan. Zeker wel de moeite waard om deze even trachten te vangen (bovendien kan ik me best voorstellen dat zo'n page voor een onwetend iemand een aardige schok is ;) )

edit: oei, twee neue reacties, die had ik nog niet verwacht, tnx!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:04
Op maandag 03 juni 2002 11:39 schreef wasigh het volgende:
met een return in je catch blok wordt de methode van de servlet afgebroken.
Maar het programma zelf wordt dan ook volledig afgesloten neem ik aan?

Stel deze situatie. (Geen web-applicatie maar een desktop-programma).
Je hebt een applicatie met op een form een knop. Als je op die knop drukt, staan er een aantal statements in een try/catch blok. In één van die statements treed er een exception op en die wordt afgevangen in het catch blok, maar de daaropvolgende statements (in het try block) mogen niet verder uitgevoerd worden EN het programma mag niet afgesloten worden. Hoe ga je dit oplossen?

https://fgheysels.github.io/


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
code:
1
2
3
4
5
6
7
try
{
  hier allemaal code, ook wat je niet na de exception     uitgevoerd wilt hebben
} catch(Exception e)
{
  doe je ding
}

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

De return eindigt de aanroep van de methode niet van het programma. Het programma gaat weer gewoon verder na de aanroep van de methode. Als je het programma wil eindigen moet je System.exit(int); gebruiken :)

  • udenjpg
  • Registratie: November 2000
  • Niet online

udenjpg

C8H10N4O2

Een genest try-catch blok maken?

try{

try {
<code die het cookie leest>
}
catch (NullPointerException nu) {
<throw EigenError>
}
<Rest van de stuf>
}
catch (EigenError) {
}

Coffee isn't a matter of life and death. It's far more important than that.


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op maandag 03 juni 2002 11:31 schreef Alarmnummer het volgende:
Ik ben verder niet thuis in servlets, dus ik weet niet of dat ding verder op een thread loopt. Maar wat je kan doen is een hidden exception (Runtime Exception) opwerpen (of gewoon de NullPointerException niet afvangen). Ps. je bent niet verplicht om alle runtime exceptions te propageren en of op te vangen, dus doe het dan ook niet. Pas helemaal bovenaan ga je vangen.
Servlets lopen over het algemeen op een aparte thread, maar dat hangt af van de applicatie server. Een servlet kan de web container aangeven dat er iets fout gegaan is door het gooien van een ServletException. Sun geeft hier wat uitleg over de acties die de web container dan onderneemt. Je kunt dus ook een aparte error page hebben voor je eigen exceptions.

With the light in our eyes, it's hard to see.

Pagina: 1