2011-03-08 42 views
2

我使用OSGI的HttpService來註冊我的servlet和資源。 要註冊資源我正在使用HttpService.registerResources(java.lang.String別名,java.lang.String名稱,HttpContext上下文)osgi HttpService註冊資源從外部(文件系統)

我測試過「名稱」可以採取任何相對路徑的束內。示例/資源其中資源是捆綁包jar內的文件夾。 但我想給「名稱」一個值的例子/ home/user/webapps /資​​源。 即名稱鏈接到文件系統的路徑。 我想知道這是可能的以及如何?

我看到一個類似的帖子,但沒有得出結論。 how to get the image which is outside the OSGi bundle?

回答

0

我不熟悉HttpService.registerResources(..)的深層內部,但我的解決方法是實現一個Servlet提供資源。由於它是你自己的實現,你也可以訪問文件系統。 在實施Servlet時,唯一要記住的是設置正確的Content-Type,並且可能是其他所需的響應header fields

+0

謝謝。我前幾天做了同樣的事情。 – nattu 2011-03-09 11:38:06

2

從包之外獲取對象的簡單方法是按Robert描述的方式實現一個servlet。

更好的方法是,如果你對返回的對象有更好的控制,正確的MIME類型處理等是實現一個HttpContext對象並用HTTP服務註冊它。每當請求資源時,HTTP服務總是調用方法HttpContext.getResource(String name)。在這裏你可以從文件系統中爲你的對象提供服務。從規格:

公共URL的getResource(字符串名稱)

通過HTTP服務調用的 資源名稱映射到一個URL。對於servlet 的註冊,http服務會調用 這個方法來支持 ServletContext方法getResource和 getResourceAsStream。對於資源 註冊,Http Service將 調用此方法來查找指定的 資源。上下文可以從資源來源的 進行控制。例如, 資源可以經由 bundleContext.getDataFile(名稱).toURL() 或經由 的getClass()在上下文的 束中的資源被映射到在 bundle的持久性存儲區域 的文件。的getResource(名稱)。

請看看部分102.3,註冊資源和OSGi服務綱要以下。在那裏,整個概念將通過實例進行詳細解釋。