Debian Wheezy サーバーがあり、Jetty を使用して Java Web アプリケーションを .war ファイルとしてデプロイしたいと考えています。基本的な jsp ページを適切に表示するように Jetty を構成しようとしています。しかし、JSP サポートの構成に問題があり、Debian 固有のドキュメントを見つけることができません。
jetty8
およびパッケージを介して Jetty 8 をインストールし、libjetty8-java
IntelliJ 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/ext
tomcat-juli.jar
org.apache.juli.logging.LogFactory
tomcat-jasper-el.jar
org.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 を有効にすることに成功した人はいますか?