過去数か月間、自分のアプリケーションに Jetty と Quercus を埋め込もうとしてきましたが、まだ成功していません。Jetty バージョン 6.1.26 と Quercus 4.0.25 を使用しています。
次の jar をアプリケーションと共にパッケージ化しました: jetty-6.1.26.jar、jetty-util-6.1.26.jar、および jetty/lib ディレクトリからコピーした servlet-api-2.5-20081211.jar。
独自のスレッドで実行される私のコードは次のとおりです。
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 ファイルと、Quercus の WEB-INF/lib および /licenses を含む WEB-INF フォルダーがあります。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 [SEVERE] 2013-03-03 10:31:46.570:INFO:/:Unavailable javax.servlet.UnavailableException: サーブレット クラス com.caucho.quercus.servlet.QuercusServlet は javax.servlet.Servlet ではありません
その後、Jetty サーバー上の HTML ファイルにアクセスできますが、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 のみを使用しています。