Jetty HttpServletResponse无法修改

时间:2012-04-03 15:04:18

标签: firefox audio character-encoding jetty content-type

我们想使用jPlayer,一个带有firefox的HTML5音频播放器,以播放.ogg文件。我们注意到,考虑到HTTP响应中的MEME属性,HTML5音频和firefox存在问题。在这种情况下,我们的内容类型类似于“audio / ogg; charset = UTF-8”。我们认为删除charset编码可能会导致firefox正确解释文件。

因此,我在春季实施中尝试了以下内容: response.setContentType( “音频/ OGG”); response.setCharacterEncoding( “”);

第一行不应设置编码。尽管如此,它已经存在于响应对象之前(在调试时已经识别出来)。奇怪的是:第二行没有改变任何东西,字符编码没有被修改。这种行为与API描述完全矛盾。

参考:它不能像这篇文章的样本#2中描述的那样工作:Jetty Response with no Charset

我很感激如何解决这个问题。

干杯, 克里斯

2 个答案:

答案 0 :(得分:2)

“适合我......”(尽管您应将字符编码设置为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();
    }
}

答案 1 :(得分:0)

我不知道这会有什么不同,但您可以尝试绕过方便方法并直接调用setHeader方法:

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

如果你真的在Jetty遇到某种错误,那值得一试。