フィックスパック 1 を適用した Websphere 8.5 Liberty Profile を使用していますが、サーブレット 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 を使用しています。
この動作がサーブレットの仕様に違反しているという私の仮定は正しいですか? もしそうなら、これらのバグを IBM に報告する最善の方法は何ですか?
Content-Language 応答ヘッダーにわずかに関連するバグ レポートを見つけました。これは、Liberty Profile に対してのみ報告されました (FP1 で修正されました): http://www-01.ibm.com/support/docview。 wss?rs=180&uid=swg1PM67523