2011-12-27 3 views
10

У меня есть собственная служба JAX-RS REST, реализованная с расширением Restore JAX-RS.Как обслуживать статический контент с помощью JAX-RS?

Теперь я должен обслуживать статический контент, и мне было интересно, как это сделать с JAX-RS. Обратите внимание, что я не знаю структуру физического каталога во время компиляции. Таким образом, учитывая URL, как

http://bla-bla:8182/static/yaba/daba/doo.png 

файл $(ROOT)/yaba/daba/doo.png должен быть возвращен, где $(ROOT) является статическим содержимым корневого каталога.

Можно ли это сделать с чистым JAX-RS?

Спасибо.

EDIT

Известный во время компиляции:

  • файловой системы путь корневой папки статического контента
  • HTTP URL, используемый для ссылки на корневой папке статического контента

Неизвестно на момент компиляции:

  • Фактическое содержимое корневой папки - количество файлов, типов файлов, структура каталогов.

ответ

16

Просто нашел.

В соответствии с аннотацией javadocs javax.ws.rs.Path можно указать регулярное выражение, чтобы указать, что считается параметром шаблона.

Следовательно, следующий код работает:

@Path("static") 
public class StaticContentHandler { 
    ... 
    @GET 
    @Path("{path:.*}") 
    public FileRepresentation Get(@PathParam("path") String path) { 
    ...; 
    } 
} 

GET http://localhost:8182/static/yaba/daba/doo.png достигает Get метод с path равным "Yaba/Даба/doo.png" - как раз то, что я искал.

Надеюсь, что это поможет кому угодно.

BTW, FileRepresentation принадлежит к Restlet, поэтому действительно чистая реализация JAX-RS вернет что-то еще здесь.

0

Вы можете сделать это с помощью чистого JAX-RS, реализовав соответствующие ресурсы: в основном вам просто нужно отправить массив байтов, а JAX-RS уже включает в себя провайдера Byte Array для любого типа носителя.

Проблема в том, что ваша реализация, вероятно, будет менее эффективной, чем стандартные реализации веб-серверов. Обычно лучше всего ставить контент на веб-сервере, например, Apache HTTPD или IIS или даже Tomcat.

+0

У меня есть ограничение, что не может быть ни apache, ни IIS. – mark

+0

Моя проблема заключается не в отправке данных, а в сопоставлении статических ресурсов с использованием спецификации JAX-RS. – mark

+0

Можете ли вы уточнить, что именно известно во время компиляции, что можно настроить позже и что такое динамическое. Статический контент обычно означает что-то статическое и не динамическое ... – Tarlog