如果它在Web應用程序中運行(例如,整個應用程序部署在Tomcat/Web球體等)或作爲獨立的應用程序,是否有方法來區分內部特定的方法?如何區分Web應用程序或獨立應用程序?
回答
答案是「否」。無法確定您的代碼是在某種類型的應用服務器/ Servlet容器中運行還是獨立運行,而不依賴於外部信息。
你可以,但是,在一種情況下指定的系統屬性,而不是其他,並檢查其存在:
java -Dstandalone.mode=true MyApplication
在您的代碼:
if (Boolean.getBoolean("standalone.mode")) {
// we're in standalone mode
}
你的問題是困難的,因爲沒有一個整體很多是從它運行在兩個預留之間的「不同」,你可以嘗試調用
org.apache.catalina.util.ServerInfo.getServerBuilt()
,如果失敗,那麼你沒有運行Tomcat。我不熟悉網絡領域,但我會想象嘗試調用一個具體的方法,以及工作。這絕對是一種骯髒的做事方式,但它會起作用。
您可以檢查HttpServlet
的任何實例是否顯示在當前堆棧跟蹤中。雖然它不是傻瓜,但它可能會滿足您的特定需求。
注:我還沒有試過運行這個示例代碼。異常處理已被排除。
public boolean isWebApplication() {
Class<?> httpServletClass;
try {
httpServletClass = Class.forName("javax.servlet.http.HttpServlet");
} catch (ClassNotFoundException e) {
return false;
}
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace()
for (StackTraceElement element : stackTrace) {
Class<?> elementClass = Class.forName(element.getClassName());
if (httpServletClass.isAssignableFrom(elementClass)) {
return true;
}
}
return false;
}
「不防」是輕描淡寫。這將適用於servlet,但不適用於過濾器/衍生線程,或者在完整EE容器的情況下使用bean。 – ChssPly76
現在,您的示例代碼將需要HttpServlet放在您的類路徑中,而業務邏輯 –
@ ChssPly76不太可能出現這種情況:這就是爲什麼我說「它可能會滿足您的特定需求」。 :) –
你大概會希望之內不與在類路徑上的任何應用程序服務器或J2EE API的整理了一些「通用」業務邏輯代碼檢查這一點,即你不能直接訪問的HttpServlet。在這種情況下,我認爲爲J2EE或應用程序服務器類專業做Class.forName()
將是您最好的選擇。如果它拋出異常,它是獨立的,否則,也許你在一個應用服務器。
我認爲最簡單的方法是測試JNDI system properties(假設它們不能在獨立模式下設置爲遠程服務器 - 即使這樣,您也應該能夠知道值之間的差異,例如服務器不是指本地主機)。
- 1. 獨立Web應用程序
- 2. 獨立應用程序vs Web應用程序
- 3. 獨立的web應用程序會話
- 4. 獨立的Web應用程序.Net
- 5. 獨立戰爭/ java web應用程序
- 6. 獨立的Web應用程序
- 7. JBoss或Tomcat的獨立應用程序
- 8. 獨立Python應用程序
- 9. 獨立.NET應用程序
- 10. C++獨立應用程序
- 11. PostgreSQL獨立應用程序
- 12. 獨立PHP應用程序
- 13. PHP獨立應用程序
- 14. QML分辨率獨立應用程序
- 15. 如何使用'C'或'C++'爲windows創建獨立程序或應用程序
- 16. 分化混合應用程序或Web應用程序
- 17. 如何區分用戶是來自FB應用程序還是獨立應用程序
- 18. 什麼是獨立應用程序或獨立服務器?
- 19. Facebook Canvas應用程序和獨立Web應用程序最佳實踐
- 20. 部署依賴於獨立應用程序的Web應用程序
- 21. 將獨立Java應用程序轉換爲可部署的Web應用程序
- 22. 將MVC應用程序作爲獨立應用程序運行
- 23. 開發分辨率獨立的flex web應用程序
- 24. 如何使Web應用程序獨立於Ant版本構建
- 25. 如何將Web應用程序從IDE移動到獨立?
- 26. 如何設置獨立的Web應用程序測試環境?
- 27. 如何防止iOS獨立Web應用程序鎖定設備?
- 28. 如何創建獨立升降機Web應用程序?
- 29. 如何將通用iOS應用程序轉換爲獨立iPhone應用程序?
- 30. ASP.NET MVC - 管理區域或單獨的Web應用程序?
要分清這是什麼對於? –
我正在處理遺留代碼,應用程序可以獨立運行或在tomcat下運行。並且有一個線程在應用程序的初始化期間啓動。我現在可以在Web應用程序已經啓動或即將關閉時啓動。我想要得到這張照片。問題是當它不運行獨立線程拋出異常時,在Web應用程序的啓動/停止過程中。 – blefesd