2012-04-03 47 views
0

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

因此,我尝试了以下在我的春天实施: response.setContentType(“audio/ogg”); response.setCharacterEncoding(“”);

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

参考:在这个职位的样品#2中这是行不通的:Jetty Response with no Charset

我明白任何想法如何,来解决这个问题。

干杯, 克里斯

+0

** Jetty的版本是什么?** _请在您的SO问题中提供所有相关的详细信息。有3个主要和多个小版本的Jetty广泛使用 - 除非我们知道你在说什么版本,否则我们几乎不可能验证你的结果._ – Tim 2012-04-04 04:26:42

+0

@Tim:你是完全正确的。我们正在使用Jetty 7.4.5和SpringSource 2.9.1.RELEASE。谢谢! – Chris 2012-04-04 09:32:11

回答

0

我不知道这是否会做什么不同,但你可以尝试绕过方便的方法和直接调用方法的setHeader:

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

如果你真的是绊脚石在Jetty的某种bug中,它值得一试。

+0

谢谢,但已经尝试过那样 - >相同的结果。仅使用此项时,字符加密会自动设置为UTF-8。另一个评论:当我在我的web.xml文件中更改编码时,它在HTTP响应中也发生了变化(因为它应该是这样),所以它没有明确设置。 – Chris 2012-04-04 09:33:27

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(); 
    } 
}