Я использую профиль Websphere 8.5 Liberty с пакетом исправлений 1 и столкнулся со следующей проблемой, которая, похоже, нарушает API сервлета.
Заголовок ответа Content-Language не устанавливается после response.setLocale(), если тело ответа записывается в выходной поток ответа (HttpServletResponse#getOutputStream()). Он отлично работает, если вместо этого тело написано в модуле записи ответов (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 здесь только для того, чтобы воспроизвести случай - конечно, писатель был бы нормальным способом. Мы используем #getOutputStream внутри нашего Java-кода.
Верно ли мое предположение, что такое поведение нарушает спецификацию сервлета? Если да, то как лучше всего сообщить об этих ошибках в IBM?
Я нашел слегка похожий отчет об ошибке с заголовком ответа Content-Language, о котором сообщалось только в отношении профиля Liberty (и он был исправлен в FP1): http://www-01.ibm.com