有没有一种方法可以创建没有web.xml的自定义404页面?

时间:2018-10-20 12:30:46

标签: java spring spring-mvc

因此,基本上,我可以使用web.xml创建自定义错误页面:

Grape::Entity

但是到目前为止,在我的项目中,我没有使用web.xml,而是倾向于仅使用Java代码。

在web.xml中是否有适当且简单的方法来执行操作,而不使用它(创建自定义错误页面)? 还有,如果没有这种方法,那么仅添加web.xml来处理自定义错误页面会是一个不好的举动吗?

4 个答案:

答案 0 :(得分:0)

您可以创建一个Java类及其控制器。例如,ErrorController在此处使用RequestMapping并为其创建一个jsp或thymeleaf前端页面。

这是一种好习惯https://www.baeldung.com/custom-error-page-spring-mvc 只是谷歌。

答案 1 :(得分:0)

这是@ControllerAdvice在Spring MVC中的作用

@ControllerAdvice
public class GlobalExceptionHandler {
   @ExceptionHandler({NoHandlerFoundException.class})
   @ResponseStatus(value = HttpStatus.NOT_FOUND)
   public void handleNotFound(HttpSession session, HttpServletRequest req, HttpServletResponse httpServletResponse, Exception ex) {
   }
}

也将此行添加到您的WebApplicationInitializer

public class CCPMWebAppInitializer implements WebApplicationInitializer {

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {

      // Create the 'root' Spring application context
      AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
      ....
       DispatcherServlet dispatcherServlet = new DispatcherServlet(rootContext);
       dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
      ...
  }

答案 2 :(得分:0)

好吧,就像@ MarkA.Fitzgerald在评论中提到的那样:

  

根据stackoverflow.com/a/13450154/1840078,社区似乎感觉没有办法做到这一点。

所以,我想,我可以使用web.xml进行诸如创建自定义错误页面之类的简单操作。我发现它简单而干净,而不是尝试在Java中对其进行“硬编码”。

答案 3 :(得分:0)

您可以在一个配置类中创建一个EmbeddedServletContainerCustomizer。例如

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
    return container -> {
        ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/exceptions/not-found.jsp");

        container.addErrorPages(error404Page);
    };
}