Я пытаюсь использовать java config в приложении webmvc весной 4. После просмотра некоторых примеров в Интернете у меня есть следующий WebAppApplicationInitializer.Добавление слушателя в контекст сервлета в Spring
public class AppInit implements WebApplicationInitializer {
private static final String CONFIG_LOCATION = "spring.examples.config";
private static final String MAPPING_URL = "/rest/*";
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(MAPPING_URL);
}
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation(CONFIG_LOCATION);
return context;
}
Он отлично работает в причалу, котом, но когда я использую смолы 4.0.40. веб-сервер показывает следующее сообщение об ошибке:
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml! at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:277) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) at com.caucho.server.webapp.WebApp.fireContextInitializedEvent(WebApp.java:3777) at com.caucho.server.webapp.WebApp.startImpl(WebApp.java:3687) at com.caucho.server.webapp.WebApp.access$400(WebApp.java:207) at com.caucho.server.webapp.WebApp$StartupTask.run(WebApp.java:5234) at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173) at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)
Когда я закомментировать эту строку
servletContext.addListener(new ContextLoaderListener(context));
все работает отлично.
Вопрос: Какова цель добавления слушателя в контекст сервлета? Неправильно ли не добавлять слушателя в контекст сервлета?
Почему вы не определяете слушателя через web.xml и таким образом разрешите контейнеру обрабатывать его? – SMA
Я хотел бы иметь веб-приложение без каких-либо конфигураций xml –
Не могли бы вы показать полное сообщение об ошибке с классом, который его выбрал? –