Maven を使用して基本的な Web アプリを作成し、Eclipse 4.2 にインポートしています。サーバーとしてTomcat 7をセットアップしています。Web アプリ用に mongodb で春のデータを構成しようとしています。
ここにあるコードベースの構成アプローチに従っています: WebApplicationInitializer
サーバー上でプロジェクトを実行すると、作成した WebApplicationInitializer クラスで null ポインター例外が発生します。行: container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); nullを返しています。
私は一体何が欠けているのですか?注釈を使用してゼロから Web アプリを作成するのは初めてです。
問題のクラスは次のとおりです。
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 ) で、サーブレットが既に登録されている場合、 container.addServlet が null を返すことを読みましたか? Tomcat はすでにサーブレットを登録していますか?
皆さんの時間を無駄にして申し訳ありません。同じサーブレットを登録する web.xml ファイルもありました。 したがって、これはnullを返すだけでした。404の修正に進みますが、おそらく何らかの形でコントローラーを台無しにしました。