Java 在调用不存在的URL时避免StackOverflowerError

Java 在调用不存在的URL时避免StackOverflowerError,java,spring,spring-mvc,tomcat7,Java,Spring,Spring Mvc,Tomcat7,我有一个在Tomcat7.0服务器上运行的带有SpringMVC的web应用程序 应用程序运行良好,但每当我尝试调用未配置的URL时,我都会看到大量错误和stackoverflowerrror异常。我的日志示例: SEVERE: Servlet.service() for servlet BatchUI threw exception java.lang.StackOverflowError at org.apache.catalina.core.ContainerBase.getMan

我有一个在Tomcat7.0服务器上运行的带有SpringMVC的web应用程序

应用程序运行良好,但每当我尝试调用未配置的URL时,我都会看到大量错误和
stackoverflowerrror
异常。我的日志示例:

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)
我的应用程序初始值设定项如下所示:

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);
}
大约10-15秒后,浏览器会返回一个内部服务器错误,但我的日志会像我发布的日志一样充满跟踪

那么,有没有办法避免这些错误?或者有更好的方法来处理它们

我正在考虑添加一个过滤器并检查请求以验证URL是否存在,如果不存在,则重定向到错误页面或其他内容


非常感谢您的建议。

修改了您的web.xml文件。使用下面的代码

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

404
/error404.jsp

谢谢,这修复了重定向到另一个页面的问题,我仍然想知道是否可以避免出现大量StackOverflower错误异常。看看这个项目,我认为您没有以最佳方式使用spring mvc。这个项目是RESTfulAPI的基础,但它实际上使用SpringMVC