编程语言
首页 > 编程语言> > java – 在Spring中向servlet上下文添加监听器

java – 在Spring中向servlet上下文添加监听器

作者:互联网

我试图在spring 4 webmvc应用程序中使用java配置.在Internet上浏览一些示例后,我有以下WebAppApplicationInitializer.

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;
    }

它在jetty,tomcat中运行良好,但是当我使用树脂4.0.40时. Web服务器显示以下错误:

java.lang.IllegalStateException:无法初始化上下文,因为那里
已经存在根应用程序上下文 – 检查是否有
web.xml中的多个ContextLoader *定义!
    在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:277)
    在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    在com.caucho.server.webapp.WebApp.fireContextInitializedEvent(WebApp.java:3777)
    在com.caucho.server.webapp.WebApp.startImpl(WebApp.java:3687)
    在com.caucho.server.webapp.WebApp.access $400(WebApp.java:207)
    在com.caucho.server.webapp.WebApp $StartupTask.run(WebApp.java:5234)
    在com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173)
    在com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)

当我评论这一行

servletContext.addListener(new ContextLoaderListener(context));

一切正常.

问题是将监听器添加到servlet上下文的目的是什么?是不是将监听器添加到servlet上下文是错误的?

解决方法:

问题是树脂4.0.40中的错误http://bugs.caucho.com/view.php?id=5611. ServletContextListener#contextInitialized()调用两次.在树脂4.0.41中一切正常

标签:java,spring,servlets,resin
来源: https://codeday.me/bug/20190708/1403034.html