Добавление внешних ресурсов на сервер режима разработки GWT (Jetty) - PullRequest
5 голосов
/ 24 января 2012

У меня есть GWT, которому требуется доступ к некоторым статическим ресурсам.Я не хочу помещать эти ресурсы в фактический каталог / src / main / webapp (примечание: используя Maven и соответствующий макет), потому что они не являются частью приложения, а частью данных.

Моя проблема не в том, как предоставить приложению доступ к этим ресурсам во время развертывания;это должно быть легко сделать через конфигурацию Tomcat.Скорее проблема в том, как предоставить моему приложению доступ к некоторым тестовым данным во время разработки.У меня есть несколько тестовых статических файлов в каталоге за пределами моего дерева приложений GWT, и я хочу настроить сервер Jetty в режиме разработки GWT для доступа к этим ресурсам.То есть я хочу иметь возможность сказать mvn gwt: run (или запустить или отладить приложение в режиме разработки из Eclipse) и заставить сервер обслуживать эти статические ресурсы.

Я знаю (и использую)опция dev mode -noserver.Однако, поскольку я много изменяю код на стороне сервера, наряду с кодом клиента, нецелесообразно повторное развертывание сервера каждый раз, когда изменяется код сервера.

Пока что я пробовал:создать файл jetty-web.xml в моем каталоге WEB-INF и добавить новый контекст, чтобы сервер обслуживал мои ресурсы.Вот мои неудачные попытки с помощью jetty-web.xml:

<Configure id="parentHandler" class="org.mortbay.jetty.handler.ContextHandler">
    <Set name="contextPath">/static_resources</Set>
    <Set name="resourceBase">/real/filesystem/path/to/static/resources/</Set>
    <Set name="handler">
    <New class="org.mortbay.jetty.handler.ResourceHandler">
        <Set name="cacheControl">max-age=3600,public</Set>
    </New>
    </Set>
</Configure>

Если я добавлю это в jetty-web.xml, то при запуске режима dev Jetty будет обслуживать мои внешние ресурсы, но не будетмое приложение GWT.

С другой стороны, если я сделаю это ...

<Configure id="parentHandler" class="org.mortbay.jetty.handler.ContextHandler">
    <New id="newHandler" class="org.mortbay.jetty.handler.ContextHandler" >
        <Set name="contextPath">/static_resources</Set>
        <Set name="resourceBase">/real/filesystem/path/to/static/resources/</Set>
        <Set name="handler">
            <New class="org.mortbay.jetty.handler.ResourceHandler">
                <Set name="cacheControl">max-age=3600,public</Set>
            </New>
        </Set>
    </New>
    <Get id="server" name="server">
        <Call name="setHandler">
            <Arg><Ref id="newHandler" /></Arg>
        </Call>
    </Get>
    <Ref id="newHandler">
        <Set name="server"><Ref id="server" /></Set>
    </Ref>
</Configure>

... Jetty не обслуживает ни мои статические данные, ни мое приложение GWT.

Какие-либо предложения?Что я делаю не так?

(Примечание. В режиме разработки GWT используется версия 6 [или 6. что-то] Jetty, и она настраивается программно, так что, насколько я вижу, другие файлы конфигурации Jetty не используются.читать.)

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2012

Мой рабочий:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
        <New id="sampleDS" class="org.mortbay.jetty.plus.naming.Resource">            
            <Arg>java:jboss/datasources/sampleDS</Arg>
            <Arg>
                 <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
                 <Set name="URL">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</Set>                 
                 <Set name="User">user</Set>
                 <Set name="Password">pass</Set>
                 </New>
            </Arg>
        </New>
</Configure>
  1. Поместите его под WEB-INF
  2. Загрузите [jetty-naming-6.1.12.jar][1] и [jetty-plus-6.1.12.jar][2] и поместите их в `WEB-INF \ lib '

Перезапустите затмение и запустите снова, чтобы добиться цели.

0 голосов
/ 03 мая 2012

Мне нравится использовать подход, состоящий в том, чтобы написать простой сервлет, который может передавать любой файл, например: http://www.exampledepot.com/egs/javax.servlet/GetImage.html,, и сопоставить его в моем файле web.xml с определенными шаблонами URL.

ЗатемЯ легко могу сделать базовый каталог для статических файлов настраиваемым через один из моих файлов конфигурации.Я также могу делать произвольные вещи, такие как смешивание нескольких каталогов или получение содержимого файла из БД, ...

Я предпочитаю этот подход, потому что он работает со всеми контейнерами сервлетов в любой среде.

...