Tại sao trên một thể hiện của ServletResponse
cả getWriter()
và getOutputStream()
không thể gọi?Servlets trong java - cả getWriter() và getOutputStream()
Trả lời
Quyết định thiết kế. Writer và OutputStream đều duy trì bộ đệm riêng của họ. Nếu bạn đã tạo ra một cái thì đầu ra của chúng sẽ cần được hợp nhất bằng cách nào đó. Có thể, nhưng phức tạp hơn. Vì vậy, họ quyết định rằng bạn phải chọn nếu bạn muốn đầu ra dựa trên ký tự hoặc đầu ra nhị phân.
Vậy tại sao getWriter() trả về một wrapper trên kết quả getOutputStream()? –
Vì nếu bạn cố gắng viết thư cho cả hai, bạn sẽ làm hỏng kết quả do bộ đệm không được phối hợp. Hay bạn hỏi tại sao Writer không trưng ra các phương thức đầu ra nhị phân của OutputStream? – Thilo
Nói chung điều này là do getOutputStream()
được sử dụng để viết nội dung nhị phân, trong khi getWriter()
được sử dụng để viết nội dung văn bản. Nó sẽ không có ý nghĩa để viết cả hai trong một yêu cầu servlet - bạn nên sử dụng một hoặc khác.
Bởi vì Writer
là mức trừu tượng cao hơn so với OutputStream
. Nó kiểm soát mã hóa ký tự của luồng cơ bản và kết hợp các cơ chế đệm riêng của nó.
Nếu bạn đang viết trực tiếp vào OutputStream sau khi sử dụng Writer trước đó, sẽ có nguy cơ bị hỏng luồng cơ bản, do mã hóa ký tự hỗn hợp hoặc thiếu dữ liệu đệm.
Để ngăn chặn sự hỗn hợp này, API servlet cấm sử dụng cả hai cho bất kỳ phản hồi nào.
Thực tế hơn, bạn sử dụng OutputStream để viết nội dung nhị phân và Writer để viết nội dung văn bản.
- 1. Java Servlets luồng mô hình
- 2. Xác thực biểu mẫu chuẩn Java servlets
- 3. Cung cấp nội dung Gzipped với Java Servlets
- 4. Ưu điểm và nhược điểm của Java EE so với Servlets
- 5. Sự khác biệt về kỹ thuật giữa ASP.NET và Java Servlets/JSP
- 6. Tạo Servlets trong IntelliJ IDEA 12 Ulimate
- 7. Tôi không hiểu hỗ trợ Async trong servlets 3.0 API
- 8. App Engine - RequestFactory vs servlets và các aproaches khác
- 9. Ví dụ đơn giản với Guice Servlets
- 10. Thay thế tất cả "(" và ")" trong một chuỗi trong Java
- 11. getOutputStream() đã được kêu gọi phản ứng này
- 12. Làm thế nào để dừng Spring MVC chặn tất cả Servlets khác?
- 13. Làm thế nào để bạn phát triển Java Servlets bằng Eclipse?
- 14. Truy cập các biến bài đăng bằng cách sử dụng Java Servlets
- 15. Tại sao bạn phải gọi URLConnection # getInputStream để có thể ghi ra URLConnection # getOutputStream?
- 16. Cách chính xác để phân tích cú pháp đối tượng JSON chứa mảng trong Java Servlets (với Gson chẳng hạn)
- 17. Làm thế nào để Hợp nhất GWT (Google Web Toolkit) Dự án và Dự án Web Động (ví dụ: Java Web App/Servlets) trong Eclipse?
- 18. Tại sao tiêu đề HttpServletResponse không được cập nhật SAU getWriter() được gọi?
- 19. Java tương đương với python tất cả và bất kỳ
- 20. sự khác biệt giữa java bean và java class?
- 21. Java Servlets - Làm cách nào để phát hiện xem người dùng có đến từ thiết bị di động không?
- 22. Java: cách dễ nhất để đóng gói cả mã Java 1.5 và 1.6
- 23. Tại sao tạo Servlets trong Eclipse phá vỡ tệp web.xml của tôi?
- 24. Lỗi xử lý GroovyPageView: getOutputStream() đã được gọi cho phản hồi này
- 25. Lợi ích của "cả hai" arraylist và linkedlist ... có thể trong java?
- 26. Mã hóa JSON hoặc YAML trong GWT/Java trên cả máy khách và máy chủ
- 27. Java tải xuống tất cả các tệp và thư mục trong một thư mục
- 28. Regex trong Java có được gắn theo mặc định với cả ký tự^và $ không?
- 29. Triển khai cả giao diện Bản đồ và Danh sách trong Java?
- 30. Mở rộng cả T và SomeInterface <T> trong Java
Nó có thể giúp bạn giải thích tại sao bạn muốn gọi cả hai trong một yêu cầu servlet. –
Có lẽ không phải là Abkutty muốn gọi cả hai, nhưng Servlet, lỗi xử lý Servlet và một số Bộ lọc tất cả cố gắng ghi đầu ra, và không phối hợp đúng cách với nhau để sử dụng phương thức nào. – Thilo
Tôi sẽ nghĩ lại về lý do tại sao bạn muốn có cả hai. –