Gibt es eine Möglichkeit, eine benutzerdefinierte 404-Seite ohne web.xml zu schaffen?

stimmen
1

Also, im Grunde, ich bin in der Lage eine benutzerdefinierte Fehlerseite mit web.xml zu erstellen:

 <error-page>
     <error-code>404</error-code>
     <location>/WEB-INF/pages/error/404.jsp</location>
 </error-page>

Aber so weit, in meinem Projekt verwende ich nicht web.xml und neigen dazu, nur Java-Code zu verwenden.

Gibt es eine richtige und einfache Art und Weise wie in web.xml zu tun , aber ohne es (benutzerdefinierte Fehlerseite erstellen)? Und wenn es keine solche Art und Weise ist , dann wäre es eine schlechte Bewegung seines web.xml hinzufügen nur für Seiten benutzerdefinierte Fehlerbehandlung?

Veröffentlicht am 20/10/2018 um 12:30
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
0

Sie können einen erstellen EmbeddedServletContainerCustomizerinnerhalb einer von Ihnen Konfigurationsklassen. Ex

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

        container.addErrorPages(error404Page);
    };
}
Beantwortet am 21/10/2018 um 19:12
quelle vom benutzer

stimmen
0

Nun, wie @ MarkA.Fitzgerald in den Kommentaren erwähnt:

Die Gemeinde scheint zu spüren, dass es keine Möglichkeit gibt, diese nach stackoverflow.com/a/13450154/1840078 zu tun.

Also, ich denke, ich kann leben mit web.xml so einfache Dinge tun benutzerdefinierte Fehlerseiten wie zu schaffen. Ich finde es einfach und sauber, anstatt zu versuchen, „codiert“ es in Java.

Beantwortet am 20/10/2018 um 14:03
quelle vom benutzer

stimmen
0

Dies ist, was @ControllerAdvice tut in 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) {
   }
}

Fügen Sie auch folgende Zeile zu 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);
      ...
  }
Beantwortet am 20/10/2018 um 12:48
quelle vom benutzer

stimmen
0

Sie können eine Java-Klasse und Controller, um es zu erstellen. Zum Beispiel Errorcontroller Verwendung RequestMapping gibt und eine jsp oder thymeleaf Front-End-Seite für sie erstellen.

Hier ist eine gute Praxis https://www.baeldung.com/custom-error-page-spring-mvc nur Google.

Beantwortet am 20/10/2018 um 12:33
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more