2016-05-10 5 views
1

Tomcat 7.0サーバーの上で動作するSpring MVCを持つWebアプリケーションがあります。存在しないURLへの呼び出しが行われたときにStackOverflowErrorを避ける

アプリケーションは正常に動作しますが、設定されていないURLを呼び出そうとすると、エラーが多く表示され、StackOverflowError例外が発生します。私のログのサンプル:

SEVERE: Servlet.service() for servlet BatchUI threw exception 
java.lang.StackOverflowError 
    at org.apache.catalina.core.ContainerBase.getManager(ContainerBase.java:466) 
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2905) 
    at org.apache.catalina.connector.Request.getSession(Request.java:2310) 
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:897) 
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229) 
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:592) 
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229) 
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:592) 
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229) 
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:592) 
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229) 

私のアプリケーションの初期化子は、次のようになります。周りの10〜15秒後

private static final String DISPATCHER_SERVLET_NAME = "BatchUI"; 
private static final String DISPATCHER_SERVLET_MAPPING = "/"; 

@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    //Load application context 
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
    rootContext.register(SpringContextConfiguration.class); 
    rootContext.setDisplayName("User Interface"); 

    //Context loader listener 
    servletContext.addListener(new ContextLoaderListener(rootContext)); 

    //Dispatcher servlet 
    ServletRegistration.Dynamic dispatcher = 
      servletContext.addServlet(DISPATCHER_SERVLET_NAME, new DispatcherServlet(rootContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping(DISPATCHER_SERVLET_MAPPING); 
} 

は、内部サーバーエラーがブラウザに返されますが、私のログがいっぱい取得します私が投稿したような痕跡。

これらのエラーを回避する方法はありますか?それとも、それを処理するにはより良い方法でしょうか。

私はフィルタを追加し、URLが存在するかどうかを確認する要求をチェックし、存在しない場合はエラーページなどにリダイレクトすることを検討していました。

アドバイスをいただきありがとうございます。

答えて

2

あなたのweb.xmlファイルを変更しました。次のコードを使用します。

<error-page> 
<error-code>404</error-code> 
<location>/error404.jsp</location> 
</error-page> 
+0

ありがとうございます、それは別のページにリダイレクトを修正します、私はStackOverflowError例外がたくさんあることを避けることができますか? –

+0

このプロジェクトを見てくださいhttps://bitbucket.org/hebertsouza87/exemplorest/src 私はあなたが最良の方法で春のmvcを使用していないと思います。このプロジェクトは安らかなAPIのためのベースですが、実際にはspring mvcを使用しています –

関連する問題