Что произойдет, если кто-то напишет System.exit() в сервлете, произойдет ли сбой сервера или приложения?
System.exit()
Может быть! Контейнер должен был изменить менеджер безопасности (SecurityManager.checkExit()), чтобы вызов мог привести к AccessControlException. Ни одно веб-приложение не должно быть способно завершить работу сервера.
SecurityManager.checkExit()
AccessControlException
Ответ на этот вопрос уже есть здесь: http://tomcat.apache.org/tomcat-5.5-doc/security-manager-howto.html
JVM, работающая с контейнером сервлета, будет прервана, поэтому да.
С https://javarevisited.blogspot.in/2014/11/dont-use-systemexit-on-java-web-application.html:
System.exit () в веб-приложении Java, которое запускается либо на веб-сервере, либо на сервере приложений, который сам по себе является программой Java, вообще не рекомендуется использовать. Зачем? потому что вызов System.exit () убивает вашу JVM, вызов этого из Tomcat или Jetty не только уничтожит ваше приложение, но, скорее всего, сам сервер. Это может быть потенциально опасно, если на этом сервере также размещаются другие критически важные приложения, что вовсе не редкость. Согласно моему опыту, вызовы System.exit () довольно часто встречаются в слишком широких блоках try-catch в коде запуска веб-приложения, который загружает переменные среды, файлы свойств, подключается к серии MQ, устанавливает соединение с базой данных, открывает соединения с сокетами и т. Д. Это нормально, если вы пишете основной Java-сервер, где у каждого приложения есть своя JVM, но если веб-приложение развернуто на Tomcat, JBoss, WebSphere, Weblogic или любом другом сервере приложений, использование System.exit () очень важно. ошибка. В худшем случае может привести к отключению для многих других важных приложений. С другой стороны, есть способы предотвратить ваше веб-приложение от чужой ошибки, включив Security Manager. System.exit () и Runtime.exit () проходят через менеджер безопасности. Включение диспетчера безопасности будет перехватывать эти вызовы и превращать их в исключение, а не завершать работу всей виртуальной машины.
Нет, вы не можете, потому что это вызовет исключение безопасности.
System.exit () закрывает определенное приложение в этом браузере
Ну, System.exit() прервет текущую работающую JVM. Поэтому вполне вероятно, что код, написанный в контейнерах сервлетов addShutdownHook, будет запущен.
addShutdownHook