2015-12-05 1 views
0

Я создаю приложение, которое динамически загружает модули на основе файлов конфигурации. Каждый модуль имеет свой собственный сервлет и свой собственный путь.Подавать статический контент на основе каждого сервлета

Он работает, но до сих пор это обслуживали только содержание я пояснением @Path в моих классах (отдых услуги), благодаря ServerProperties.PROVIDER_PACKAGES собственности:

Контекст:

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 

Каждый модуль/сервлет инициализируется следующим образом:

ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/"); 
    jerseyServlet.setInitOrder(0); 
    jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "com.my.packages.rest.server.root"); 

Это дает мне URL-адрес для каждого модуля - отлично.

Но у меня есть некоторые статические HTML в ресурс/MODULENAME папке каждого модуля, который я не знаю, как служить ...

С DefaultServlet, я могу сделать это так:

DefaultServlet defaultServlet = new DefaultServlet(); 
    ServletHolder staticAppServlet = new ServletHolder("default", defaultServlet); 
    staticAppServlet.setInitParameter("resourceBase", "./src/main/resources/modulename/"); 
    context.addServlet(staticAppServlet, "/path"); 

Но я не знаю, как это сделать с причалом ServletHolder.

Любая идея?

ответ

1

Не используйте имя «по умолчанию», введите новое имя для каждого модуля.

Также важно, чтобы вы использовали полный путь к базе ресурсов, либо как полный путь к файловой системе, либо как абсолютный URL.

Вот пример из embedded-jetty-cookbook примера под названием DefaultServletMultipleBases.java

// add special pathspec of "/alt/" content mapped to the altPath 
ServletHolder holderAlt = new ServletHolder("static-alt", DefaultServlet.class); 
holderAlt.setInitParameter("resourceBase",altPath.toUri().toASCIIString()); 
holderAlt.setInitParameter("dirAllowed","true"); 
holderAlt.setInitParameter("pathInfoOnly","true"); 
context.addServlet(holderAlt,"/alt/*"); 
+0

вы имеете в виду вы можете иметь более одного defaultservlet? – Sebas

+0

Несомненно, это просто сервлет. Только тот, который называется по умолчанию, является специальным (для обработки ошибок) –

+0

Удивительно, я попробую его как можно скорее. – Sebas