Как я могу обслуживать определенный ресурс classpath по заданному адресу, используя встроенный причал? - PullRequest
12 голосов
/ 02 февраля 2012

Я хочу открыть файл clientacesspolicy.xml со встроенного сервера Jetty.

Моя текущая попытка выглядит так:

ContextHandler capHandler = new ContextHandler();
capHandler.setContextPath("/clientaccesspolicy.xml");
capHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml"));
HandlerList handlers = new HandlerList();
handlers.addHandler(capHandler);
...
httpServer.setHandler(handlers);

Но я получаю 404 доступа http://localhost:9000/clientaccesspolicy.xml

Как я могу программно предоставить ресурс classpath для данного URL в Jetty?

Спасибо, Andy

Ответы [ 2 ]

19 голосов
/ 26 июля 2013

На самом деле, вы можете просто зарегистрировать путь к классу в качестве ресурса пути к классу (на удивление).

ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("/"));
server.setHandler(resHandler);

Тогда вы можете получить доступ к любым файлам в вашем пути к классам. Таким образом, если у вас есть файл file.xml, он будет обслуживаться из localhost: 9000 / file.xml.

8 голосов
/ 03 февраля 2012

Ваш код не работает, потому что ContextHandler на самом деле не обслуживает контент.Небольшая настройка сделает своего рода работой, но чтобы сделать то, что вы действительно хотите, вам нужно написать свой собственный обработчик.

" сортировка работает"версия:

ContextHandler capHandler = new ContextHandler();
capHandler.setContextPath("/clientaccesspolicy.xml");
ResourceHandler resHandler = new ResourceHandler();
resHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml"));
capHandler.setHandler(resHandler);

Но , эта версия обрабатывает /clientaccesspolicy.xml как каталог, поэтому она перенаправляется на /clientaccesspolicy.xml/ и затем отображает содержимое файла XML.

То, что вам нужно, это версия ResourceHandler с поиском url => resource .Jetty не поставляется с обработчиком, который делает это, но вы должны иметь возможность создать подкласс ResourceHandler и затем переопределить getResource.В этом случае вам не понадобится [или вы захотите] ContextHandler, просто проверьте наличие вызовов «/clientaccesspolicy.xml» и сопоставьте его с правильным ресурсом ClassPath.

...