Показать настройки после «Не удалось инициализировать контекст» - PullRequest
4 голосов
/ 28 апреля 2011

Я ищу пару дней для ответа на следующий вопрос:

У меня есть Spring 2.5 веб-приложение, и я хочу показать определенный экран настройки, если инициализация контекста весныпровалился.На этом экране настройки они могут посмотреть, почему сервер не запускается, и, возможно, внести некоторые изменения (загрузить новый config.properties файл)

Но как я могу реализовать это с умом?Spring уже что-то вроде этого или мне нужно расширить ContextLoader, например?

Я пытался что-то в web.xml, как это: но это не похоже на работу:

   <error-page>
        <error-code>404</error-code>
        <location>/public/setup.jsp</location>
    </error-page>

Решение:

Я начинаю с файла web.xml по умолчанию, и после завершения установки я заменяю файл web.xml на правильный «application» web.xml.Поскольку заменяется файл web.xml, серверы перезапускаются.Это прекрасно работает.Еще раз спасибо за ваши ответы.

1 Ответ

3 голосов
/ 29 апреля 2011

Вот три идеи:

  • Измените загрузчик контекста, чтобы перехватить исключение, и добавьте сервлет / отображение в контейнер, который перенаправляет все соответствующие отображения в динамически загруженный сервлет.Ознакомьтесь с этим потоком переполнения стека инструкций о том, как создать динамический сервлет: Динамически добавить сервлет в servletConfig
  • В качестве альтернативы вы можете задать стандартный сервлет, который обрабатывает все запросы и пересылает ихна страницу конфигурации.После этого вы можете иметь подпружиненный компонент, который удаляет тот сервлет и отображение из контекста, когда он завершает инициализацию (вы можете поместить этот код в ловушку postInitalize пружинного компонента.)
  • Вы также можете попробовать создатьпрослушиватель, который проверяет, существует ли допустимый контекст приложения, и удаляет «отображение» по умолчанию / выходы сервлета.

Я не думаю, что существуют стандартные механизмы для добавления / удаления сервлетов и отображения из контейнера,Но похоже, что большинство контейнеров имеют некоторые API, которые делают это.

Есть третий путь, на который вы намекаете.Это означает, что если произошла ошибка 404, сервлет не запустился.Если вы пойдете по этому пути, я думаю, что вы столкнетесь с проблемой, что 404 ошибки могут произойти только потому, что пользователь толстый перебрал URL.

...