<%@page contentType="text/html;charset=Windows-1251" %>
Увидев эту директиву сервер понимает, что страница записана в указанной кодировке, и что в сгенерённый код надо добавить вызов response.setContentType() с указанным contentType.
Если сервер поддерживает спецификацию Servlet 2.3, то он также добавит и вызов request.setCharacterEncoding() с нужной кодировкой, таким образом автоматом решая и третью проблему.
Для более старых серверов для раскодирования параметров в запросе клиента надо применять ухищрения, аналогичные описанным в разделе по сервлетам.
/jive/header.jsp
/jive/admin/header.jsp
В них надо в начало добавить строчку:
<%@page contentType="text/html;charset=UTF-8" %>
Вместо UTF-8 можно использовать любую кодировку, поддерживающую русские буквы - всё зависит от вкусов и предпочтений.
Информацию об этом прислал Алексей Епишкин, за что ему отдельное спасибо.
...
switch(charstring.c1(i))
...
public final char c1(int i){
if(i < 0 || i >= length)
throw new StringIndexOutOfBoundsException(i);
else
return (char)(data[offset + i] & 0xff);
data - это массив типа char[].
Как видно, ошибка тут тривиальна - разработчик почему-то был уверен что символы с кодами больше 255 - это ошибка природы. :-)