2013-03-03 76 views
0

過去幾個月,我一直試圖在我的應用程序中嵌入Jetty和Quercus,但我還沒有成功。我使用Jetty版本6.1.26和Quercus 4.0.25。Quercus未在Embedded Jetty中運行6

我已經用我的應用程序打包了以下jar包:jetty-6.1.26.jar,jetty-util-6.1.26.jar和servlet-api-2.5-20081211.jar,我從jetty/lib目錄。

這裏是我的代碼,在自己的線程中運行:

public void run(){ 
    try{ 
     server = new Server(Plugin.port); 

     WebAppContext wac = new WebAppContext(); 
     wac.setWar(Plugin.resourceBase); 
     wac.setDescriptor(Plugin.resourceBase + "WEB-INF/web.xml"); 
     wac.setContextPath("/"); 
     wac.setParentLoaderPriority(true); 
     server.setHandler(wac); 

     server.setStopAtShutdown(true); 

     server.start(); 

     Plugin.instance.getLogger().log(Level.INFO, "Started web server at port " + Plugin.port); 
    }catch(Exception e){ 
     Plugin.instance.getLogger().log(Level.SEVERE, "Cannot start web server at port " + Plugin.port + "!"); 
     Plugin.instance.getLogger().log(Level.SEVERE, e.getMessage()); 
    } 
} 

在資源基本目錄,我有一個包含web.xml文件以及櫟WEB-INF一個WEB-INF文件夾/ lib和/許可證。 lib文件夾中的jar包是cdi-16.jar,javaee-16.jar,javamail-141.jar和resin.jar。

web.xml中具有在其Web應用程序代碼中包含:

<servlet> 
<servlet-name>Quercus Servlet</servlet-name> 
<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> 
<init-param> 
    <param-name>license-directory</param-name> 
    <param-value>WEB-INF/licenses</param-value> 
</init-param> 
</servlet> 

<servlet-mapping> 
<servlet-name>Quercus Servlet</servlet-name> 
    <url-pattern>*.php</url-pattern> 
</servlet-mapping> 

<welcome-file-list> 
    <welcome-file>index.php</welcome-file> 
</welcome-file-list> 

當我啓動該程序,我在控制檯得到這個消息:

10時31分46秒[嚴重] 2013-03-03 10:31:46.570:INFO:/:不可用javax.servlet.UnavailableException:Servlet類com.caucho.quercus.servlet.QuercusServlet不是javax.servlet.Servlet

然後我可以訪問HTML Jetty服務器上的文件,但是當我嘗試訪問PHP時,我收到一條消息

javax.servlet.UnavailableException: Servlet class com.caucho.quercus.servlet.QuercusServlet is not a javax.servlet.Servlet 
at org.mortbay.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:362) 
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:243) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:736) 
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282) 
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518) 
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
at org.mortbay.jetty.Server.doStart(Server.java:224) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at me.jsn_man.WebServer.WebServer.run(WebServer.java:52) 

如果有人可以提供幫助,將不勝感激。

此外,如果您有關於我應該使用什麼版本的Jetty和Quercus的建議,那也是有幫助的。我只使用Jetty 6,因爲這是關於嵌入的文檔最多的版本。

回答

0

最近我做了同樣的事情。

我然後提取戰爭到當前工作目錄的文件夾無需做任何修改。

安裝在嵌入式碼頭這樣的:

WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setWar("./quercus"); 

    server.setHandler(webapp); 
+0

不,也沒有工作。編譯時如何打包Jetty罐子?我只是將它們的文件複製到一個jar文件中,並將其添加爲eclipse中的構建路徑,然後將其複製到最終程序的jar文件中。 – Jsnman 2013-03-03 18:37:16

+0

我在Netbeans上。所有的罐子都在一個lib文件夾中。似乎是一個類加載問題。什麼是'Plugin.resourceBase'? – PeterMmm 2013-03-03 18:45:10

+0

也許這個消息的谷歌:'javax.servlet.UnavailableException:Servlet類what.ever.Class不是一個javax.servlet.Servlet' – PeterMmm 2013-03-03 18:50:39

0

嘗試從櫟戰爭去除的JavaEE-16.jar。我將從未來的Quercus發行版中刪除它。謝謝。