2010-05-20 7 views
9

Cosa accadrebbe se qualcuno scrivesse System.exit() in un servlet se il server o l'applicazione si bloccassero?System.exit in servlet

+5

Perché non lo provi con il tuo particolare contenitore servo e vedi cosa succede? – Jesper

risposta

2

La JVM che esegue il contenitore servlet terminerebbe, quindi sì.

+1

Beh, mi auguro che la maggior parte sarebbe in esecuzione con un gestore della sicurezza e configurato per limitare questo. In tal caso, la risposta è No. Quindi la risposta corretta è, dipende da se un gestore della sicurezza è in uso e la politica di sicurezza è correttamente configurata/limitata. –

12

Forse! Il contenitore dovrebbe aver modificato il gestore della sicurezza (SecurityManager.checkExit()) in modo che la chiamata possa comportare un AccessControlException. Nessuna webapp dovrebbe essere in grado di spegnere il server.

0

Beh, System.exit() terminerà la JVM in esecuzione corrente. Pertanto è probabile che venga attivato il codice scritto nei contenitori servlet 'addShutdownHook.

-2

System.exit() sta chiudendo l'applicazione particolare che il browser

+0

Non funziona in questo modo. –

0

No non è possibile perché sarà un'eccezione di sicurezza.

+0

Un'altra spiegazione potrebbe aiutare gli altri programmatori a capire come funziona o meno. – Daenarys

0

Da https://javarevisited.blogspot.in/2014/11/dont-use-systemexit-on-java-web-application.html:

System.exit() in un'applicazione Web Java, che scorre all'interno o web server o application server, che è essa stessa programma Java non è una buona idea usare affatto. Perché? poiché invocare System.exit() uccide la JVM, richiamandola da Tomcat o Jetty, non solo ucciderà l'applicazione, ma molto probabilmente il server stesso. Questo può essere potenzialmente pericoloso, se quel server ospita anche altre applicazioni critiche, il che non è affatto raro. Secondo la mia esperienza, le chiamate System.exit() sono abbastanza comuni in blocchi try-catch troppo ampi nel codice di avvio dell'applicazione Web che carica le variabili di ambiente, i file delle proprietà, si connette a MQ Series, stabilisce la connessione al database, apre le connessioni socket, ecc. Questo è ancora ok, se si sta scrivendo un server basato su Java, dove ogni applicazione ha una propria JVM, ma con un'applicazione Web distribuita su Tomcat, JBoss, WebSphere, Weblogic o qualsiasi altro server di applicazioni, usando System.exit() è grande sbaglio. Nel peggiore dei casi può causare un'interruzione per molte altre applicazioni critiche. D'altra parte, ci sono modi per prevenire la tua applicazione web da un errore di qualcun altro, abilitando Security Manager. System.exit() e Runtime.exit() passano entrambi attraverso il security manager. L'abilitazione di Security manager catturerà queste chiamate e le ridurrà in un'eccezione anziché chiudere l'intera VM.

Problemi correlati