System.exit в сервлете - PullRequest
       13

System.exit в сервлете

9 голосов
/ 20 мая 2010

Что произойдет, если кто-то напишет System.exit() в сервлете, произойдет ли сбой сервера или приложения?

Ответы [ 7 ]

12 голосов
/ 20 мая 2010

Может быть! Контейнер должен был изменить менеджер безопасности (SecurityManager.checkExit()), чтобы вызов мог привести к AccessControlException. Ни одно веб-приложение не должно быть способно завершить работу сервера.

3 голосов
/ 20 мая 2010

Ответ на этот вопрос уже есть здесь: http://tomcat.apache.org/tomcat-5.5-doc/security-manager-howto.html

2 голосов
/ 20 мая 2010

JVM, работающая с контейнером сервлета, будет прервана, поэтому да.

0 голосов
/ 06 февраля 2017

С 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 () проходят через менеджер безопасности. Включение диспетчера безопасности будет перехватывать эти вызовы и превращать их в исключение, а не завершать работу всей виртуальной машины.

0 голосов
/ 21 июня 2014

Нет, вы не можете, потому что это вызовет исключение безопасности.

0 голосов
/ 16 августа 2013

System.exit () закрывает определенное приложение в этом браузере

0 голосов
/ 11 августа 2011

Ну, System.exit() прервет текущую работающую JVM. Поэтому вполне вероятно, что код, написанный в контейнерах сервлетов addShutdownHook, будет запущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...