无法在Jetty 9上配置Webapp类加载并设置系统类

时间:2013-05-10 16:16:47

标签: web-applications jetty classloader

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

1 个答案:

答案 0 :(得分:0)

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

接下来..你提到了一个jetty-web.xml文件。如果这是您的webapp 中的xml文件,则在基本配置了webapp上下文之后处理该文件,因此该方能够影响该类的加载器配置为时已晚。 webapp上下文。您需要编辑以调整webapp上下文的服务器类的文件是您正在部署的Web应用程序的上下文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的示例。