2013-05-10 50 views
0

我試圖部署一個擴展類的web應用程序:org.eclipse.jetty.proxy.ProxyServlet。無法在Jetty 9上配置Webapp Classloading並設置系統類

在start.ini文件,我設置:

OPTIONS=Server,client,proxy 

和我覈實,碼頭,分佈9.0.3.v20130506/lib目錄/碼頭,代理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) 
[...] 
到類路徑中,通過使用命令實際上包括210

所以我通過文檔搜索,並從部分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,則可以直接調用這些方法,或者如果使用上下文提供程序(???),則可以從上下文XML文件注入方法。您不能從jetty-web.xml文件設置這些方法,因爲它在設置了類加載器配置後執行。

這是什麼意思?我沒有在代碼中配置應用程序,而只是通過XML文件。因此,如果它不在jetty-web.xml文件中,我應該在哪裏放置WebAppContext配置?準確地說,我必須修改什麼路徑,文件名和XML部分?

回答

0

很多在這裏。首先,典型的用法...通常,使用ProxyServlet的人只需將jetty-proxy及其依賴項放入其war文件中,並將其配置爲其web.xml中的任何其他servlet。

接下來..你提到一個jetty-web.xml文件。如果這是您的web應用程序的內部中的xml文件,那麼在web應用程序上下文基本上已配置完成後處理該文件,因此對於能夠影響Web應用程序上下文的類加載器配置而言太遲了。您需要編輯以調整Web應用程序上下文的服務器類的文件是您正在部署的Web應用程序的上下文xml文件。換句話說...這種類型的:

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

這些上下文文件通常位於碼頭9的jetty.home/webapps目錄,和先前在jetty.home /上下文目錄中6,7 ,和8.如果您正在使用分發查找webapps目錄中的text.xml文件,那麼這是一個用於測試webapp的示例。

+0

好的,這真的有幫助,非常感謝! – Genny 2013-05-13 08:47:29