【问题标题】:Failed to configure Webapp Classloading on Jetty 9 and set System Classes无法在 Jetty 9 上配置 Webapp 类加载并设置系统类
【发布时间】:2013-05-05 09:25:30
【问题描述】:

我正在尝试部署一个扩展类的 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 部分到底是什么?

【问题讨论】:

    标签: web-applications jetty classloader


    【解决方案1】:

    这里发生了很多事情。首先,典型用法...通常使用 ProxyServlet 的人只需将 jetty-proxy 及其依赖项放入他们的 war 文件中,并将其配置为 web.xml 中的任何其他 servlet。

    接下来..你提到了一个 jetty-web.xml 文件。如果那是您的 webapp inside 的 xml 文件,那么该文件是在 webapp 上下文基本配置完成后处理的,因此该方无法影响类加载器的配置为时已晚网络应用上下文。您需要编辑以调整 webapp 上下文的服务器类的文件是您正在部署的 webapp 的上下文 xml 文件。换句话说……这种类型:

    http://www.eclipse.org/jetty/documentation/current/quickstart-config-what.html#intro-jetty-configuration-contexts

    这些上下文文件通常位于 jetty 9 的 jetty.home/webapps 目录中,之前位于 6、7 和 8 的 jetty.home/contexts 目录中。如果您使用的是分发版,请查找文本。 webapps 目录中的 xml 文件,这是用于测试 webapp 的示例。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 2013-07-23
      • 1970-01-01
      • 2016-07-25
      • 2020-10-24
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多