Double Possible:
Doit-on l'appeler .close() sur HttpServletResponse.getOutputStream()/.getWriter()?Suis-je responsable de la fermeture de la HttpServletResponse.getOutputStream() (ou le getWriter() ou même de la inputstream) ou devrais-je laisser le conteneur ?
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream o = response.getOutputStream(); ... o.close(); //yes/no ? }
Réponses
Trop de publicités?Vous n'avez pas besoin de le faire.
De pouce à la règle: si vous n'avez pas créer/ouvrir vous-même en utilisant new SomeOutputStream()
, alors vous n'avez pas besoin de le fermer vous-même. Si c'était par exemple un new FileOutputStream("c:/foo.txt")
, alors vous aurez évidemment besoin de fermer vous-même.
Raisons que certaines personnes ne sont tout simplement pour s'assurer que plus rien ne sera écrit sur le corps de la réponse. Si cela arrive, alors ce sera la cause de l' IllegalStateException
dans les journaux du serveur d'applications, mais ce ne serait pas affecter le client, de sorte que le client obtient toujours la bonne réponse. C'est aussi plus facile de débogage pour repérer les problèmes potentiels dans la requête-réponse de la chaîne qui vous ne voudriez pas voir au premier coup d'œil. Par exemple, quelque chose d'autre est en ajoutant plus de données pour le corps de la réponse quelque part plus bas dans la chaîne.
Une autre raison pour laquelle vous voir parmi les partants, c'est qu'ils voulais juste prévenir que plus les données sont écrites sur le corps de la réponse. Vous voyez ce souvent quand JSP incorrectement joue un rôle dans la réponse. Ils ont juste ignorer l' IllegalStateException
s dans les journaux. Inutile de dire que c'est mauvais.
Non, vous n'avez pas besoin de le fermer. Si vous ne vous parvenez à la fin de la réponse au client. Après la fermeture du cours d'eau, vous pouvez envoyer quoi que ce soit d'autre pour le client jusqu'à la prochaine demande. Vous n'avez pas à ouvrir le flux, de sorte que vous n'avez pas à le fermer.