Deactivate Jetty's default 404 error handler

Abdull picture Abdull · Jun 20, 2013 · Viewed 12.3k times · Source

I want to provide a custom 404 error page in my Spring 3.1 web application, but I cannot deactivate Jetty 8's default 404 error page.

Jetty 8, out of the box, provides a default 404 error page: when visiting a Jetty-hosted website, and providing a URL path that is not handled by any servlet (e.g. by visiting http://www.example.com/nonexisting ), Jetty responses with its own default HTML error page:

HTTP ERROR 404

Problem accessing /nonexisting. Reason:

    Not Found
Powered by Jetty://

To replace this default behavior,

but my website still returns Jetty's own default HTML error page.

Jetty 8's official documentation talks about setting up a "custom error pages", but the suggestions there say

  • to configure a custom Jetty error handler (I don't want to do this, I want to do it inside my own Spring @Controller as mentioned above)
  • to create a "catch all context and create a "root" web app mapped to the / URI." (I don't want to do this as inside my web.xml I have already mapped Spring MVC's DispatcherServlet to /.

How can I turn off Jetty's default error handler and have the error handling be done as pointed out above?

Answer

Abdull picture Abdull · Dec 29, 2013

The solution to my problem was to add a custom org.eclipse.jetty.server.handler.ErrorHandler.

If a user doesn't explicitly specify some ErrorHandler, the Jetty server instance seems to register a default ErrorHandler.

As outlined on https://www.eclipse.org/jetty/documentation/jetty-9/index.html#custom-error-pages, to register a custom ErrorHandler, you can follow the following steps.

  1. Implement some org.eclipse.jetty.server.handler.ErrorHandler subclass, e.g. com.example.CustomErrorHandler.
  2. Make this subclass available to your Eclipse server instance, e.g. by bundling CustomErrorHandler in a jar file and then copying that jar file into the ${jetty.base}/lib/ext directory.
  3. Configure your Jetty server instance to have this custom ErrorHandler registered as a bean:

file jetty.xml:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">

  <!-- more configuration -->
   
  <Call name="addBean">
    <Arg>
      <New class="com.example.CustomErrorHandler">
        <Set name="server"><Ref refid="Server" /></Set>
      </New>
    </Arg>
  </Call>
</Configure>