usar servlet httpservlet example ejemplo contenedor java servlets

httpservlet - servlet java ejemplo



¿Debo cerrar el servlet outputstream? (2)

Posible duplicado:
¿Debería uno llamar a .close () en HttpServletResponse.getOutputStream () /. GetWriter ()?

¿Soy responsable de cerrar el HttpServletResponse.getOutputStream () (o el getWriter () o incluso el inputstream) o debería dejarlo en el contenedor?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream o = response.getOutputStream(); ... o.close(); //yes/no ? }


De hecho, no es necesario que lo haga.

Regla de Thumb: si no la creó / abrió usted mismo usando el new SomeOutputStream() , entonces no necesita cerrarla usted mismo. Si fuera, por ejemplo, un new FileOutputStream("c:/foo.txt") , entonces obviamente debe cerrarlo usted mismo.

Las razones por las que algunas personas aún lo hacen son solo para asegurarse de que no se escriba nada más en el cuerpo de respuesta. Si alguna vez ocurriera, esto provocaría una IllegalStateException en los registros del servidor de aplicaciones, pero esto no afectaría al cliente, por lo que el cliente aún obtiene la respuesta adecuada. Esta también es una depuración más fácil para detectar los problemas potenciales en la cadena de solicitud-respuesta que no vería a primera vista. Por ejemplo, algo más está agregando más datos al cuerpo de respuesta en algún lugar más abajo de la cadena.

Otra razón que ve entre los principiantes es que solo querían evitar que se escriban más datos en el cuerpo de respuesta. Ve esto a menudo cuando JSP desempeña un papel incorrecto en la respuesta. Simplemente ignoran las IllegalStateException en los registros. Huelga decir que este propósito particular es malo .


No, no necesitas cerrarlo. Si lo haces, básicamente terminas la respuesta al cliente. Después de cerrar la transmisión, no puede enviar nada más al cliente hasta la siguiente solicitud. No abriste la transmisión, por lo que no tienes que cerrarla.