Un autre argument contre la fermeture de l' OutputStream
. Regardez cette servlet. Elle lève une exception. L'exception est représentée dans la web.xml à une erreur JSP:
package ser;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "Erroneous", urlPatterns = {"/Erroneous"})
public class Erroneous extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
try {
throw new IOException("An error");
} finally {
// out.close();
}
}
}
L'web.xml le fichier contient:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<error-page>
<exception-type>java.io.IOException</exception-type>
<location>/error.jsp</location>
</error-page>
</web-app>
Et l'erreur.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error Page</title>
</head>
<body>
<h1><%= exception.getMessage()%></h1>
</body>
</html>
Lorsque vous chargez /Erroneous
dans le navigateur, vous voyez la page d'erreur qui affiche "Une erreur".
Mais si vous dé-commentez l' out.close()
ligne au-dessus de la servlet, redéployer de l'application, et de recharger /Erroneous
vous verrez rien dans le navigateur. Je n'ai aucune idée de ce qui se passe réellement, mais je suppose que c' out.close()
empêche l'erreur de manipulation.
Testé avec Tomcat 7.0.50, Java EE 6 à l'aide de Netbeans 7.4.