2010-11-22 4 views
1

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

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

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

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

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

ответ

3

Хорошо, я понял, как заставить 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

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

mywebapp 
- WEB-INF 
- static 
    - site_img.gif 

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

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

+0

Спасибо за информацию, но это не совсем то, что я пытаюсь выполнить. У меня нет каталога WEB-INF (поскольку я не обслуживаю веб-приложение, я думаю?) Я пытаюсь настроить программный продукт по умолчанию и устанавливать параметры в коде, но он, похоже, не работает. – Tom 2010-12-01 22:41:09