【问题标题】:How do I fix a StackOverflowError on Struts DispatchAction?如何修复 Struts DispatchAction 上的 StackOverflowError?
【发布时间】:2009-04-01 08:47:36
【问题描述】:

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

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

javax.servlet.ServletException:

HTTP 的服务器端组件 监视器检测到一个 java.lang.StackOverflowError。这个 当存在无限循环时发生 在网络模块中。纠正原因 运行前的无限循环 再次访问 web 模块。

你们知道如何解决这个问题吗?任何帮助将不胜感激!

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

【问题讨论】:

    标签: java jakarta-ee struts


    【解决方案1】:

    没有更多的异常信息,比如堆栈跟踪吗?

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

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

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

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

    【讨论】:

    • 这是堆栈跟踪:pastebin.com/m6a785f4f 在不相关的说明中,我在 SO 的广告上看到了你的名字 Jon。酷:D
    • 这里是更新方法的转发: 好像没有执行list()方法(/post.do?列表),因为它应该。我会尝试从 Netbeans 中运行它。
    • 大家好,当我在 Netbeans 之外运行它时,它仍然会产生同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2011-10-18
    • 2019-10-17
    相关资源
    最近更新 更多