我正在尝试部署一个扩展类的 Web 应用程序:org.eclipse.jetty.proxy.ProxyServlet。
在 start.ini 文件中,我设置:
OPTIONS=Server,client,proxy
我通过使用以下命令验证了 jetty-distribution-9.0.3.v20130506/lib/jetty-proxy-9.0.3.v20130506.jar 文件实际上包含在类路径中:
java -jar start.jar --dry-run
当我尝试启动服务器时,仍然出现以下异常:
java.lang.ClassNotFoundException: org.eclipse.jetty.proxy.ProxyServlet
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:420)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:382)
[...]
所以我搜索了文档,从Jetty Classloading 部分我意识到我必须配置 WebAppContext,以便将 ProxyServlet 取消设置为服务器类(因为服务器类对 Web 应用程序是隐藏的)。因此,我通过添加以下行修改了 jetty-web.xml 文件:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="prependServerClass"><Arg>-org.eclipse.jetty.proxy.</Arg></Call>
</Configure>
但它没有用!然后我读到了这个:
您可以通过 WebAppContext 上的几种方法配置 webapp 类加载。如果您使用 Jetty API,则可以直接调用这些方法,或者如果您使用 Context Provider (???),则可以从上下文 XML 文件中注入方法。您不能从 jetty-web.xml 文件设置这些方法,因为它在设置类加载器配置后执行。
这是什么意思??我不是在代码中配置应用程序,而是仅通过 XML 文件。那么如果它不在 jetty-web.xml 文件中,我应该把 WebAppContext 配置放在哪里呢?我必须修改的路径、文件名和 XML 部分究竟是什么?