情况如下: 我练习创建一个迷你博客应用程序。我使用Strut的EventDispatchAction来处理所有与帖子相关的方法,例如更新和列出帖子。
我有一个update()方法(http://mywebsite/post?update)更新数据库然后如果它成功转发到同一个动作类但是我使用了不同的方法来处理它,list()方法({ {3}})列出了当前用户的所有帖子。问题是它不起作用并抛出一个:
javax.servlet.ServletException:
HTTP的服务器端组件 监视器检测到了 java.lang.StackOverflowError的。这个 当有无限循环时发生 在网络模块中。纠正原因 在运行之前的无限循环 再次使用网络模块。
你们对如何解决这个问题有什么想法吗?任何帮助将不胜感激!
编辑:我解决了这些问题。我只需要在我的前进参数中加值,在我的情况下我必须做:post?list = list而不是post?list(正常方式)。该方法被忽略,我猜它是否没有值。为什么Struts表现得像这样真的很奇怪。也许有人可以对此有所了解?答案 0 :(得分:1)
是否没有更多的异常信息,比如堆栈跟踪?
您是否对list()
方法进行了单元测试?堆栈溢出几乎总是由递归方法(或方法循环)引起,但是没有关于堆栈跟踪的任何更多信息,很难进一步诊断它。
如果在抛出异常后无法获得完整的堆栈跟踪,您可能希望在list()
及其调用的方法中添加更多日志记录,以显示递归发生的位置。
编辑:好的,看看堆栈跟踪,看起来你有一个动作转发给自己,或转发到另一个转发回第一个动作。它看起来像你的代码没有涉及,因为它没有出现在堆栈跟踪中。检查你的Struts配置是否有周期。
堆栈跟踪的另一个有趣的位是“org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter” - 这个应用程序是否在IDE中运行?如果在IDE中运行 not ,它仍然会失败吗?