Restlet - предоставление статического содержимого
-
02-07-2019 - |
Вопрос
Используя Restlet, мне нужно было обслуживать некоторый простой статический контент в том же контексте, что и мой веб-сервис.Я настроил компонент с помощью Directory
, но при тестировании я обнаружил, что он будет обслуживать только 'index.html', все остальное приводит к 404.
router.attach("/", new Directory(context, new Reference(baseRef, "./content"));
Итак... http://service и http://service/index.html и то, и другое работает,
но http://service/other.html дает мне 404 балла
Кто-нибудь может пролить некоторый свет на это?Я хочу, чтобы любой файл в каталоге ./content был доступен.
PS:В конечном итоге я планирую использовать обратный прокси-сервер и обслуживать весь статический контент с другого веб-сервера, но пока мне нужно, чтобы это работало как есть.
Решение
Что ж, я разобрался в этом вопросе.На самом деле Restlet, похоже, маршрутизирует запросы на основе префикса, но неправильно обрабатывает самый длинный соответствующий префикс, а также, похоже, игнорирует расширения файлов.
Так, например, если бы у меня был ресурс, привязанный к "/other"...и каталог в "/".И я запрашиваю /other.html, что на самом деле происходит, так это то, что я получаю ресурс "/ other".(Расширение игнорируется?), а не статический файл из каталога, как я ожидал бы.
Если айнон знает, почему это так или как это изменить, я хотел бы знать.В этом нет ничего особенного, просто для тестирования.Я думаю, что мы в любом случае поставим apache или nginx перед этим в производстве.
Другие советы
Маршрутизаторы в Restlet по умолчанию используют режим сопоставления "Template.MODE_STARTS_WITH".Вы всегда можете установить маршрутизатор по умолчанию, выполнив команду router.setMatchingMode(Template.MODE_EQUALS).Это включит строгое соответствие по умолчанию для attach.Вы можете переопределить отдельные маршруты с помощью setMatchingMode.