Jetty 6: статический контент со списком каталогов

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

Я пробовал использовать для этого класс ResourceHandler, но в какой-то момент mortbay лишил ResourceHandler возможности делать список каталогов.

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

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

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


person Tom    schedule 22.11.2010    source источник


Ответы (2)


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

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

Таким образом, мне пришлось создать дополнительные 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.

person Tom    schedule 02.12.2010

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

mywebapp
 - WEB-INF
 - static
     - site_img.gif

И теперь вы можете обслуживать http://mysite.com/static/site_img.gif

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

person David Parks    schedule 23.11.2010
comment
Спасибо за информацию, но это не совсем то, чего я пытаюсь достичь. У меня нет каталога WEB-INF (поскольку я не обслуживаю веб-приложение, я полагаю?) Я пытаюсь программно настроить DefaultServlet и задать параметры в коде, но, похоже, он не работает. - person Tom; 02.12.2010