Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet中的System.exit_Java_Security_Servlets - Fatal编程技术网

Java servlet中的System.exit

Java servlet中的System.exit,java,security,servlets,Java,Security,Servlets,如果有人在servlet中写入System.exit(),服务器或应用程序会崩溃吗?运行servlet容器的JVM会终止,因此,是的。可能!容器应该已经修改了安全管理器(SecurityManager.checkExit()),因此调用可能会导致AccessControlException。任何Web应用程序都不能关闭服务器。这里已经有了这个问题的答案: 那么,System.exit()将终止当前正在运行的JVM。因此,可能会触发在servlet容器中编写的代码“addShutdownHook。

如果有人在servlet中写入
System.exit()
,服务器或应用程序会崩溃吗?

运行servlet容器的JVM会终止,因此,是的。

可能!容器应该已经修改了安全管理器(
SecurityManager.checkExit()
),因此调用可能会导致
AccessControlException
。任何Web应用程序都不能关闭服务器。

这里已经有了这个问题的答案:

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

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

不,您不能,因为它将引发安全异常。

来自:

在运行在Web服务器或应用服务器内部的Java Web应用程序中,Java程序本身并不是一个好主意。为什么?因为调用System.exit()会杀死JVM,所以从Tomcat或Jetty调用它不仅会杀死应用程序,而且很可能还会杀死服务器本身。如果该服务器还承载其他关键应用程序,这可能会有潜在的危险,这一点并不少见。根据我的经验,System.exit()调用在web应用程序启动代码中过于宽泛的try-catch块中非常常见,这些块加载环境变量、属性文件、连接到MQ系列、建立数据库连接、打开套接字连接等。如果您正在编写基于Java的核心服务器,如果每个应用程序都有自己的JVM,但web应用程序部署在Tomcat、JBoss、WebSphere、Weblogic或任何其他应用程序服务器上,那么使用System.exit()是一个很大的错误。在最坏的情况下,可能会导致许多其他关键应用程序中断。另一方面,有一些方法可以通过启用安全管理器来防止web应用程序出错。System.exit()和Runtime.exit()都通过安全管理器。启用安全管理器将捕获这些调用并将它们减少为异常,而不是关闭整个VM


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

为什么不使用特定的servler容器进行尝试,看看会发生什么?我希望大多数应用程序都使用安全管理器运行,并配置为限制这一点。如果是,那么答案是否定的。因此正确的答案是,取决于安全管理器是否在使用,以及安全策略是否正确配置/限制。更多的解释可能有助于其他程序员理解它是如何工作的。