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

2023-11-26

我想在 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://

要替换此默认行为,

  • 我已经删除了DefaultHandler来自我的 Jetty XML 文件,
  • 我已经编辑了我的web.xml包含指向的 Servlet 2.5 和 Servlet 3.0 错误处理程序位置/error,
  • 我设立了专门的@Controller用于处理请求/error,

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

Jetty 8 的官方文档谈到了设置“自定义错误页面”,但那里的建议说

  • 配置自定义 Jetty 错误处理程序(我不想这样做,我想在我自己的 Spring 中进行@Controller正如刚才提到的)
  • 创建“捕获所有上下文并创建映射到的“根”Web 应用程序/URI。”(我不想在我的内部这样做web.xml我已经映射了 Spring MVCDispatcherServlet to /.

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


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

如果用户没有明确指定一些ErrorHandler,Jetty服务器实例似乎注册了一个默认的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 in a jar文件,然后复制该文件jar文件到${jetty.base}/lib/ext目录。
  3. 配置您的 Jetty 服务器实例以具有此自定义ErrorHandler注册为 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停用 Jetty 的默认 404 错误处理程序 的相关文章

随机推荐