Servlet中的System.exit

10
如果在servlet中编写System.exit(),会发生什么?服务器或应用程序会崩溃吗?

5
为什么不尝试使用您特定的服务器容器,看看会发生什么? - Jesper
8个回答

12

也许!容器应该修改安全管理器 (SecurityManager.checkExit()),以便调用可能导致 AccessControlException。没有Web应用程序可以关闭服务器。


3

2
JVM运行servlet容器会终止,所以答案是肯定的。

1
我希望大多数都在运行一个安全管理器并配置了限制来防止这种情况发生。如果是这样,那么答案是“否”。因此,正确的答案是取决于是否使用了安全管理器和正确配置/限制了安全策略。 - Kevin Brock

0

来自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。

0

不行,因为它会抛出一个安全异常。


更详细的解释可能有助于其他程序员理解它是否有效。 - Nagama Inamdar

0

System.exit()会关闭运行在服务器上的应用程序(已在Tomcat 7上测试)。


0

嗯,System.exit()将终止当前正在运行的JVM。因此,编写在servlet容器的addShutdownHook中的代码很可能会被触发。


-2

System.exit() 是关闭浏览器中的特定应用程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接