Използвам Websphere 8.5 Liberty Profile с Fixpack 1 и срещнах следния проблем, който изглежда нарушава API на Servlet.
Заглавката на отговора на езика на съдържанието не е зададена след response.setLocale(), ако тялото на отговора се записва в изходния поток на отговора (HttpServletResponse#getOutputStream()). Работи добре, ако вместо това тялото е написано върху записващия отговор (HttpServletResponse#getWriter())
Следният JSP не връща заглавка на отговор на езика на съдържанието:
<%@ 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 тук само за да възпроизведа случая - разбира се, писателят би бил нормалният начин. Ние използваме #getOutputStream вътрешно в нашия Java код.
Правилно ли е предположението ми, че това поведение нарушава спецификацията на Servlet? Ако е така, какъв е най-добрият начин да докладвате тези грешки на IBM?
Намерих леко свързан доклад за грешка със заглавката на отговора Content-Language, който беше докладван само срещу Liberty Profile (и беше коригиран в FP1): http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PM67523