2013-08-14 23 views
6

Khi thêm/cập nhật một tiêu đề phản ứng sau khi yêu cầu đã được xử lý tôi nhận được cảnh báo sau đây:đáp ứng đã cam kết khi sử dụng Spring 3.x trên Websphere 8,5

com.ibm.ws.webcontainer.srt.SRTServletResponse setHeader SRVE8094W: WARNING: Cannot set header. Response already committed. 

Tôi cố gắng để thao tác các tiêu đề bằng cách gọi httpServletResponse.setHeader() hoặc httpServletResponse.addHeader() từ bên trong bộ lọc servlet sau filterChain.doFilter() hoặc bằng bộ chặn chặn mã hậu bưu điện.

Tôi đã gặp sự cố này khi chạy ứng dụng web của tôi bằng cách sử dụng spring 3.x trên websphere 8.5.

Sự cố không được sao chép trên tomcat 7.0 do đó tôi đoán là nó có liên quan đến Websphere. Vấn đề không được sao chép trong một ứng dụng servlet thuần túy do đó tôi đoán là nó liên quan đến mùa xuân.

Tôi quen thuộc với

ShallowEtagHeaderFilter does not work under WAS8 app server

và với

Cannot set header in JSP. Response already committed

nhưng tôi đang tìm kiếm một giải pháp "sạch".

Ai đó có thể giúp tôi về điều này không?

+0

Bạn có thể sửa đổi bộ lọc của mình để bao bọc đối tượng 'HttpServletResponse' bằng chính đối tượng của bạn không xóa tiêu đề và' OutputStream' cho đến một thời điểm cụ thể, ví dụ: khi bộ lọc của bạn trả về từ 'doFilter()'. –

+0

Cảm ơn, nhưng hiện tại tôi không tìm cách giải quyết, và vì tôi nghĩ đó là vấn đề Spring-Websphere nên tôi vẫn hy vọng có một giải pháp cho vấn đề này. –

+0

Bạn không thể đặt tiêu đề trước 'doFilter()'? –

Trả lời

-1

Websphere tuân thủ nghiêm ngặt tiêu chuẩn J2EE, do đó mọi thứ hoạt động trong Tomcat không nhất thiết phải hoạt động trong Websphere. Trong dự án của tôi, tôi nhận được rất nhiều ngoại lệ/lỗi đặc biệt cho Websphere, nhưng hoạt động như một sự quyến rũ trong Tomcat. Tôi đề nghị bạn đặt tiêu đề trong bộ điều khiển. Một thay thế khác là không tuôn ra luồng đầu ra trong bộ điều khiển (nếu bạn đã thực hiện nó một cách rõ ràng).

Các vấn đề liên quan