2010-01-08 24 views
7

WebSphere ghi lại thông báo cảnh báo “SRTServletRes W CẢNH BÁO: Không thể đặt tiêu đề. Đã trả lời "cho một yêu cầu JSP. Tôi cần các tiêu đề được trả lời sau trong mã của tôi. Tôi đã làm một số nghiên cứu và hiểu rằng Servlet đang cố gắng gửi nhiều dữ liệu hơn cho luồng đầu ra, nhưng luồng đã được cam kết. Tôi không hiểu tại sao điều này lại xảy ra với JSP đặc biệt này, vì mã Servlet này hoạt động tốt cho các JSP khác. Trang này không được chuyển hướng và tôi nhận được phản hồi không có tiêu đề phản hồi.Không thể đặt tiêu đề trong JSP. Phản hồi đã cam kết

Trả lời

20

Khi một câu trả lời được cam kết, điều đó có nghĩa là ít nhất các tiêu đề đã được gửi đến phía máy khách. Bạn không thể đặt/thay đổi tiêu đề khi phản hồi đã được cam kết, vì đã quá muộn.

Một phản ứng sẽ được cam kết bất cứ khi nào một hoặc nhiều trong các điều kiện sau đây được đáp ứng:

  • HttpServletResponse#sendRedirect() đã được gọi.
  • Hơn 2K đã được ghi vào đầu ra phản hồi, bởi Servlet hoặc JSP.
  • Hơn 0K nhưng ít hơn 2K đã được viết flush() đã được gọi trên luồng đầu ra phản hồi, bởi Servlet hoặc JSP.

Giới hạn bộ đệm 2K có thể định cấu hình trong cấu hình của máy chủ ứng dụng.

Bạn cần phải sắp xếp lại logic mã để chỉ đặt tiêu đề trước phản hồi được cam kết. Bạn nên không bao giờ đặt/thay đổi tiêu đề phản hồi bằng cách sử dụng tập lệnh bên trong/nửa chừng JSP. Bạn chỉ nên làm điều đó trong một Filter trước khi tiếp tục chuỗi hoặc trong bộ điều khiển trang Servlet trước khi gửi yêu cầu. Ngoài ra hãy cẩn thận rằng cả hai không được gọi bởi một JSP bao gồm tập tin.

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