Как запустить Jetty8, чтобы обслуживать только статический контент?

В целях тестирования я хочу использовать 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


person Roel Spilker    schedule 28.06.2012    source источник
comment
Причина, по которой localhost:8080/javadoc не работает, заключается в том, что нет каталога с именем 'javadoc'. присутствует в вашем домашнем каталоге причала. Я не понимаю, почему причал отправляет это в качестве примера, когда дистрибутив причала не поставляется с javadoc. Чтобы упомянутый URL-адрес работал, вам просто нужно создать каталог «javadoc» в вашем доме на пристани и создать html-файл с именем «index.html» в каталоге «javadoc». Взгляните на javadoc.html в каталоге «webapps», чтобы узнать, почему требуются описанные выше шаги.   -  person Parvez    schedule 30.12.2012


Ответы (3)


Самый простой способ запустить 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, поэтому также убедитесь, что никакие другие обработчики и т. д. не будут активированы.

person Roel Spilker    schedule 29.06.2012
comment
думаю, что легкость относительная, но я поставлю +1 и в какой-то момент добавлю ее в документацию пристани, спасибо! - person jesse mcconnell; 29.06.2012

Немного оффтопа, но кто-то, использующий 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>
person dma_k    schedule 12.09.2013

В вашем дистрибутиве в каталоге contexts есть файл javadoc.xml, который вы можете использовать в качестве примера того, как это сделать достаточно просто.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-distribution/src/main/resources/contexts/javadoc.xml

так оно и выглядит на самом деле

вы хотите изменить контекстный путь и базу ресурсов

также рекомендовал бы просто удалить jetty-webapps.xml из автозагрузки в файле start.ini, а также удалить файлы контекста, которые вы не хотите развертывать с помощью

вы также можете посмотреть на настройку некоторых других параметров в файле start.ini, если хотите

http://wiki.eclipse.org/Jetty/Feature/Start.jar

перейти туда для получения информации процесс запуска

ваше здоровье

person jesse mcconnell    schedule 28.06.2012
comment
Большое спасибо за отзывы и указатели. У меня почему-то не получается. Теперь я использовал etc/jetty-fileserver.xml в качестве основы для создания своего собственного универсального решения. - person Roel Spilker; 29.06.2012