В целях тестирования я хочу использовать Jetty 8 для обслуживания только статического контента. Я знаю, как запустить веб-сервер из командной строки:
Java -jar start.jar причал.порт = 8082
Я хотел бы иметь возможность использовать ванильный причал, предпочтительно 8 или 7, и запустить его, используя что-то вроде:
java -jar start.jar ОПЦИИ=ресурсы resources.root=../foo jetty.port=8082
После этого файлы должны быть доступны из корня сервера. Файл с именем ../foo/x.html должен быть доступен через http://localhost:8082/x.html.
Я не хочу создавать файл WAR или что-то необычное. Желательно, чтобы он не выполнял никакого кэширования на стороне сервера, оставляя файлы разблокированными на компьютерах с Windows. Кроме того, я хочу обслуживать только файлы, даже расположенные в подкаталогах, без причудливого файлового браузера или способов их изменения с клиента.
Это возможно? Если нет, то какова минимальная конфигурация, необходимая для достижения такого поведения?
Дополнительная информация
Я пробовал следующую команду. Я ожидал, что смогу просматривать javadoc, поставляемый с Jetty 8, с помощью http://localhost:8080/javadoc/, но он всегда дает мне 404
java -jar start.jar --ini ОПЦИИ=Сервер, ресурсы и т.д./jetty.xml contexts/javadoc.xml
Ответ 1 · рейтинг 6 · Roel Spilker
Самый простой способ запустить Jetty и заставить его обслуживать статический контент - использовать следующий файл xml:
static-content.xml:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure id="FileServer" class="org.eclipse.jetty.server.Server">
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8080"/></Set>
</New>
</Arg>
</Call>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="resourceBase"><Property name="files.base" default="./"/></Set>
</New>
</Set>
</Configure>
Чем вы можете запустить Jetty, используя:
java -jar start.jar --ini static-content.xml files.base=./foo jetty.port=8082
Если вы опустите files.base, будет использован текущий каталог; если вы опустите jetty.port, будет использоваться порт 8080.
--ini отключит настройки из start.ini, поэтому также убедитесь, что никакие другие обработчики и т. д. не будут активированы.
Ответ 2 · рейтинг 1 · dma_k
Немного оффтопа, но кто-то, использующий maven, может захотеть сделать что-то вроде этого (предположим, что статические ресурсы были скопированы в target/web):
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.9.v20130131</version>
<executions>
<execution>
<id>start-jetty</id>
<phase>install</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<webAppConfig>
<resourceBases>
<contextPath>/</contextPath>
<resourceBase>${project.build.directory}/web</resourceBase>
</resourceBases>
</webAppConfig>
</configuration>
</execution>
</executions>
</plugin>