2010-05-20 60 views
9

如果有人在服務器中寫入System.exit()服務器或應用程序會崩潰,會發生什麼?Servlet中的System.exit

+5

爲什麼不試試用你的特殊的servler容器來看看會發生什麼? – Jesper 2010-05-20 09:37:02

回答

2

運行servlet容器的JVM會終止,所以,是的。

+1

那麼,我希望大多數人都會與安全管理員一起運行,並對其進行配置以限制這一點。如果是這樣,那麼答案是否定的。因此,正確答案取決於安全管理器是否正在使用以及安全策略是否正確配置/限制。 – 2010-05-20 10:38:12

12

也許!該容器應該修改了安全管理器(SecurityManager.checkExit()),以便呼叫可能導致AccessControlException。沒有webapp應該能夠關閉服務器。

0

好,System.exit()將終止當前運行的JVM。所以很有可能會觸發在servlet容器'addShutdownHook中編寫的代碼。

-2

System.exit()的是在瀏覽器

+0

它不這樣工作。 – 2015-06-30 09:59:51

0

不,你不能因爲它會拋出一個安全異常關閉特定的應用。

+0

多一點解釋可能會幫助程序員瞭解它是如何工作的。 – Daenarys 2014-06-21 06:36:04

0

https://javarevisited.blogspot.in/2014/11/dont-use-systemexit-on-java-web-application.html

在Java Web應用程序,這無論是Web服務器或應用服務器內運行,這本身就是Java程序是完全不使用它是一個好主意System.exit()。爲什麼?因爲調用System.exit()殺死你的JVM,從Tomcat或Jetty調用它,不僅會殺死你的應用程序,而且很可能是服務器本身。如果該服務器也託管其他關鍵應用程序,這可能會有潛在的危險,這種情況並不罕見。根據我的經驗,在加載環境變量,屬性文件,連接到MQ Series,建立數據庫連接,打開套接字連接等的Web應用程序啓動代碼中,System.exit()調用在過度廣泛的try-catch塊中很常見。如果你正在編寫核心的基於Java的服務器,每個應用程序都有自己的JVM,但是在Tomcat,JBoss,WebSphere,Weblogic或任何其他應用程序服務器上部署Web應用程序,使用System.exit()很大錯誤。在最壞的情況下,可能導致許多其他關鍵應用程序中斷。另一方面,通過啓用安全管理器,有辦法阻止您的Web應用程序出現其他人的錯誤。 System.exit()和Runtime.exit()都通過安全管理器。啓用安全管理器將捕獲這些調用並將其減少爲異常,而不是關閉整個虛擬機。