Как смешать вызов Jax-rs на стороне сервера с собственными файлами без префикса? - PullRequest
2 голосов
/ 27 августа 2011

В настоящее время мы используем реализацию JAX-RS в Джерси для обработки наших запросов REST (серверный Джерси). Наш файл web.xml настроен так, что все запросы / rest / * обрабатываются Джерси. Все в порядке. Наш сервер в настоящее время Tomcat6 и использует Java6 (в Ubuntu 11.04)

Итак: // myserver / rest / customer / в порядке, и Джерси вызывает класс с префиксом @Path ("/ customer").

Теперь у нас также есть статический контент, например: // myserver / images / ... который отлично загружается.

Есть ли способ сделать так, чтобы мы могли избавиться от префикса / rest / * и смешать все это вместе?

Чего мы хотим достичь: : // myserver / rest / customer / → Джерси : // myserver / rest / images / → родное изображение Справочник войны

Спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 18 сентября 2011

Этого довольно легко достичь.Просто зарегистрируйте Jersey ServletContainer в web.xml в качестве фильтра (вместо сервлета) - см. В нижней части эту страницу для примера - и либо используйте ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX или ServletContainer.FEATURE_FILTER_FORWARD_ON_404 параметр init, чтобы сделать статический контент доступным.

0 голосов
/ 27 августа 2011

Во-первых, когда дело доходит до отображения сервлета, приоритет выглядит следующим образом:

  1. Отображение пути: /rest/*
  2. Отображение расширения: *.png
  3. По умолчанию: /

Отображение пути + отображение расширения: плохая идея

Таким образом, вы не можете сопоставить статические ресурсы по их расширению файла в существующем отображении пути (это было быВ любом случае, это плохая идея - управлять всеми статическими расширениями файлов в вашем файле web.xml.

Приоритет сопоставления пути> ext mapping.

Использование фильтра

Настройка UrlRewriteFilter в вашемweb.xml

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

И в вашем urlrewrite.xml файле конфигурации:

<urlrewrite default-match-type="wildcard">
    <rule>
        <from>/rest/images/**</from>
        <to>/images/$1</to>
    </rule>
</urlrewrite>

Не отображать статические ресурсы в / rest

Это может не соответствовать вашим потребностям,но это мой любимый!Сопоставление статических ресурсов в /rest говорит «Привет, разработчик, давай GET / POST / PUT / DELETE с этими статическими ресурсами, все в порядке» :

  • Если вы не можете GET/ PUT / POST / DELETE эти ресурсы, тогда вы не должны отображать их в /rest.Это производит неправильное впечатление.
  • Если вы действительно хотите манипулировать этими ресурсами через веб-сервис REST, то пусть Джерси выполняет тяжелую работу и обслуживает эти ресурсы (см. jersey-samples дляпример).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...