【问题标题】:Jetty HttpServletResponse can't be modifiedJetty HttpServletResponse 无法修改
【发布时间】:2012-04-17 06:33:46
【问题描述】:

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

因此,我在 Spring 实现中尝试了以下方法: response.setContentType("音频/ogg"); response.setCharacterEncoding("");

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

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

感谢任何解决问题的想法。

干杯, 克里斯

【问题讨论】:

  • 什么版本的 Jetty? 请在您的 SO 问题中提供所有相关详细信息。广泛使用的 Jetty 有 3 个主要版本和多个次要版本 - 除非我们知道您在说什么版本,否则我们几乎不可能验证您的结果。
  • @Tim:你完全正确。我们正在使用 Jetty 7.4.5 和 SpringSource 2.9.1.RELEASE。谢谢!

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


【解决方案1】:

“为我工作...”(尽管您应该将 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();
    }
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,但已经尝试过 -> 相同的结果。仅使用此选项时,字符加密会自动设置为 UTF-8。再说一句:当我更改 web.xml 文件中的编码时,它在 HTTP 响应中也发生了更改(正如它应该的那样),所以它没有明确设置。
    猜你喜欢
    • 2020-10-14
    • 2012-11-16
    • 2015-11-06
    • 2020-06-18
    • 2012-01-26
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多