我们想使用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
我很感激如何解决这个问题。
干杯, 克里斯
答案 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遇到某种错误,那值得一试。