Jetty 6: статично съдържание със списък на директории

Използвам Jetty 6 като вграден уеб сървър в моето Java приложение. Досега не съм имал причина да обслужвам статично съдържание, но сега бих искал не само да обслужвам статично съдържание, но и да показвам списъци с директории.

Опитах да използвам класа ResourceHandler, за да направя това, но в някакъв момент mortbay премахна възможността ResourceHandler да прави списък с директории.

Бих искал да направя това без добавяне на .jsp или сървлет функционалност и без конфигурация web.xml. Накратко, опитвам се да направя това програмно.

За живота си, не мога да намеря никакви примери за това онлайн. Може ли някой да ме насочи в правилната посока?

Благодаря много!


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


Отговори (2)


Добре, разбрах как да накарам 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 приложение.

person Tom    schedule 02.12.2010

Ако имате webapp и просто работи кея, мисля, че по подразбиране е да се обслужва всяко статично съдържание извън основната директория на webapp (напр. същата директория, в която се намира 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