使用 Jetty9 Ioc 的服务器实例的错误处理程序

Error Handler For Server Instance using Jetty9 Ioc

我一直在尝试设置一个带有常见错误处理的码头服务器。我正在使用 jetty 9.4.44.v20210927 家庭发行版。根据 jetty-9 doc,我写了一个 class 扩展 ErrorHandler class 并覆盖 handle() 方法。我将其导出为 jar 并将其包含在 lib/ext 中,并且 class 正在被发现并正确加载(使用 --debug-Dorg.eclipse.jetty.LEVEL=DEBUG 标志进行验证)。我还按照文档中的说明将其添加到 jetty.xml 服务器实例。无论做了什么更改,错误仅由默认的 ErrorPageErrorHandler 处理,而不是我的自定义 class。这是我拥有的 xml 上下文文件

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

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    ...
    <Call name="addBean">
        <Arg>
            <New class="com.example.test.CustomErrorHandler"/>
        </Arg>
    </Call>
    ...
</Configure>

注意:我正在尝试为整个服务器实例而不是为特定上下文设置 errorHandler。为单个上下文设置相同的错误处理程序是可行的。但同样不适用于服务器实例。另外,我正在尝试使用码头 IoC 来实现这一点。

您想使用Server.setErrorHandler(ErrorHandler)

参见:https://javadoc.io/static/org.eclipse.jetty/jetty-server/9.4.45.v20220203/org/eclipse/jetty/server/Server.html#setErrorHandler(org.eclipse.jetty.server.handler.ErrorHandler)

所以这意味着...

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

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    ...
    <Set name="errorHandler">
      <New class="com.example.test.CustomErrorHandler"/>
    </Set>
    ...
</Configure>

此服务器级别 ErrorHandler 用于基于 non-webapp 的请求,甚至是具有无法分派到 Web 应用程序的错误的请求。

每个 Web 应用程序都会有自己独特的 ErrorPageErrorHandler,在部署 Web 应用程序时创建。