Я использую Jetty (версия "null 6.1.22") на Ubuntu 10.04. Он работает нормально, пока мне не понадобится поддержка JSP. Согласно нескольким сообщениям в блоге, мне нужно установить JETTY_ARGS
к OPTIONS=Server,jsp
. Однако, если я помещу это в /etc/default/jetty
:
JETTY_ARGS=OPTIONS=Server,jsp
и перезапустите Jetty через /etc/init.d/jetty stop && /etc/init.d/jetty start
, он сообщает об успехе, но не принимает соединения. Я замечаю, что он что-то записывает в /usr/share/jetty/logs/out.log
:
2012-09-11 11:19:05.110:WARN::EXCEPTION
java.io.FileNotFoundException: /var/cache/jetty/tmp/OPTIONS=Server,jsp (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:137)
at java.io.FileInputStream.<init>(FileInputStream.java:96)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:87)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:178)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:630)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:776)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:741)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
at org.mortbay.xml.XmlParser.parse(XmlParser.java:188)
at org.mortbay.xml.XmlParser.parse(XmlParser.java:204)
at org.mortbay.xml.XmlConfiguration.<init>(XmlConfiguration.java:109)
at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:969)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.mortbay.start.Main.invokeMain(Main.java:194)
at org.mortbay.start.Main.start(Main.java:534)
at org.mortbay.jetty.start.daemon.Bootstrap.start(Bootstrap.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:177)
То есть все, что я помещаю в JETTY_ARGS, он интерпретирует как имя файла внутри /var/cache/jetty/tmp/
и пытается разобрать этот файл как XML (или он анализирует какой-то другой XML и пытается прочитать этот файл как DTD? Я не уверен.). Для меня это не имеет никакого смысла, тем более, что этот каталог полностью пуст. Я проверил это с несколькими другими строками, не только OPTIONS=Server,jsp
.
Обновить:
В соответствии с эта страница в Eclipsepedia я смогу запустить Jetty, вызвав:
java -jar start.jar OPTIONS=Server,jsp
Это создает точно такое же исключение, как указано выше. Просто вызов этого работает, но снова без поддержки JSP:
java -jar start.jar
Часть вашего вывода, в которой говорится org.mortbay.start.Main.start
означает, что вы используете версия Jetty (6.x или более ранняя).
Любая документация, которую вы нашли на eclipse.org/jetty/documentation/ или wiki.eclipse.org/Jetty не подходит для этой версии Jetty.
Используйте архивную документацию по адресу docs.codehaus.org/display/JETTY/Jetty+Documentation вместо.
Тот факт, что у вас есть /etc/init.d/jetty
означает, что вы, вероятно, используете причал, созданный одним из дистрибутивов Linux. К сожалению, есть много ошибок, которые можно найти в процессе запуска и инициализации в различных пакетах причалов, созданных дистрибутивом Linux, особенно с созданными и связанными /etc/init.d/jetty
. Различные системы отслеживания ошибок в debian и redhat - это место, где можно сообщать об ошибках в этих файлах.
Командная строка, которую вы использовали:
$ java -jar start.jar OPTIONS=Server,jsp
предназначен для прямого, автономного исполнения и предназначен только для работы со стандартным распределением причалов из dist.codehaus.org, то репо maven.org, или download.eclipse.org.
Обратите внимание, что в комплект поставки jetty-distribution входит bin / jetty.sh, в котором было много исправлений, удобных для различных систем sysvinit.
Однако, как уже говорилось, есть много исправлений ошибок и улучшений с процессами запуска в Jetty с момента перехода на eclipse (Jetty 7+), включая введение start.ini
, аналогично тому, как можно настроить сам eclipse для запуска, что устранило многие из подобных проблем, с которыми вы сталкиваетесь.
Если кто-то (вроде меня) сейчас займется этим ...
Как заметил Йоаким, Jetty 6 не использует подход «OPTIONS = Server, jsp» для включения поддержки JSP. Посмотрев на исходный код Jetty, я увидел, что он просто пытается найти класс org.apache.jasper.servlet.JspServlet
в пути к классам: если он не может найти его, он выдает вышеупомянутое сообщение об ошибке.
Просто установите пакет libjetty-extra-java
должен решить проблему, потому что он добавляет символические ссылки в /usr/share/jetty/lib/jsp-2.1
в JAR, которые автоматически добавляются в путь к классам Jetty при запуске. Для поддержки JSP эти символические ссылки указывают на Jasper JARS, исходящие от Tomcat, в частности, из libtomcat?-java
пакет.
Дополнительная проблема, которую я обнаружил в Ubuntu 14.04, заключается в том, что пакет libjetty-extra-java
версия 6.1.26-1ubuntu1.1 из надежных обновлений зависит от libtomcat7-java
пакет (в отличие от версии 6.1.26-1ubuntu1, исходящей из вселенной, которая зависит от libtomcat6-java
), но символические ссылки в /usr/share/jetty/lib/jsp-2.1
для Jasper не работают, потому что они указывают на имена JAR, предоставленные libtomcat6-java
, а не предоставленные libtomcat7-java
. То же самое касается commons-el.jar
символическая ссылка, которая также не работает. После их исправления появляются другие ошибки, связанные с отсутствием классов Tomcat, вероятно, потому, что Tomcat 7 Jasper имеет другие зависимости, чем Tomcat 6 Jasper.
Я только что открыл ошибку https://bugs.launchpad.net/ubuntu/+source/jetty/+bug/1508562 для этого.
Jetty запускается bin / jetty.sh (см. источник строка 477), где команда запуска построена как:
JETTY_START=$JETTY_HOME/start.jar
[ ! -f $JETTY_START ] && JETTY_START=$JETTY_HOME/lib/start.jar
RUN_ARGS="$JAVA_OPTIONS -jar $JETTY_START $JETTY_ARGS $CONFIGS"
RUN_CMD="$JAVA $RUN_ARGS"
Как видите, JETTY_START разбирается до JETTY_ARGS. Это означает, что если JETTY_START не установлен, java пытается запустить файл, возвращенный JETTY_ARGS. Поэтому установка правильного значения для JETTY_HOME (используемого в JETTY_START) должна решить вашу проблему.