Jetty HttpServletResponse не может быть изменен - PullRequest
0 голосов
/ 03 апреля 2012

мы хотим использовать jPlayer, аудиоплеер HTML5 с Firefox для воспроизведения файлов .ogg. Мы заметили, что есть проблемы с аудио HTML5 и Firefox, учитывая атрибут MEME в ответе HTTP. В этом случае наш тип контента напоминает «audio / ogg; charset = UTF-8». Мы считаем, что удаление кодировки charset может привести к тому, что firefox правильно интерпретирует файл.

Следовательно, я попробовал следующее в моей весенней реализации: response.setContentType ( "аудио / OGG"); response.setCharacterEncoding ( "");

Первая строка не должна устанавливать кодировку. Тем не менее, он уже присутствует в объекте ответа (распознается при отладке). Странная вещь: вторая строка ничего не меняет, кодировка символов не изменяется. Такое поведение полностью противоречит описанию API.

Ссылка: она не работает, как описано в примере № 2 этого поста: Ответ Jetty без Charset

Я ценю любые идеи, как решить проблему.

Cheers, Chris

Ответы [ 2 ]

2 голосов
/ 06 апреля 2012

«Работает для меня ...» (хотя вы должны установить кодировку char на null вместо "")

Я написал пример кода (ниже) иЯ проверил его на 7.4.5. Я получаю правильный тип контента, который посылается через.

Я не уверен, что для вас не так - возможно, вы могли бы опубликовать некоторый код.

Мое лучшее предположение:что вы пытаетесь установить тип контента после того, как уже отправили контент.Поскольку тип содержимого является заголовком, его необходимо установить до того, как будет зафиксировано любое тело.

public class JettyServer
{
    public static class OggServlet extends HttpServlet
    {
        protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException
        {
            File file = new File("src/main/ogg/file.ogg");

            response.setContentType("audio/ogg");
            response.setCharacterEncoding(null);
            response.setContentLength((int) file.length());

            FileInputStream in = new FileInputStream(file);
            int by;
            while ((by = in.read()) != -1)
            {
                response.getOutputStream().write(by);
            }
        }
    }

    public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        ServletContextHandler handler = new ServletContextHandler();
        handler.addServlet(OggServlet.class, "/audio");
        server.setHandler(handler);
        server.start();
    }
}
0 голосов
/ 03 апреля 2012

Я не знаю, изменит ли это что-нибудь по-другому, но вы можете попробовать обойти вспомогательный метод и вызвать метод setHeader напрямую:

setHeader("Content-Type", "audio/ogg");

Если вы действительно сталкиваетесь с какой-то ошибкой в ​​JettyСтоит того.

...