Просто удивляйтесь, что скрывается за сценой. На самом деле кажется, что мы можем установить кодировку с помощью:
response.setContentType("text/html; charset=UTF-8")
response.setCharacterEncoding("UTF-8")
В чем разница?
Javadoc довольно ясно о разнице:
void setCharacterEncoding(String charset) Устанавливает кодировку символов (кодировка MIME) ответа, отправляемого клиенту, например, в UTF-8. Если кодировка символов уже установлена setContentType(java.lang.String) или setLocale(java.util.Locale), этот метод переопределяет ее. Вызов setContentType(java.lang.String) со строкой text/html и вызов этого метода со строкой UTF-8 эквивалентны вызову setContentType со строкой text/html; charset=UTF-8.
void setCharacterEncoding(String charset)
setContentType(java.lang.String)
setLocale(java.util.Locale)
text/html
setContentType
text/html; charset=UTF-8
void setContentType(String type) Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не зафиксирован. Данный тип контента может включать спецификацию кодировки символов, например, text/html;charset=UTF-8.
void setContentType(String type)
text/html;charset=UTF-8