我在使用带有 Fixpack 1 的 Websphere 8.5 Liberty Profile 时遇到了以下似乎违反 Servlet API 的问题。
如果响应正文正在写入响应输出流 (HttpServletResponse#getOutputStream()),则在 response.setLocale() 之后未设置 Content-Language 响应标头。如果正文写在响应编写器上,它工作正常(HttpServletResponse#getWriter())
以下 JSP 不返回 Content-Language 响应标头:
<%@ page contentType="text/plain;charset=ISO-8859-1" session="false" import="java.util.*" %><%
response.setLocale(Locale.ITALY);
java.io.OutputStream os = response.getOutputStream();
try {
os.write("Hello World".getBytes("ISO-8859-1"));
} finally {
os.close();
}
%>
请注意,JSP 不得包含 <% ... %> 之外的任何字符,甚至不能在文件末尾包含尾随换行符。我在这里使用 JSP 只是为了重现该案例 - 当然,作家将是正常的方式。我们在 Java 代码内部使用了#getOutputStream。
我的假设是否正确,这种行为违反了 Servlet 规范?如果是这样,向 IBM 报告这些错误的最佳方式是什么?
我发现了一个与 Content-Language 响应标头稍微相关的错误报告,该错误报告仅针对 Liberty Profile 报告(并且已在 FP1 中修复):http://www-01.ibm.com/support/docview。 wss?rs=180&uid=swg1PM67523