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 的官方文档谈到设置“自定义错误页面”,但那里的建议说

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

如何关闭 Jetty 的默认错误处理程序并按照上面指出的方式完成错误处理?

4

2 回答 2

6

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

如果用户没有明确指定 some ErrorHandler,Jetty 服务器实例似乎注册了一个 default ErrorHandler

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

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

文件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>
于 2013-12-29T02:35:55.743 回答
1

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

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

于 2013-11-15T16:23:09.063 回答