Perché su un'istanza di ServletResponse
non è possibile chiamare sia getWriter()
e getOutputStream()
?Servlet in java - getWriter() e getOutputStream()
risposta
Una decisione di progettazione. Sia Writer che OutputStream mantengono il proprio buffer. Se ne hai creato uno, allora il loro output dovrebbe essere unito in qualche modo. Possibile, ma più complicato. Quindi hanno deciso di scegliere se si desidera un output basato su caratteri o un output binario.
Quindi perché getWriter() non restituisce un wrapper sul risultato di getOutputStream()? –
Perché se provassi a scrivere su entrambi, rovinerai il risultato a causa del buffering non coordinato. O stai chiedendo perché Writer non espone i metodi di output binario di OutputStream? – Thilo
Generalmente questo è dovuto al fatto che getOutputStream()
viene utilizzato per scrivere contenuti binari, mentre getWriter()
viene utilizzato per scrivere contenuto testuale. Non avrebbe senso scrivere entrambi in una richiesta di servlet: dovresti usare l'una o l'altra.
Perché uno Writer
è un'astrazione di livello superiore rispetto a OutputStream
. Controlla la codifica dei caratteri del flusso sottostante e incorpora i propri meccanismi di buffering.
Se si dovesse scrivere direttamente su OutputStream dopo aver utilizzato in precedenza il writer, si correrebbe il rischio elevato di danneggiamento del flusso sottostante, a causa della codifica di caratteri con collegamento misto o della mancanza di dati memorizzati nel buffer.
Per evitare questo confusione, l'API servlet impedisce l'utilizzo di entrambi per una sola risposta.
Più praticamente, si utilizza OutputStream per scrivere contenuti binari e Writer per scrivere contenuto testuale.
- 1. Come funziona getWriter() in HttpServletResponse?
- 2. ExecutorService in Java Servlet
- 3. Grails sicurezza molla, filtri servlet e risposta
- 4. Differenza tra filtro e listener in Servlet (Java EE)
- 5. Vantaggi e svantaggi di Java EE e servlet
- 6. Java Servlet NIO su file
- 7. Modello di threading Java Servlet
- 8. Java/servlet: get sql.Date attuale
- 9. Can not Deserialize JSON in Java Servlet
- 10. Servlet del tunnel HTTP (Java)
- 11. Autenticazione modulo standard Servlet Java
- 12. Java Servlet: differenza tra invio di reindirizzamento e indietro nel servlet
- 13. Differenze tecniche tra ASP.NET e Java Servlet/JSP
- 14. login, ricordami, applicazione utilizzando java servlet e jsp
- 15. Carica immagine da Android a servlet java e salvalo
- 16. CXF e più servlet mapping
- 17. Visualizza Pdf nel browser utilizzando il servlet java
- 18. Come chiamare un servlet da codice Java
- 19. Tecnologia Microsoft simile ai servlet EE Java?
- 20. L'interfaccia Java Servlet è prevista qui
- 21. video download/flusso utilizzando Java servlet
- 22. Lettura propria MANIFEST.MF nel servlet Java
- 23. Come impedire net :: ERR_INCOMPLETE_CHUNKED_ENCODING quando si utilizzano eventi server HTML5 e servlet Java?
- 24. Problema di reindirizzamento filtro servlet Java
- 25. Servlet Java - Pulizia della sessione (HttpServletRequest)
- 26. Chiama il servlet Java da Android
- 27. Devo chiudere il flusso di output del servlet?
- 28. servlet Java init override (ServletConfig config)
- 29. Metodi di autenticazione di più servlet java
- 30. Servlet 3.0 Spring Java Config JNDI
Potrebbe essere utile se si dovesse spiegare perché si desidera chiamare entrambi in una richiesta di servlet. –
Probabilmente non è Abkutty che vuole chiamare entrambi, ma il servlet, il servlet di gestione degli errori e alcuni filtri che tentano tutti di scrivere output e non coordinano correttamente tra loro quale metodo utilizzare. – Thilo
Vorrei ripensare al motivo per cui vuoi avere entrambi. –