2015-11-22 4 views
3

У меня есть типичное приложение Spring with Hibernate с использованием конфигурации на основе аннотаций (Spring 4 MVC + Hibernate 4 + MySQL + Maven интеграции).Нет найденного WebApplicationContext: зарегистрирован ли ContextLoaderListener? весной 4 MVC

Вот мой класс:

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 

public class AppInitializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext container) throws ServletException { 

     AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
     ctx.register(AppConfig.class); 
     ctx.setServletContext(container); 

     ServletRegistration.Dynamic servlet = container.addServlet(
       "dispatcher", new DispatcherServlet(ctx)); 

     servlet.setLoadOnStartup(1); 
     servlet.addMapping("/"); 
    } 

} 

Содержание выше напоминает содержание web.xml, как мы используем DispatherServler фронт-контроллера, назначая отображение (URL-шаблон в XML) и вместо предоставления путь к файлу конфигурации пружины (spring-servlet.xml), здесь мы регистрируем класс конфигурации.

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered? 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:252) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Я загружаю ту же войну в другую кошку 7, и она работает! и в моем tomcat также работают другие приложения, такие как http://localhost:8080/examples/. Strange

ответ

1
public class AppInitializer implements WebApplicationInitializer{ 
@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext webApplicationContext = null; 
    webApplicationContext = new AnnotationConfigWebApplicationContext(); 
    webApplicationContext.setConfigLocation("//write the package name pointing to configuration classes 
like webApplicationConfig and RootWebApplicationConfig classes//"); 

    DispatcherServlet dispatcherServlet = null; 
    dispatcherServlet = new DispatcherServlet(webApplicationContext); 

    ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", dispatcherServlet); 
    servlet.addMapping("*.mvc"); 
    servlet.setLoadOnStartup(2); 
} 

}

0

Я видел эту ошибку, когда возникает проблема зависимостей JAR или отсутствие зависимостей. Если вы в Eclipse, иногда я теряю свои зависимости от Maven. Вы можете проверить это, выполнив правый щелчок в проекте, перейдите на раздел развертывания и убедитесь, что Maven Dependencies существует. Если не нажать «Добавить» и выберите «Зависимости Maven».

0

Попробуйте добавить ContextLoaderListener к вашему ServletContext, здесь:

conteiner.addListener(new ContextLoaderListener(ctx)); 
1

Я просто объяснить, как это сделать с помощью пользовательского класса и реализации интерфейса. Я стараюсь решить этот вопрос, у меня есть только пятимесячный опыт весны-mvc, и я не сделал это настраиваемое распределение сервлетов весны в практике. Надеюсь, мой пост поможет вам.

конфигурации

Maven: Добавить любой Spring MVC версия зависимость

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>3.2.4</version> 
</dependency> 

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
</dependency> 

Пользовательские Initializer класс

public class AppInitializer implements WebApplicationInitializer { 
    @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("/*"); 
    } 

    private AnnotationConfigWebApplicationContext getContext() { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocation("eu.kielczewski.example.config"); 
     return context; 
    } 

Конфигурация классы

@Configuration 
@ComponentScan(basePackages = "eu.kielczewski.example") 
public class AppConfig { 
} 
Смежные вопросы