2013-08-28 5 views
7

私はmavenで基本的なWebアプリケーションを作成してから、Eclipse 4.2にインポートします。 Tomcat 7をサーバーとしてセットアップしました。私は、Webアプリケーション用のmongodbで春のデータを設定しようとしています。WebApplicationInitializer container.addServlet()がnullを返します

私は、コードベースの構成アプローチを次のですが、ここが見つかりました:私は、サーバー上でプロジェクトを実行するとWebApplicationInitializer

を、私は私が作成したWebApplicationInitializerクラスでnullポインタ例外を取得します。行: container.addServlet( "dispatcher"、新しいDispatcherServlet(dispatcherContext));ヌルが返されます。

私は行方不明ですか?注釈を使用してゼロからWebアプリを作成するのはちょっと新しいです。まだNPEを取得し、何も変更しませんでした

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

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にこれを追加しようとしました:ここ

は、問題のクラスです。サーブレットがすでに登録されている場合、container.addServletはnullを返します( http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html)。 Tomcatはすでにサーブレットを登録していますか?

皆さんの時間を無駄にすることに対するお詫び同じサーブレットを登録しているweb.xmlファイルがありました。だから、これはnullを返すだけでした。今404を固定するために、おそらく何とかコントローラを台無しにしました。

+0

本当にわかりませんが、同様の設定は私のためにはうまくいきます。ですから、本来、 'dispatcher.setLoadOnStartup()'行でnullポインタ例外が発生しています。これは、前の行がnullディスパッチャを与えていることを考慮していますか? –

+0

それは正しいです。ディスパッチャにアクセスする次の行がNPEを投げています。私はそれがサーブレットAPIと関係があるかもしれないと思っています。私はPOMに依存関係を設定していませんでした。私はTomcatのlibディレクトリから自分のビルドパスにjarファイルを追加しました。 – MattG

+0

まあまあ、私はまったく同じ問題を抱えています。純粋に注釈をつけようとすると、 'web.xml'ファイルがありません。 – Jagger

答えて

8

ServletContext JavaDocによると、メソッドaddServlet()は、指定された名前のサーブレットがすでに登録されている場合にnullを返します。

0

@Ravi Rao - あなたは正確です。私はtomcatで私のアプリを動かすのに苦労して、dispatcher.setLoadOnStartup()でNPEを正確に取得していました。

しかし、私があなたが提供した答えを読むと、そのディスパッチャーサーブレットと同じ名前の同じTomcat上で実行されている別のアプリケーションがあることがわかりました。

ディスパッチャーサーブレットの名前を変更したところ、驚くほど効果的でした。 この問題を解決するための正確な手順を説明しました。誰かが役に立つと思った場合は、

関連する問題