2009-12-10 30 views
9

我有一個使用插件體系結構的Java Web應用程序。我想知道是否有人有一個解決方案,通過一個人可以添加一個servlet,並且在web應用程序運行時通過serlvet映射到servletconfig?這個想法是,一個類可以添加到/ WEB-INF/classes文件夾中,並且可以在不重新啓動Web應用程序的情況下作爲servlet激活。同樣,如果用戶選擇刪除「插件」,然後讓代碼從servletconfig中刪除類。動態添加servlet到servletConfig

回答

5

沒有標準的Servlet API來實現這一點。

你可以在Tomcat中做到這一點。在您的Web應用程序中,您的主servlet(創建其他人)必須執行ContainerServlet,以便您可以獲取Wrapper對象。一旦你安裝了你的班級檔案,你可以撥打以下電話:

​​

這些調用會立即創建一個servlet。你需要找到方法來堅持這些信息。您可以通過更新web.xml或寫入您自己的文件來完成此操作。

+0

這非常完美,非常感謝。 – BigBadOwl 2009-12-13 21:35:40

1

向正在運行的應用程序中添加和從中刪除類很困難。你可能想看看JRebel的商業解決方案。

如果您的用戶沒有很長時間的正在運行的對話/會話,可能重新啓動您的Web應用程序可能會很快,以至於他們不會注意到。如果這會爲你做,那麼問題就變得很容易。

假設你正在運行Tomcat,你可以用reloadable=true配置您的服務器,當你拋出一個新的web.xmlwebapps目錄將重新啓動應用程序。您可以將新類添加到WEB-INF/classes目錄,然後更新web.xml,這應該可以正常工作。如果這些類正在使用,刪除類可能會更困難。您可能需要執行2個步驟,首先部署不再路由到給定Servlet類的web.xml,然後等待一段時間讓類用戶離開,然後刪除該類並重新部署更新的web.xml

0

我不認爲你可以做到這一點動態,但你可以嘗試使用預先配置的過濾器使servlet活動或不活動。使篩選器檢查一個可以在數據庫或文件系統中動態更改的值,並告訴它如何在servlet「關閉」時重新路由請求。

我認爲在沒有給用戶提供某種反饋的情況下簡單地關閉servlet是不禮貌的。