我在Fixpack 1中使用Websphere 8.5 Liberty Profile,遇到了以下问题,似乎违反了Servlet API。
如果在响应输出流(HttpServlet响应#getOutputStream())上写入响应主体,则不会在response.setLocale()之后设置内容语言响应标头。如果将正文写在响应写入器上(HttpServlet响应#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报告这些错误的最佳方式是什么?
我发现了一个与内容语言响应标头略有关联的错误报告,该报告仅针对Liberty Profile进行了报告(已在FP1中修复):http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PM67523
我建议使用WASdev社区上的此页面向IBM报告错误。如果您不熟悉WASdev社区,这里也是了解更多关于Liberty概要文件的好地方,并且有一些很棒的教程。