Как я могу исправить StackOverflowError на Struts DispatchAction? - PullRequest
2 голосов
/ 01 апреля 2009

Вот ситуация: Я практиковался в создании мини-приложения для блога. Я использовал EventDispatchAction от Strut для обработки всех методов, связанных с публикацией, таких как обновление и вывод сообщений.

У меня есть метод update () (http://mywebsite/post?update), который обновляет базу данных, а затем, если она прошла успешно, она перенаправляется в тот же класс действий, но я использовал другой метод для обработки, метод list () (http://mywebsite/post?list), в котором перечислены все сообщения текущего пользователя. Проблема в том, что он не работает и выдает:

javax.servlet.ServletException:

Серверный компонент HTTP Монитор обнаружил java.lang.StackOverflowError. это происходит, когда есть бесконечный цикл в веб-модуле. Исправить причину бесконечного цикла перед запуском снова веб-модуль.

Ребята, у вас есть идеи, как это исправить? Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Я решил это, ребята. Мне просто нужно поместить значение в параметр моего форварда, в моем случае я должен сделать: post? List = list вместо просто post? List (нормальный способ). Метод игнорируется, я думаю, если он не имеет значения. Это действительно странно, почему Struts ведет себя так. Может быть, кто-то может пролить свет на это?

1 Ответ

1 голос
/ 01 апреля 2009

Нет больше информации об исключениях, такой как трассировка стека?

У вас есть юнит-тесты для метода list()? Переполнение стека почти всегда вызывается рекурсивным методом (или циклом методов), но без какой-либо дополнительной информации о трассировке стека его очень сложно диагностировать дальше.

Если вы не можете получить полную трассировку стека после того, как возникло исключение, вы можете захотеть добавить еще вход в list() и методы, которые он вызывает, чтобы показать вам, где происходит рекурсия.

РЕДАКТИРОВАТЬ: Хорошо, глядя на трассировку стека, похоже, что у вас есть одно действие, перенаправляющее либо на себя, либо на другое действие, которое пересылает обратно на первое. Похоже, ваш код не задействован, учитывая, что он не отображается в трассировке стека. Проверьте конфигурацию Struts на наличие циклов.

Другой интересный фрагмент трассировки стека - «org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter» - это приложение работает в вашей IDE? По-прежнему происходит сбой, если вы запускаете его , а не в IDE?

...