过去几个月,我一直试图在我的应用程序中嵌入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,因为这是关于嵌入的文档最多的版本。
不,也没有工作。编译时如何打包Jetty罐子?我只是将它们的文件复制到一个jar文件中,并将其添加为eclipse中的构建路径,然后将其复制到最终程序的jar文件中。 – Jsnman 2013-03-03 18:37:16
我在Netbeans上。所有的罐子都在一个lib文件夹中。似乎是一个类加载问题。什么是'Plugin.resourceBase'? – PeterMmm 2013-03-03 18:45:10
也许这个消息的谷歌:'javax.servlet.UnavailableException:Servlet类what.ever.Class不是一个javax.servlet.Servlet' – PeterMmm 2013-03-03 18:50:39