2009-04-15 11 views

Respuesta

11

No hace hacer una conexión al navegador - el navegador ya ha hecho una conexión con el servidor. Almacena temporalmente lo que escribe en la memoria y luego transmite los datos al final de la solicitud, o se asegura de que todos los encabezados se escribieron en la conexión de red y luego devuelve PrintWriter, que escribe los datos directamente en esa conexión de red.

En el escenario de almacenamiento en búfer puede haber un tamaño de búfer fijo, y si lo supera, los datos escritos hasta ahora se "vacían" a la conexión de red. La gran ventaja de tener un búfer es que si algo sale mal a mitad de camino, puede cambiar su respuesta a una página de error. Si ya comenzó a escribir la respuesta cuando algo sale mal, no hay mucho que pueda hacer para indicar el error limpiamente.

(También existe la cuestión de transmitir la longitud del contenido antes que cualquier contenido, para mantener conexiones activas. Si se agota el búfer antes de completar la respuesta, se me informa de manera confiable que la respuesta usará una codificación fragmentada .)

+0

(codificación fragmentada puede manejar el caso donde tiene que haber escrito un vistazo a las cabeceras antes de completar el almacenamiento temporal de los contenidos.) –

+0

@ Tom: Yo pensaba que podría ser el caso , pero no estaba seguro Editaré –

-1

También tenga en cuenta que varias implementaciones de código abierto de la API de Servlet están disponibles. Esto le permite ver cómo se puede hacer.

Creo que la implementación oficial también se ha abierto, y se incluye con el servidor de Glassfish.

0

Una aplicación bastante sencilla:

PrintWriter getWriter() throws java.io.IOException { 
     return new PrintWriter(socket.getOutputStream()); 
} 
Cuestiones relacionadas