如果在servlet中编写
System.exit()
,会发生什么?服务器或应用程序会崩溃吗?也许!容器应该修改安全管理器 (SecurityManager.checkExit()
),以便调用可能导致 AccessControlException
。没有Web应用程序可以关闭服务器。
来自https://javarevisited.blogspot.in/2014/11/dont-use-systemexit-on-java-web-application.html:
在Java Web应用程序中使用System.exit(),它运行在Web服务器或应用服务器内部,而这些服务器本身就是Java程序,这根本不是一个好主意。为什么?因为调用System.exit()会终止您的JVM,如果从Tomcat或Jetty中调用它,不仅会终止您的应用程序,而且很可能会终止服务器本身。如果该服务器还托管其他关键应用程序,这可能会潜在地带来危险,这种情况并不罕见。根据我的经验,在Web应用程序启动代码中,过于宽泛的try-catch块中经常出现System.exit()调用,这些代码负责加载环境变量、属性文件、连接到MQ Series、建立数据库连接、打开套接字连接等。如果您正在编写基于核心Java的服务器,则仍然可以使用此方法,其中每个应用程序都有自己的JVM,但是对于部署在Tomcat、JBoss、WebSphere、Weblogic或任何其他应用程序服务器上的Web应用程序,使用System.exit()是一个大错误。在最坏的情况下,可能会导致许多其他关键应用程序的停机。另一方面,有一些方法可以防止别人的错误影响您的Web应用程序,例如启用安全管理器。System.exit()和Runtime.exit()都通过安全管理器进行处理。启用安全管理器将捕获这些调用并将它们转换为异常,而不是关闭整个VM。不行,因为它会抛出一个安全异常。
System.exit()会关闭运行在服务器上的应用程序(已在Tomcat 7上测试)。
嗯,System.exit()
将终止当前正在运行的JVM。因此,编写在servlet容器的addShutdownHook
中的代码很可能会被触发。
System.exit() 是关闭浏览器中的特定应用程序