¿Por qué en una instancia de ServletResponse
no se pueden llamar getWriter()
y getOutputStream()
?Servlets en java - getWriter() y getOutputStream()
Respuesta
Una decisión de diseño. The Writer y OutputStream mantienen su propio buffer. Si creó uno cada uno, entonces su salida debería fusionarse de alguna manera. Posible, pero más complicado. Entonces decidieron que debes elegir si quieres salida basada en caracteres o salida binaria.
Entonces, ¿por qué no getWriter() devuelve un contenedor en el resultado de getOutputStream()? –
Porque si trataste de escribir en ambos, podrías estropear el resultado debido al almacenamiento en búfer descoordinado. ¿O estás preguntando por qué Writer no expone los métodos de salida binarios de OutputStream? – Thilo
Generalmente esto se debe a que getOutputStream()
se utiliza para escribir contenido binario, mientras que getWriter()
se utiliza para escribir contenido de texto. No tendría sentido escribir ambos en una solicitud de servlet; debería usar uno u otro.
Porque Writer
es una abstracción de nivel superior que OutputStream
. Controla la codificación de caracteres de la secuencia subyacente e incorpora sus propios mecanismos de almacenamiento en búfer.
Si tuviera que escribir directamente en el OutputStream después de usar el Writer, habría un alto riesgo de corrupción de la secuencia subyacente, ya sea por la codificación de caracteres mezclada o la falta de datos almacenados en el búfer.
Para evitar esta confusión, la API de servlet prohíbe el uso de ambos para cualquier respuesta.
Más practicamente, usted usa OutputStream para escribir contenido binario, y Writer para escribir contenido textual.
- 1. Proceso Java getInputStream frente a getOutputStream
- 2. Java Servlets subprocesamiento modelo
- 3. ¿Cómo funciona getWriter() en un HttpServletResponse?
- 4. Diferencias técnicas entre ASP.NET y Java Servlets/JSP
- 5. Ventajas y desventajas de Java EE frente a los servlets
- 6. Servlets asincrónicos vs servlets síncronos
- 7. Contenedor de servlets de Java para desarrollo
- 8. ¿Cómo se desarrollan Java Servlets usando Eclipse?
- 9. Autenticación de formulario estándar Servlets de Java
- 10. Contenedores de servlets y classpath
- 11. comunicación entre servlets remotos
- 12. Constructor de servlets y método init()
- 13. ¿Por qué usar JSP/Servlets?
- 14. Descripción del contenedor de servlets
- 15. Acceso a las variables de publicación mediante los servlets Java
- 16. Embarcadero: servlets vs handlers
- 17. Servlets vs MVC frameworks
- 18. getOutputStream() ya ha sido llamado para esta respuesta
- 19. ¿Por qué tiene que llamar a URLConnection # getInputStream para poder escribir en URLConnection # getOutputStream?
- 20. No entiendo el soporte de Async en servlets 3.0 API
- 21. Agregar múltiples servlets en un único web.xml
- 22. servlets de prueba de unidades
- 23. Por qué usar un marco para servicios RESTful en Java en lugar de servlets de vainilla
- 24. Diferencia entre el servidor web y el contenedor de servlets
- 25. ¿Por qué los EJB son seguros y los servlets no?
- 26. Cómo especificar el parámetro Http Request timeout en el contenedor de servlets de Java
- 27. Forma correcta de analizar objetos JSON que contienen matrices en Java Servlets (con Gson, por ejemplo)
- 28. diferencia entre java bean y java class?
- 29. Ejemplo simple con Servlets de Guice
- 30. ¿Por qué usar un framework MVC cuando los Servlets, JSPs y una capa ligera DAO funcionarán?
Podría ser útil explicar por qué quería llamar a ambos en una solicitud de servlet. –
Probablemente Abkutty no desee llamar a ambos, pero el Servlet, el error que maneja el Servlet y algunos filtros intentan escribir resultados, y no coordinan correctamente entre ellos el método que deben usar. – Thilo
Volvería a pensar en por qué quieres tener ambas cosas. –