3

Debian Wheezy サーバーがあり、Jetty を使用して Java Web アプリケーションを .war ファイルとしてデプロイしたいと考えています。基本的な jsp ページを適切に表示するように Jetty を構成しようとしています。しかし、JSP サポートの構成に問題があり、Debian 固有のドキュメントを見つけることができません。

jetty8およびパッケージを介して Jetty 8 をインストールし、libjetty8-javaIntelliJ IDEA を介してアプリケーションを作成しました。結果の .war には、index.jsp と WEB-INF/web.xml ファイルだけが含まれます。web.xml ファイルには次のものが含まれます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
</web-app>

index.jsp ファイルには次のものが含まれます。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head><title>Test</title></head>
  <body>Test</body>
</html>

そこにはあまりにも派手なものはありません。JETTY_ARGS次に、 を に変更してJetty での JSP サポートを有効にし、.war を に配置して/etc/default/jetty8、Jetty サーバーを再起動しました。OPTIONS=default,jsp$JETTY_HOME/webapps

ページの読み込みに失敗し、ログに次のエラーが残りました:

2013-03-22 22:39:38.914:INFO:oejs.Server:jetty-8.1.3.v20120416
2013-03-22 22:39:39.034:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{,file:/var    /lib/jetty8/webapps/root/},file:/var/lib/jetty8/webapps/root/
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[...snip...]
        at org.eclipse.jetty.start.Main.invokeMain(Main.java:457)
        at org.eclipse.jetty.start.Main.start(Main.java:602)
        at org.eclipse.jetty.start.Main.main(Main.java:82)
Caused by:
java.lang.NoClassDefFoundError: org/apache/tomcat/PeriodicEventListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
[...snip...]
        at org.eclipse.jetty.start.Main.start(Main.java:602)
        at org.eclipse.jetty.start.Main.main(Main.java:82)

これにより、 にインクルードし、 ( の NoClassDefFoundError を修正するため) をインクルードし、最後に( のNoClassDefFoundError を修正するため)にインクルードtomcat-api.jarしました。$JETTY_HOME/lib/exttomcat-juli.jarorg.apache.juli.logging.LogFactorytomcat-jasper-el.jarorg.apache.el.ExpressionFactoryImpl

クラスパス内の現在の JSP 関連の jar は次のようになります。

/usr/share/jetty8/lib$ ls -l jsp
total 0
lrwxrwxrwx 1 root root 28 Jun 25  2012 javax.el.jar -> ../../../java/el-api-2.2.jar
lrwxrwxrwx 1 root root 29 Jun 25  2012 javax.servlet.jsp.jar -> ../../../java/jsp-api-2.2.jar
lrwxrwxrwx 1 root root 25 Jun 25  2012 javax.servlet.jsp.jstl.jar -> ../../../java/jstl1.1.jar
lrwxrwxrwx 1 root root 31 Jun 25  2012 org.apache.jasper.jar -> ../../../java/tomcat-jasper.jar
lrwxrwxrwx 1 root root 26 Jun 25  2012 org.apache.taglibs.standard.jar -> ../../../java/standard.jar
/usr/share/jetty8/lib$ ls -l ext
total 0
lrwxrwxrwx 1 root root 28 Mar 23 09:59 tomcat-api.jar -> ../../../java/tomcat-api.jar
lrwxrwxrwx 1 root root 34 Mar 23 09:45 tomcat-jasper-el.jar -> ../../../java/tomcat-jasper-el.jar
lrwxrwxrwx 1 root root 29 Mar 23 09:43 tomcat-juli.jar -> ../../../java/tomcat-juli.jar

ディレクトリ内の jar はjsp、デフォルトの Jetty インストールによって提供されるものですが、私はext.

私の現在のエラーはこれです:

java.lang.IllegalStateException: No org.apache.tomcat.InstanceManager set in ServletContext
        at org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(InstanceManagerFactory.java:35)
        at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598)
[...snip...]
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
        at java.lang.Thread.run(Thread.java:679)

調査によると、Tomcat ライブラリを .war に含めた場合にこれが発生する可能性があるようですが、そうではありません。ここからどこに進むべきか完全にはわかりません。また、これをカバーするドキュメントを見つけることができません。

Debian Wheezy で Jetty 8 を使用して JSP を有効にすることに成功した人はいますか?

4

2 に答える 2

1

AWS で jetty8/Ubuntu 12.10 を使用してサーブレット アノテーションを設定していましたが、同様の問題がありました。まあ、少なくとも PeriodicEventListener NCDFE/CNF 例外までは -- それ以降は、あなたとは異なり、ランダムな Tomcat JAR の追加を開始する永続性がありませんでした。;-)

私の場合、start.config の OPTIONS 仕様を絞り込むことで問題が解決しました。私は怠惰に「すべて」を使用しました。これはもちろん合法ですが、厳密に必要な範囲よりも幅が広くなっています。仕様を「annotations,plus,default,*」に変更するとうまくいきました。正確な理由は調べていませんが、「All」によってロードされた余分な JAR の 1 つに未解決の依存関係があったと推測されます。

于 2013-05-13T13:27:09.117 に答える