gpt4 book ai didi

java - Spring AbstractAnnotationConfigDispatcherServletInitializer 未找到 WebApplicationContext : no ContextLoaderListener registered

转载 作者:行者123 更新时间:2023-11-29 03:27:04 24 4
gpt4 key购买 nike

我正在使用没有 XML 配置的 Spring 3.2.5。我正在使用 AbstractAnnotationConfigDispatcherServletInitializer 来初始化我的应用程序,并使用 AbstractSecurityWebApplicationInitializer 来初始化 spring security。

我的应用程序使用 Spring Tool Suite 附带的 VMware vFabric tc Server Developer Edition v2.9 部署和运行文件。但是,当我使用 jdk 1.7.0_21 作为 JR 部署到标准 Tomcat 7.0.12 时

HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjava.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:251)note The full stack trace of the root cause is available in the Apache Tomcat/7.0.12 logs.Apache Tomcat/7.0.12

The stacktrace is:

SEVERE: Servlet.service() for servlet [default] in context with path [/auctionmanagerMVC] threw exception
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:251)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

这是我的 AbstractAnnotationConfigDispatcherServletInitializer 代码:

public class CrmWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {

return new Class<?>[]{ServiceConfiguration.class,SecurityConfig.class,SocialContext.class};
}

@Override
protected Class<?>[] getServletConfigClasses() {

return new Class<?>[]{RestMvcConfiguration.class, WebMvcConfiguration.class};
}

@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}

@Override
protected Filter[] getServletFilters() {
return new Filter[]{new HiddenHttpMethodFilter(), new MultipartFilter(), new OpenEntityManagerInViewFilter()};
}
@Override
protected void registerDispatcherServlet(ServletContext servletContext) {
super.registerDispatcherServlet(servletContext);

servletContext.addListener(new HttpSessionEventPublisher());

}
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext appContext = (AnnotationConfigWebApplicationContext)super.createRootApplicationContext();

String profile;
profile = "brett";

appContext.getEnvironment().setActiveProfiles(profile);
return appContext;
}

}
@Configuration
@ComponentScan(basePackages={"com.auctionmanagermvc","com.hodeltech"})
@EnableWebMvc
@EnableHypermediaSupport
class RestMvcConfiguration extends RepositoryRestMvcConfiguration {
}

如果您能提供有关如何在 Tomcat 中启动此应用程序的任何帮助,我们将不胜感激。由于这个问题,我无法部署到 Heroku 或 Amazon Elastic Beanstalk 等云供应商。

非常感谢您!

编辑:添加 AbstractSecurityWebApplicationInitializer

public class CrmSecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
/**
* Instruct Spring Security to use the {@link DispatcherServlet}'s
* {@link WebApplicationContext} to find the springSecurityFilterChain.
*/
@Override
protected String getDispatcherWebApplicationContextSuffix() {
return AbstractDispatcherServletInitializer.DEFAULT_SERVLET_NAME;
}

/**
* Insert the following filters before Spring Security. Be careful when inserting
* filters before Spring Security!
*/
@Override
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
// insertFilters(servletContext, new HiddenHttpMethodFilter(), new MultipartFilter() , new OpenEntityManagerInViewFilter());
}

/**
* Register the {@link HttpSessionEventPublisher}
*/
@Override
protected boolean enableHttpSessionEventPublisher() {
return true;
}

}

编辑:我注意到的另一件事:使用 vFabric 服务器启动时,似乎 spring 对所有类进行了两次扫描。例如,我会在配置方法中放置一条日志记录语句,它会得到两次输出。在 Tomcat 下运行时,我只看到一次日志记录语句。我不知道这是否与这个问题有关,但这是我注意到的一个有趣的区别。

最佳答案

我遇到了同样的错误,在我的情况下,解决方案也不同。我没有覆盖 AbstractSecurityWebApplicationInitializer 的 getDispatcherWebApplicationContextSuffix 方法。

从你的问题中添加实现后,一切都开始工作了:

@Override
protected String getDispatcherWebApplicationContextSuffix() {
return AbstractDispatcherServletInitializer.DEFAULT_SERVLET_NAME;
}

关于java - Spring AbstractAnnotationConfigDispatcherServletInitializer 未找到 WebApplicationContext : no ContextLoaderListener registered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20509348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com