找不到404错误页面

时间:2013-08-15 09:40:20

标签: spring-mvc weblogic

我有以下控制器,我可以直接从浏览器访问,没问题,表现如预期:

@RequestMapping("/error404")
public String errorController() {
    return "my-error";
}

web.xml我有以下内容:

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

但是,如果我尝试加载任何不存在的页面(因此服务器生成404错误),我会得到以下内容:

<Error> <HTTP> <BEA-101305> <[ServletContext@13590558[app:_appsdir_Manage_dir module:/myapp path:/myapp spec-version:2.5]] Error-page location: "/error404" for the error-code: "404" causes an infinite loop condition as it throws the same code for which it has been mapped.> 

我做错了吗?我真的不知道在哪里看,为什么会这样。

春天3.2

2 个答案:

答案 0 :(得分:0)

如果您在“/ error404”方法中没有执行任何操作,请尝试对此方法进行注释并插入到spring配置中:

<mvc:view-controller path="/error404" view-name="my-error" />

答案 1 :(得分:0)

我们遇到了同样的问题。我们最终解决了添加DefaultHandler的问题,当没有找到映射时调用它。

下面的一个精简示例,假设您使用JavaConfig。

最初的Spring-MVC设置:

@EnableSpringConfigured
public class BaseWebMvcConfig extends WebMvcConfigurationSupport
{
  @Inject
  private NoMappingFoundHandler noMappingFoundHandler;
  ...

  @Override
  @Bean
  public RequestMappingHandlerMapping requestMappingHandlerMapping()
  {
    final RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();
    handlerMapping.setDefaultHandler(noMappingFoundHandler);
    return handlerMapping;
  }
}

处理程序:

@Component
public class NoMappingFoundHandler extends DefaultServletHttpRequestHandler
{
  @Override
  public void handleRequest(final HttpServletRequest request, final HttpServletResponse response)
      throws ServletException, IOException
  {
    // NoSuchRequestHandlingMethodException throws a "404-Exception", 
    // that is caught by an exception-resolver in our case.
    // Feel free to do whatever you like
    throw new NoSuchRequestHandlingMethodException(request);
  }
}

希望这有帮助。