我正在使用maven创建一个基本的Web应用程序,然后导入到Eclipse 4.2。我将Tomcat 7设置为服务器。我正在尝试使用mongodb为Web应用程序配置spring数据。

我正在遵循此处找到的基于代码的配置方法:WebApplicationInitializer

当我在服务器上运行项目时,在我创建的WebApplicationInitializer类中得到一个空指针异常。该行:
container.addServlet(“dispatcher”,新的DispatcherServlet(dispatcherContext));返回null。

我到底想念什么?我对使用注释从头开始创建Web应用程序有些陌生。

这是有问题的类(class):

public class ATWWebAppInitializer implements WebApplicationInitializer
{
    @Override
    public void onStartup(ServletContext container) throws ServletException
    {
      // Create the 'root' Spring application context
      AnnotationConfigWebApplicationContext rootContext = new  AnnotationConfigWebApplicationContext();
      rootContext.register(SpringMongoConfig.class);

      // Manage the lifecycle of the root application context
      container.addListener(new ContextLoaderListener(rootContext));

      // Create the dispatcher servlet's Spring application context
      AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
      dispatcherContext.register(ATWDispatcherConfig.class);

      // Register and map the dispatcher servlet
      ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
      dispatcher.setLoadOnStartup(1);
      dispatcher.addMapping("/*");
    }
}

尝试将其添加到POM中:
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

没有进行任何更改,仍然获得了NPE。我在这里(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html)读到,如果已经注册了servlet,container.addServlet返回null? Tomcat是否已经注册了servlet?

抱歉浪费大家的时间,我有一个web.xml文件也注册了相同的servlet。 因此,这个仅返回null。现在要修复404,可能以某种方式弄坏了 Controller 。

最佳答案

根据ServletContext JavaDoc,如果已注册具有指定名称的servlet,则addServlet()方法将返回null。

关于eclipse - WebApplicationInitializer container.addServlet()返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18499081/

10-13 02:15