停用Jetty的默认404错误处理程序

时间:2013-06-19 23:10:06

标签: spring-mvc jetty web.xml jetty-8

我想在Spring 3.1 Web应用程序中提供自定义404错误页面,但我无法停用Jetty 8的默认404错误页面。

开箱即用的Jetty 8提供了一个默认的404错误页面: 当访问Jetty托管的网站,并提供未由任何servlet处理的URL路径时(例如通过访问http://www.example.com/nonexisting),Jetty使用自己的默认HTML错误页面进行响应:

HTTP ERROR 404

Problem accessing /nonexisting. Reason:

    Not Found
Powered by Jetty://

要替换此默认行为,

但我的网站仍然会返回 Jetty自己的默认HTML错误页面

Jetty 8's official documentation talks about setting up a "custom error pages",但那里的建议说

  • 配置一个自定义Jetty错误处理程序(我不想这样做,我想在我自己的Spring @Controller中进行,如上所述)
  • 创建“捕获所有上下文并创建映射到/ URI的”根“Web应用程序”。 (我不希望在web.xml内部执行此操作。我已将Spring MVC的DispatcherServlet映射到/。

如何关闭Jetty的默认错误处理程序并按上述指示完成错误处理?

2 个答案:

答案 0 :(得分:6)

我的问题的解决方案是添加自定义org.eclipse.jetty.server.handler.ErrorHandler

如果用户未明确指定某些ErrorHandler,则Jetty服务器实例似乎注册了默认ErrorHandler

http://www.eclipse.org/jetty/documentation/current/custom-error-pages.html所述,要注册自定义ErrorHandler,您可以按照以下步骤操作。

  1. 实现一些org.eclipse.jetty.server.handler.ErrorHandler子类,例如com.example.CustomErrorHandler
  2. 使这个子类可用于您的Eclipse服务器实例,例如:将CustomErrorHandler捆绑在jar文件中,然后将该jar文件复制到${jetty.base}/lib/ext目录中。
  3. 配置Jetty服务器实例以将此自定义ErrorHandler注册为bean:
  4. 档案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>
    

答案 1 :(得分:1)

以下是定义自定义错误页面的方法 -

http://wiki.eclipse.org/Jetty/Howto/Custom_Error_Pages