2009-04-01 2 views
2

Hier ist die Situation: Ich habe geübt, eine Mini-Blog-Anwendung zu erstellen. Ich habe Struts EventDispatchAction verwendet, um alle postbezogenen Methoden wie das Aktualisieren und Auflisten von Posts zu behandeln.Wie behebe ich einen StackOverflowError auf Struts DispatchAction?

Ich habe ein Update() -Methode (http://mywebsite/post?update), der die Datenbank aktualisiert und dann, wenn es nach vorne auf die gleiche Aktion Klasse erfolgreich ist, aber ich habe eine andere Methode, um es zu handhaben, die Liste() -Methode (http://mywebsite/post?list), die auflistet alle Posts des aktuellen Benutzers. Das Problem ist, es nicht und wirft funktioniert:

javax.servlet.ServletException:

Die serverseitige Komponente des HTTP -Monitor hat festgestellt, eine java.lang.StackOverflowError. Diese passiert, wenn eine Endlosschleife im Web-Modul ist. Korrigieren Sie die Ursache der Endlosschleife, bevor Sie das Webmodul erneut ausführen.

Haben Sie eine Idee, wie Sie das beheben können? Jede Hilfe würde sehr geschätzt werden!

EDIT: Ich löste es Jungs. Ich muss nur Wert in den Parameter meines Forward setzen, in meinem Fall muss ich tun: post? List = list anstatt nur post? List (der normale Weg). Die Methode wird ignoriert. Ich schätze, wenn sie keinen Wert hat. Es ist wirklich komisch, warum Struts sich so benimmt. Vielleicht kann jemand etwas Licht darauf werfen?

Antwort

1

Gibt es keine Ausnahmeinformationen mehr, z. B. einen Stack-Trace?

Haben Sie Komponententests für die list() Methode? Ein Stapelüberlauf wird fast immer durch eine rekursive Methode (oder einen Zyklus von Methoden) verursacht, aber ohne weitere Informationen über die Stapelverfolgung ist es sehr schwierig, sie weiter zu diagnostizieren.

Wenn Sie nach dem Auslösen der Ausnahme keine vollständige Stack-Trace abrufen können, möchten Sie möglicherweise mehr Protokollierung in list() und die Methoden, die es aufruft, um Ihnen anzuzeigen, wo die Rekursion auftritt.

EDIT: Okay, mit Blick auf die Stack-Trace sieht es so aus, als ob Sie eine Aktion entweder zu sich selbst oder zu einer anderen Aktion weitergeleitet haben, die zurück zum ersten führt. Es sieht aus wie Ihr Code ist nicht beteiligt, da es nicht in der Stack-Ablaufverfolgung angezeigt wird. Überprüfen Sie Ihre Struts-Konfiguration für Zyklen.

Das andere interessante Bit des Stack-Trace ist "org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter" - läuft diese Anwendung in Ihrer IDE? Schlägt es immer noch fehl, wenn Sie es nicht in der IDE ausführen?

+0

Hier ist der Stack-Trace: http://pastebin.com/m6a785f4f Zu einem nicht verwandten Hinweis sah ich Ihren Namen Jon auf die Anzeigen hier bei SO. Cool: D – ajushi

+0

Das ist in der Tat eine Endlosschleife/Rekursion ... – Thilo

+0

Hier ist der Forward der Update-Methode: Es scheint, dass es die nicht ausführt list() Methode (/post.do?list) wie es sollte. Ich werde versuchen, es aus Netbeans zu vertreiben. – ajushi

Verwandte Themen