2010-05-20 8 views
9

¿Qué pasaría si alguien escribe System.exit() en un servlet en el que se bloquea el servidor o la aplicación?System.exit en el servlet

+5

¿Por qué no lo pruebas con tu contenedor de porciones particular y ves qué pasa? – Jesper

Respuesta

2

La JVM que ejecuta el contenedor de servlets se cerraría, por lo que sí.

+1

Bueno, espero que la mayoría se ejecute con un administrador de seguridad y se configure para restringir esto. Si es así, entonces la respuesta es No. Así que la respuesta correcta es, depende de si un administrador de seguridad está en uso y la política de seguridad está configurada/restringida correctamente. –

12

¡Quizás! El contenedor debería haber modificado el administrador de seguridad (SecurityManager.checkExit()) para que la llamada pueda dar como resultado un AccessControlException. Ninguna aplicación web debería poder cerrar el servidor.

0

Bueno, System.exit() terminará la JVM de ejecución actual. Por lo tanto, es probable que se active el código escrito en los contenedores de servlets 'addShutdownHook.

-2

System.exit() está cerrando la aplicación particular en ese navegador

+0

No funciona de esa manera. –

0

No se puede porque no va a lanzar una excepción de seguridad.

+0

Una explicación un poco más podría ayudar a los compañeros programadores a entender cómo funciona o no. – Daenarys

0

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

System.exit() de aplicación Java Web, que se ejecuta dentro de cualquier servidor web o servidor de aplicaciones, que a su vez es el programa Java no es una buena idea para usarlo en absoluto. ¿Por qué? porque invocar System.exit() mata a su JVM, invocando esto desde Tomcat o Jetty, no solo matará su aplicación sino que probablemente sea el servidor mismo. Esto puede ser potencialmente peligroso, si ese servidor también alberga otra aplicación crítica, que no es poco común. Según mi experiencia, las llamadas System.exit() son bastante comunes en bloques try-catch demasiado amplios en código de inicio de aplicación web que carga variables de entorno, archivos de propiedades, se conecta a MQ Series, establece conexión de base de datos, abre conexiones de socket, etc. . Esto todavía está bien, si está escribiendo un servidor basado en Java central, donde cada aplicación tiene su propia JVM, pero con la aplicación web implementada en Tomcat, JBoss, WebSphere, Weblogic o cualquier otro servidor de aplicaciones, el uso de System.exit() es grande Error. En el peor de los casos, puede ocasionar interrupciones en muchas otras aplicaciones críticas. Por otro lado, hay formas de evitar que su aplicación web se deba a un error de otra persona al habilitar Security Manager. System.exit() y Runtime.exit() pasan por el administrador de seguridad. Habilitar el administrador de seguridad captará estas llamadas y las reducirá a una excepción en lugar de cerrar toda la máquina virtual.

Cuestiones relacionadas