Jetty 6: статический контент со списком каталогов - PullRequest
1 голос
/ 22 ноября 2010

Я использую Jetty 6 в качестве встроенного веб-сервера в моем приложении Java. Раньше у меня не было причин обслуживать статический контент, но теперь я хотел бы не только обслуживать статический контент, но и показывать списки каталогов.

Я пытался использовать класс ResourceHandler, чтобы сделать это, но в какой-то момент Mortbay удалил возможность ResourceHandler для создания списка каталогов.

Я бы хотел сделать это без добавления функциональности .jsp или сервлета и без настройки web.xml. Короче я пытаюсь сделать это программно.

Для жизни я не могу найти никаких примеров для этого в Интернете. Может ли кто-нибудь указать мне правильное направление?

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

Ответы [ 2 ]

3 голосов
/ 03 декабря 2010

Хорошо, я выяснил, как заставить Jetty делать то, что я хотел, что опять-таки заключалось в размещении статического контента в дополнение к обработке некоторых пользовательских сервлетов.

Якобы, способ сделать это состоял в том, чтобы создать DefaultServlet и соответственно установить resourceBase и pathSpec, чтобы я мог разместить некоторый каталог в / www / *. Однако это никогда не работало. На самом деле, я не смог найти никакого объяснения того, как на самом деле работают pathSpecs или которые должны быть определены.

Таким образом, мне пришлось создать дополнительный ServletHandler и Context и добавить как мой оригинальный контекст, так и новый для размещения статического контента на сервере.

Я так и сделал:


Server srv = new Server( port );

//  create context and handler for my servlets
Context ctx = new Context();
ServletHandler sh = new ServletHandler();

//  ... adding servlets here ...

//  create context and handler for static content
ServletHandler sh2 = new ServletHandler();
ServletHolder holder = new ServletHolder( new DefaultServlet() );
holder.setInitParameter("resourceBase", staticResourceBase);
sh2.addServletWithMapping( holder, "/*" );
staticContext.setContextPath(staticPathSpec);
staticContext.setServletHandler(sh2);

//  add both contexts to server
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { staticContext, ctx });
srv.setHandler(contexts);



Возможно, это не самый предпочтительный способ сделать это, но он позволил мне программно добавлять хостинг статического контента в мое приложение на базе Jetty.

0 голосов
/ 23 ноября 2010

Если у вас есть веб-приложение и только запущенный джетти, я думаю, что по умолчанию все статические материалы отправляются из корневого каталога веб-приложения (например, в тот же каталог, в котором находится WEB-INF).Например, у вас могут быть следующие каталоги:

mywebapp
 - WEB-INF
 - static
     - site_img.gif

И теперь вы можете подавать http://mysite.com/static/site_img.gif

Исправьте меня, если я ошибаюсь, и я удалю этот ответ, эточуть выше моей головы.

...