2

情况如下:我练习了创建一个迷你博客应用程序。我使用 Strut 的 EventDispatchAction 来处理所有与帖子相关的方法,例如更新和列出帖子。

我有一个 update() 方法(http://mywebsite/post?update),它更新数据库,然后如果它成功转发到同一个动作类,但我使用了不同的方法来处理它, list() 方法(http://mywebsite/post?list ) 列出当前用户的所有帖子。问题是它不起作用并抛出:

javax.servlet.ServletException:

HTTP 监视器的服务器端组件检测到 java.lang.StackOverflowError。当 web 模块中存在无限循环时,就会发生这种情况。在再次运行 Web 模块之前更正死循环的原因。

你们对如何解决这个问题有任何想法吗?任何帮助将不胜感激!

编辑:我解决了伙计们。我只需要在我的转发参数中输入值,就我而言,我必须这样做: post?list=list 而不是 post?list (正常方式)。我猜如果它没有值,该方法将被忽略。Struts 为什么会这样,真的很奇怪。也许有人可以对此有所了解?

4

1 回答 1

1

是否没有更多异常信息,例如堆栈跟踪?

你有该list()方法的单元测试吗?堆栈溢出几乎总是由递归方法(或方法循环)引起的,但如果没有有关堆栈跟踪的更多信息,则很难进一步诊断它。

如果在抛出异常后无法获得完整的堆栈跟踪,则可能需要添加更多日志记录list()及其调用的方法,以显示递归发生的位置。

编辑:好的,看看堆栈跟踪,看起来你有一个动作转发给它自己,或者另一个动作转发回第一个动作。看起来您的代码没有涉及,因为它没有出现在堆栈跟踪中。检查您的 Struts 配置是否有周期。

堆栈跟踪中另一个有趣的部分是“org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter”——这个应用程序是否在您的 IDE 中运行?如果不在IDE 中运行它还会失败吗?

于 2009-04-01T09:02:04.663 回答