我将在这里描述什么对我有用。这可能会在 Jetty 的未来版本中发生变化,因此请确保您使用的版本与这些配置兼容。
我的码头版本:9.4.5.v20170502。
第 1 步:不要更改任何 Jetty 内部文件
在尝试使事情正常运行时,我们有时会更改服务器的内部配置,希望它会有所作为。虽然我认为可以在服务器级别设置此配置,但我强烈反对这样做,因为它会使您的应用程序无法跨不同的 Jetty 服务器移植。
第 2 步:将您需要的所有与 Jetty 相关的 JAR 移动到您的类路径中
这意味着将jetty-server-<version>.jar、jetty-servlets-<version>.jar 和您需要的任何其他jetty-<something>-<version>.jar 复制到您的WEB-INF/lib 目录中。
如果您使用 Maven,只需在 pom.xml 中声明这些依赖项,无需指定任何范围。
还有其他方法可以将这些文件包含在您的类路径中,但同样,出于可移植性原因,我不鼓励更改任何服务器文件。
第 3 步:创建 jetty-web.xml 文件
此文件包含特定于 Jetty 的设置。它位于WEB-INF,与web.xml 文件所在的位置相同。
然后,在这个jetty-web.xml 中,使用以下结构:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="parentLoaderPriority">true</Set>
<Call name="addServerClass">
<Arg>-org.eclipse.jetty.server.</Arg>
</Call>
<Call name="addServerClass">
<Arg>-org.eclipse.jetty.http.</Arg>
</Call>
</Configure>
(使用您要导入的类的包。您可以通过重复Call 结构添加任意数量的类或包)。
请注意软件包名称前面的- 符号 - 这意味着服务器应该从禁止列表中删除该软件包。还要注意包名末尾的.。
有关 Jetty 中的类加载过程的更多信息:https://www.eclipse.org/jetty/documentation/9.4.5.v20170502/jetty-classloading.html