2015-12-05 66 views
0

我正在製作一個基於配置文件動態加載模塊的應用程序。每個模塊都有自己的servlet和自己的路徑。以每個servlet爲基礎提供靜態內容

它的工作原理,但到目前爲止,它只是服務的內容我標註在我的課(REST服務)@Path,感謝ServerProperties.PROVIDER_PACKAGES屬性:

語境:

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

每個模塊/ servlet的是初始化是這樣的:

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路徑 - 很好。

但我也有在每個模塊,我不知道如何服務的資源/文件夾MODULENAME一些靜態的HTML ...

隨着DefaultServlet,我能做到這樣的:

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

但我不知道如何與碼頭ServletHolder

有什麼想法?

回答

1

不要重複使用名稱「default」,爲每個模塊創建一個新名稱。

將資源庫的完全限定路徑用作完整文件系統路徑或絕對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

當然,它只是一個Servlet。只有名爲「default」的是特殊的(用於錯誤處理) –

+0

太棒了,我會盡快嘗試。 – Sebas